diff --git a/.gitattributes b/.gitattributes
index 98a33b2e7a7d605133a0d1ec07f46c5dbe7d2893..b3719b153153ef6c8df56800211e77ef275a4bd2 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -280,6 +280,11 @@ README* header_spec=.ignore
 
 /doc/aorai/Makefile header_spec=AORAI_LGPL
 
+/share/analysis-scripts/fc-estimate-difficulty.mk header_spec=.ignore
+/share/analysis-scripts/fced-lin.Dockerfile header_spec=.ignore
+/share/analysis-scripts/fced-win.Dockerfile header_spec=.ignore
+/share/analysis-scripts/fced-test/a.c header_spec=.ignore
+/share/analysis-scripts/fced-test/a.h header_spec=.ignore
 /share/analysis-scripts/flamegraph.pl header_spec=CDDL
 /share/emacs/acsl.el header_spec=CEA_PR_LGPL
 /share/libc/argz.h header_spec=CEA_FSF_LGPL
diff --git a/.gitignore b/.gitignore
index acdc5c997665e5661db8da87369e862623fe424f..90dbf023094a2487344f8dea65b2d5226897ab97 100644
--- a/.gitignore
+++ b/.gitignore
@@ -186,6 +186,15 @@ Makefile.plugin.generated
 # WP/Coq Generated file
 .lia.cache
 
+# analysis-scripts
+share/analysis-scripts/build
+share/analysis-scripts/fced-dist
+share/analysis-scripts/fced-dist-prepare*
+share/analysis-scripts/fc-estimate-difficulty.*spec
+share/analysis-scripts/fc-estimate-difficulty
+share/analysis-scripts/fc-estimate-difficulty.exe
+share/analysis-scripts/libc_metrics.json
+
 # generated ML files
 
 /src/libraries/utils/json.ml
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4f91f41c425a00d9be4d48db5b7d9693fb21a0ef..07408029b7f8fc528172c00f9e3554d73ae1771c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -172,13 +172,6 @@ e-acsl-tests:
     - ./nix/build-proxy.sh e-acsl-tests
   <<: *coverage
 
-e-acsl-dev-tests:
-  stage: tests
-  script:
-    - ./nix/build-proxy.sh e-acsl-dev-tests
-  <<: *coverage
-  allow_failure: true
-
 .build_template: &eva_template
   stage: tests
   script:
@@ -231,6 +224,7 @@ wp-tests:
 ivette-tests:
   stage: tests
   image: "ocaml/opam:ubuntu-lts-ocaml-$OCAML"
+  when: manual
   before_script:
     - sudo apt update
     - sudo apt install -y xvfb curl unzip libnss3 libasound2
@@ -255,7 +249,6 @@ ivette-tests:
       - ivette/screenshots
     when: always
     expire_in: 1 day
-  allow_failure: true
   tags:
     - docker
 
@@ -511,7 +504,7 @@ ocaml-versions-nightly:
   image: 'ocaml/opam:ubuntu-20.04-ocaml-$OCAML'
   script:
     - sudo apt update
-    - opam pin . -n
+    - opam pin . -n -k path
     - opam depext frama-c --with-test
     - opam install --jobs 2 frama-c --with-test --with-doc
     - frama-c --plugins
diff --git a/ACKNOWLEDGEMENTS.md b/ACKNOWLEDGEMENTS.md
new file mode 100644
index 0000000000000000000000000000000000000000..5330533764638ae9061ad5edb167490a6ba8f53e
--- /dev/null
+++ b/ACKNOWLEDGEMENTS.md
@@ -0,0 +1,35 @@
+# Acknowledgements
+
+The development of Frama-C has been fuelled by many collaborative projects,
+notably at French and European level. Below is a list of the most important
+ones
+
+## European projects
+
+- [SecOPERA](https://www.secopera.eu) (2023-2025)
+- [Medsecurance](https://www.medsecurance.org/) (2023-2025)
+- [EnsureSec](https://www.ensuresec.eu/index.html) (2020-2022)
+- [Sparta](https://www.sparta.eu/) (2019-2022)
+- [Decoder](https://www.decoder-project.eu) (2019-2022)
+- [Vessedia](https://cordis.europa.eu/project/id/731453) (2017-2020)
+- [Stance](https://cordis.europa.eu/project/id/317753) (2012-2016)
+
+## French projects
+
+### ANR
+
+- [OptiTrust](https://anr.fr/Projet-ANR-22-CE25-0017) (2022-2026)
+- [CoMeMov](https://anr.fr/Project-ANR-22-CE25-0018) (2022-2025)
+- [U3CAT](https://www.frama-c.com/u3cat/) (2009-2012)
+- [Device-Soft](https://anr.fr/Project-ANR-09-CARN-0006) (2009-2011)
+- [CAT](https://anr.fr/Projet-ANR-05-RNTL-0003) (2006-2009)
+
+### PEPR
+
+- [SecurEval](https://www.pepr-secureval.com/) (2022-2027)
+
+### Others
+
+- [LEIA](https://list.cea.fr/fr/21-septembre-2021-leia-automatise-lanalyse-logicielle-pour-garantir-la-securite-des-objets-connectes/) (2021-2022)
+- [INGOPCS](https://www.s2opc.com/ingopcs/) (2016-2018)
+- [Hi-Lite](https://www.open-do.org/projects/hi-lite/index.html) (2010-2013)
diff --git a/ALL_VERSIONS b/ALL_VERSIONS
index 8a8ff94767995424b50f31dcd026971ae48a1dd3..b1b8812d34378cbf5905a0aadc8c1ed3459cedfe 100644
--- a/ALL_VERSIONS
+++ b/ALL_VERSIONS
@@ -1,7 +1,10 @@
 Version number			Date of release		Notes
 ==============			===============		=====
-27.1 (Cobalt)                   2023, July, 18
-27.0 (Cobalt)                   2023, June, 15
+29.0 (Copper)                   2024, June 6
+28.1 (Nickel)                   2024, March 24          Bugs fixed
+28.0 (Nickel)                   2023, November 29
+27.1 (Cobalt)                   2023, July 18
+27.0 (Cobalt)                   2023, June 15
 26.1 (Iron)                     2023, February 15
 26.0 (Iron)                     2022, November 23
 25.0 (Manganese)                2022, June 22
diff --git a/Changelog b/Changelog
index 7cccdb5f30d1168e880d64c16e450bae897c645b..8a534b892a91fa1ca88cc3eca46836720b806bd1 100644
--- a/Changelog
+++ b/Changelog
@@ -18,8 +18,21 @@
 Open Source Release <next-release>
 ###############################################################################
 
+###############################################################################
+Open Source Release 29.0 (Copper)
+###############################################################################
+
+-   Ivette    [2024-05-03] Fix performance issues on large codebases.
+-   Kernel    [2024-04-30] new warning category too-large-array, allowing to
+              use array > SIZE_MAX by changing its status (default is error).
+-   Eva       [2024-04-26] Improve builtins memcpy, memmove and memset when
+              arguments are imprecise.
 o   Dev       [2024-04-22] Remove frama-c-build-scripts.sh; add a section in
               the user manual about how to manually replace it.
+-!  Kernel    [2024-04-19] Change format of custom_defs field in machdep schema
+              and allow #undefining builtin macros in the command-line.
+-   Eva       [2024-04-18] Remove support for deprecated WIDEN_HINTS loop pragma.
+              Use ACSL extension "widen_hints" instead.
 o   Kernel    [2024-04-17] Remove deprecated funcs Extlib.string_{pre,suf}fix
 -   Kernel    [2024-04-18] New ACSL extension loop unroll (replaces loop pragma UNROLL)
 -!  Kernel    [2024-04-18] Removed all loop pragma annotations
@@ -27,6 +40,13 @@ o   Kernel    [2024-04-17] Remove deprecated funcs Extlib.string_{pre,suf}fix
 -   Alias     [2024-04-16] Fix analysis results in the presence of structures.
               Complete rework of the API. Improved documentation. Fix stack
               overflow in case of a cyclic graph.
+-   Eva       [2024-04-10] Reduce pointer values according to ACSL predicate
+              \base_addr.
+-*  Eva       [2024-04-10] Fix a crash when running successive analyses using
+              the -eva-domains-function parameter.
+-   Ivette    [2024-04-09] New notifications at the bottom-right of the main
+              window. Some components are highlighted in the bottom bar when
+              they are updated but are not currently visible.
 -   Kernel    [2024-04-04] Avoid ambiguous pretty-printing when C labels match
               the name of an ACSL built-in label (fix #@1359)
 -!  Kernel    [2024-04-02] Systematically abort when a function is redeclared
@@ -36,13 +56,31 @@ o   Kernel    [2024-04-17] Remove deprecated funcs Extlib.string_{pre,suf}fix
 o   Kernel    [2024-04-02] Annotations.{fold,iter}_behaviors now pass full
               behaviors to the iterated function. To iter on fragments split by
               behavior and emitter, use {fold,iter}_behaviors_by_emitter.
+-   Eva       [2024-03-29] Reduce pointer values according to ACSL predicate
+              valid_string and valid_read_string.
 o!  Kernel    [2024-03-29] Refactor current location handling mechanism
+o   Ivette    [2024-03-29] Upgrade to node 20 and electron 28. Use vite instead
+              of webpack. Upgrade many dependencies.
+-   Ivette    [2024-03-28] In the Eva values table, show values before/after
+              statements with annotation, as values can be reduced after them.
+-   Ivette    [2024-03-26] Add feedback when the user requests the evaluation
+              of a custom term.
 -   Kernel    [2024-03-26] Introduce \plugin:: prefix for ACSL extensions,
               unknown extensions can be safely ignored when the plug-in that
               handles them is not available
+-   Ivette    [2024-03-20] Add shortcut to select next/previous tab.
+-   Ivette    [2024-03-14] Complete redesign of the main view. Components and
+              views can be selected in the left sidebar (the right sidebar has
+              been removed). The top bar contains tabs of the currently selected
+              views. Components can be docked in the bottom bar, to be shown or
+              hidden on a simple click.
 -*  Variadic  [2024-03-07] Make sure that generated functions have fresh names
 o!  Kernel    [2024-03-07] More coherent naming of functions determining if a
               symbol is a Frama-C built-in.
+-   Eva       [2024-03-04] Better reporting of imprecise "garbled mix" values
+              (resulting from imprecise or unsupported operations on addresses)
+              through more relevant messages and a compact summary at the end of
+              the analysis, enabled by default.
 -*  Kernel    [2024-03-04] Accept conditional expr whose 2d and 3d operands
               have type void, as per C11 6.5.15§3
 -*  Kernel    [2024-02-22] When an array is declared with a fixed length l,
@@ -52,6 +90,8 @@ o!  Kernel    [2024-01-29] Db is now mostly empty, the only remaining value is
               Db.Main.extend which is deprecated and replaced by
               Boot.Main.extend. Features related to asynchronous interactions
               are now handled in module Async
+-   Ivette    [2023-11-24] Global variables and types are listed in the sidebar.
+              Global variables can be filtered according to some criteria.
 
 ###############################################################################
 Open Source Release 28.1 (Nickel)
diff --git a/Makefile b/Makefile
index 3fb8528b0391a090ab0a9e186b17212dbf53a7ec..7c5b6b4d7308d1a4379af5037223d779a6428333 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/VERSION b/VERSION
index 9263b4da4adabeb62cb32baaa15964ee53c523ad..6630b191eeab90f86c2ff9d96fcf0f432831e44e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-28.1+dev
+29.0+dev
diff --git a/VERSION_CODENAME b/VERSION_CODENAME
index e1d1ff400e5b54cf2be1b09eb7318092467ec5a7..6ef0d73b2e61dce4f0efb74239694c393c8113d0 100644
--- a/VERSION_CODENAME
+++ b/VERSION_CODENAME
@@ -1 +1 @@
-Nickel
+Copper
diff --git a/bin/build-src-distrib.sh b/bin/build-src-distrib.sh
index 4a800ba0e7c925a5686b192b754b00ecdecd0976..c4b43f1b3eb991cb8fe19c64be41c21770f3a785 100755
--- a/bin/build-src-distrib.sh
+++ b/bin/build-src-distrib.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/check-reference-configuration.sh b/bin/check-reference-configuration.sh
index 173d841e9bb024cee0bd0ec39b210745d5b35b6d..299a69366ab4d1370a331d146f94246157d8425f 100755
--- a/bin/check-reference-configuration.sh
+++ b/bin/check-reference-configuration.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/dune b/bin/dune
index 86b17794f21410b22618a8241a29120928303930..19ca01877fd45aad408a7daee1f96a9390992387 100644
--- a/bin/dune
+++ b/bin/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/bin/frama-c b/bin/frama-c
index 88838755bcbd17e06054b3cdd1f6666a0b0fc7c1..f00269e61e439b386a4e7416e1e268de75077c0b 100755
--- a/bin/frama-c
+++ b/bin/frama-c
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/frama-c-build-scripts.sh b/bin/frama-c-build-scripts.sh
index 4aa1c579abc5786b38313fde6951719d8a8f0fa8..2637e3e8f97babd1f57144736aa7fb55064b01e1 100755
--- a/bin/frama-c-build-scripts.sh
+++ b/bin/frama-c-build-scripts.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/frama-c-config b/bin/frama-c-config
index 53b75629f4c26aca42ac8bb20ad955459162bff6..e6ec27703b9d694cd089164e7be1f694c37d1522 100755
--- a/bin/frama-c-config
+++ b/bin/frama-c-config
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/frama-c-gui b/bin/frama-c-gui
index 449e8dab6c7da3d0b78038c4130bdeaccf187eb3..62aacdcea90ae78adf1b2e17e1096d1fa9cccea0 100755
--- a/bin/frama-c-gui
+++ b/bin/frama-c-gui
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/frama-c-script b/bin/frama-c-script
index 3c61ac10c6d4ba98eb5d0316077a0e070926a95c..1950fec14440f1a132edab9ca4c125898e94a955 100755
--- a/bin/frama-c-script
+++ b/bin/frama-c-script
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -22,7 +22,7 @@
 ##########################################################################
 
 usage() {
-   echo "usage: $0 cmd [args]"
+   echo "usage: frama-c-script cmd [args]"
    echo ""
    echo "  where cmd is:"
    echo ""
@@ -39,9 +39,9 @@ usage() {
    echo "      (run 'frama-c -machdep help' to get the list of machdeps)."
    echo ""
    echo "  - creduce [[file] args]"
-   echo "      Use the external tool C-Reduce to minimize C files when"
-   echo "      debugging crashes and fatal errors. Run without arguments for"
-   echo "      more details."
+   echo "      Uses the external tool C-Reduce to minimize C files when"
+   echo "      debugging crashes and fatal errors."
+   echo "      Run 'frama-c-script c-reduce' without arguments for more details."
    echo ""
    echo "  - estimate-difficulty file..."
    echo "      Applies several heuristics to try and estimate the difficulty"
@@ -72,7 +72,7 @@ usage() {
    echo ""
    echo "  - heuristic-print-callgraph [--dot outfile] file..."
    echo "      Prints a heuristic, syntactic-based, callgraph for the"
-   echo "      specified files. Use --dot outfile to print it in DOT"
+   echo "      specified files. Use '--dot outfile' to print it in DOT"
    echo "      (Graphviz) format, to [outfile]. If [outfile] is '-',"
    echo "      prints to stdout."
    echo ""
@@ -85,11 +85,11 @@ usage() {
    echo "  - list-functions [files] [Frama-C options]"
    echo "      Parses all sources in [files] and lists all function"
    echo "      definitions, with source location and number of statements."
-   echo "      Accepts Frama-C options (e.g. -cpp-extra-args for parsing)."
+   echo "      Accepts Frama-C options (e.g. '-cpp-extra-args' for parsing)."
    echo ""
    echo "  - make-machdep [--compiler=<cc>] [--cpp-arch-flags=<flags>]"
    echo "      Creates a new machdep definition for a specific target."
-   echo "      Use $0 make-machdep --help for more information"
+   echo "      Use 'frama-c-script make-machdep --help' for more information."
    echo ""
    echo "  - make-wrapper [target] [arg...]"
    echo "      Runs 'make target arg...', parsing the output to suggest"
@@ -103,7 +103,7 @@ usage() {
    echo "  - summary [options]"
    echo "      Monitors and summarizes multiple analyses dispatched by a Makefile"
    echo "      in the current PWD."
-   echo "      Use $0 summary --help for more information."
+   echo "      Use 'frama-c-script summary --help' for more information."
    exit "$1"
 }
 
diff --git a/bin/frama-c.debug b/bin/frama-c.debug
index 4140818cbff6a398d9057097951767c7b6a54183..0532109e44e79fb53c3b1e91939f7f6e024a3610 100755
--- a/bin/frama-c.debug
+++ b/bin/frama-c.debug
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/git.sh b/bin/git.sh
index e3bd5d34017fcfc3b61c088508906514787bce5e..88ce1dc5e69cd79dacaa4dedcc355325d2376261 100755
--- a/bin/git.sh
+++ b/bin/git.sh
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/indent.sh b/bin/indent.sh
index 73511657ec5bbdf28f8a8d6db76d09e53edd6f26..ddd1f05cf9cde5bb86f1c93a136de2cbab07110a 100755
--- a/bin/indent.sh
+++ b/bin/indent.sh
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/init-plugin.sh b/bin/init-plugin.sh
index 9d0fb8fd6c78ebf07119f043aa338d3b2f2b679f..dceb9306d971ff625b3b75cfd48fb43a9d5e9426 100755
--- a/bin/init-plugin.sh
+++ b/bin/init-plugin.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/lint.sh b/bin/lint.sh
index c2fa4218742747af241d05ea125272a43d7881ba..6bc6334be793394e24662b17db39ed8b45700fa5 100755
--- a/bin/lint.sh
+++ b/bin/lint.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/merge-master.sh b/bin/merge-master.sh
index 4e28afb38e8224272950f7454eab5ff92ca4fdd5..3b46ad97dec09f0b7f13f47e55dd719bb78eb40f 100755
--- a/bin/merge-master.sh
+++ b/bin/merge-master.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/aluminium2silicon.sh b/bin/migration_scripts/aluminium2silicon.sh
index 28a1b7d03fdd22e234e49a4778fb19fd6b7e891c..ac1731ba4b6efa9a52a18dd7b94b0c46e1624169 100755
--- a/bin/migration_scripts/aluminium2silicon.sh
+++ b/bin/migration_scripts/aluminium2silicon.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/boron2carbon.sh b/bin/migration_scripts/boron2carbon.sh
index 5fa9502f513eb02525dc6dc3076dc33750d57397..40fae36d1e768324cdd6e39d4e1e5d2aec332cb9 100755
--- a/bin/migration_scripts/boron2carbon.sh
+++ b/bin/migration_scripts/boron2carbon.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/calcium2scandium.sh b/bin/migration_scripts/calcium2scandium.sh
index e47e5276eeb8bb0356e3cc8187137f41c2a5543a..0de75e0d62a1b29a0ba92ae4747357e12ac65b0f 100755
--- a/bin/migration_scripts/calcium2scandium.sh
+++ b/bin/migration_scripts/calcium2scandium.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/carbon2nitrogen.sh b/bin/migration_scripts/carbon2nitrogen.sh
index 1b7e918bb98b1aed5f5e1e61d8a513223b1893e9..ee633e972d67edce32a0d0395b3b32933d58aba1 100755
--- a/bin/migration_scripts/carbon2nitrogen.sh
+++ b/bin/migration_scripts/carbon2nitrogen.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/chlorine2argon.sh b/bin/migration_scripts/chlorine2argon.sh
index c7424f93c2324203fd90ec2d3a32df507e86859d..fe38c0bb124d45a5dfa6c35000be2c1cdbe7955e 100755
--- a/bin/migration_scripts/chlorine2argon.sh
+++ b/bin/migration_scripts/chlorine2argon.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/chromium2manganese.sh b/bin/migration_scripts/chromium2manganese.sh
index 2bc01d7a542c21b55f073d3204622827df2ef970..a9657b587b7c35359a2e6fc5de7e7f92c025eb29 100755
--- a/bin/migration_scripts/chromium2manganese.sh
+++ b/bin/migration_scripts/chromium2manganese.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/fluorine2neon.sh b/bin/migration_scripts/fluorine2neon.sh
index cbc73b0759c41df442b5427bd25175ae3f684acd..048421af07e9e258f6e45c86a31f641ee8c1faf3 100755
--- a/bin/migration_scripts/fluorine2neon.sh
+++ b/bin/migration_scripts/fluorine2neon.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/git-replace.sh b/bin/migration_scripts/git-replace.sh
index 157da516465b86293e6d6fbe6e0019b1ba2db1ae..9d5e00d19cf6a0975bdd7c8e8f072179b27217ce 100755
--- a/bin/migration_scripts/git-replace.sh
+++ b/bin/migration_scripts/git-replace.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/lithium2beryllium.sh b/bin/migration_scripts/lithium2beryllium.sh
index baf9580a0f7b92ef4016fb9f60730f7de67dc288..00c21bf9a978d66415f28109ed617026c6ccbc4f 100755
--- a/bin/migration_scripts/lithium2beryllium.sh
+++ b/bin/migration_scripts/lithium2beryllium.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/magnesium2aluminium.sh b/bin/migration_scripts/magnesium2aluminium.sh
index eeee3335486b88641af436b0ad0c2227559bc62e..89439755fc5c76eb13dd6d48f8dc267975c19b2c 100755
--- a/bin/migration_scripts/magnesium2aluminium.sh
+++ b/bin/migration_scripts/magnesium2aluminium.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/manganese2iron.sh b/bin/migration_scripts/manganese2iron.sh
index 181bb4a4a0965f4973637f82e2d3132cd957ba1b..d3ab358c864bb0d632d752806bb7ea9168d6cebc 100755
--- a/bin/migration_scripts/manganese2iron.sh
+++ b/bin/migration_scripts/manganese2iron.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/neon2sodium.sh b/bin/migration_scripts/neon2sodium.sh
index 74934f45d44c6a8a15355c23cfccbb6b868581b3..c3b3b292ab6b6484bad78e5b052efed30be14534 100755
--- a/bin/migration_scripts/neon2sodium.sh
+++ b/bin/migration_scripts/neon2sodium.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/nickel2copper.sh b/bin/migration_scripts/nickel2copper.sh
index ca68ca2502c4ee30c4ef5dae9e003a44ed787473..47dfd7beab2ed9885f105b48d39e8e954624f460 100755
--- a/bin/migration_scripts/nickel2copper.sh
+++ b/bin/migration_scripts/nickel2copper.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/nitrogen2oxygen.sh b/bin/migration_scripts/nitrogen2oxygen.sh
index cbcc7168e6921438f408232daad99a32af1b4b1a..7835fcce0785671d657c171843d538a445fa810e 100755
--- a/bin/migration_scripts/nitrogen2oxygen.sh
+++ b/bin/migration_scripts/nitrogen2oxygen.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/oxygen2fluorine.sh b/bin/migration_scripts/oxygen2fluorine.sh
index c420afac2ea603320d8e3aeb7334795fca65f195..7c8b3a90731b6548a34ac6e7daf19f5c094ddf92 100755
--- a/bin/migration_scripts/oxygen2fluorine.sh
+++ b/bin/migration_scripts/oxygen2fluorine.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/phosphorus2sulfur.sh b/bin/migration_scripts/phosphorus2sulfur.sh
index 100fc8d4017b5d9746d42300d4f313b71ad67ead..d636aaca50747ac17b940e49998e8cedfe1cb89c 100755
--- a/bin/migration_scripts/phosphorus2sulfur.sh
+++ b/bin/migration_scripts/phosphorus2sulfur.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/potassium2calcium.sh b/bin/migration_scripts/potassium2calcium.sh
index 05ec515d6a32cd0b4f1eae4f3e3471ea54a46d6f..333a0caf694ed7ac1e89adce55402975b3f1c645 100755
--- a/bin/migration_scripts/potassium2calcium.sh
+++ b/bin/migration_scripts/potassium2calcium.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/silicon2phosphorus.sh b/bin/migration_scripts/silicon2phosphorus.sh
index 8b6ef34724a6eb02bc7e53e84a4dcc9faee2ee51..9c968ca30c814a125114ac13ad5bdd64f6b4c032 100755
--- a/bin/migration_scripts/silicon2phosphorus.sh
+++ b/bin/migration_scripts/silicon2phosphorus.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/sodium2magnesium.sh b/bin/migration_scripts/sodium2magnesium.sh
index 2d756fd29a895b6c9a9aba5d54835541b170f362..4543d3a1537a62183424ef9924d7f3261b2b94c2 100755
--- a/bin/migration_scripts/sodium2magnesium.sh
+++ b/bin/migration_scripts/sodium2magnesium.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/sulfur2chlorine.sh b/bin/migration_scripts/sulfur2chlorine.sh
index 6ce8595ae70167bd1daaf9cc3534a366a89faef0..6ab51c048a200f2286b98f3a897fc265fa8fb2d3 100755
--- a/bin/migration_scripts/sulfur2chlorine.sh
+++ b/bin/migration_scripts/sulfur2chlorine.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/titanium2vanadium.sh b/bin/migration_scripts/titanium2vanadium.sh
index 1c6b22421c49bd764551a8a82bd757325701e039..cac5fec50d09fe46cfb2486d20b43aac98983c4e 100755
--- a/bin/migration_scripts/titanium2vanadium.sh
+++ b/bin/migration_scripts/titanium2vanadium.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/migration_scripts/vanadium2chromium.sh b/bin/migration_scripts/vanadium2chromium.sh
index adb57156c4b6c543b2e5ba2d409eb04d06e195f5..81944504a9dc8c5341470702b4f0e189f0a6c061 100755
--- a/bin/migration_scripts/vanadium2chromium.sh
+++ b/bin/migration_scripts/vanadium2chromium.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/rebuild.sh b/bin/rebuild.sh
index 326e4a2e216c96b3f0cc09a54ec5138eb53ab2c5..299572f98adb2efb74022d2cb84572360d0cbc6b 100755
--- a/bin/rebuild.sh
+++ b/bin/rebuild.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/shift_oracles.sh b/bin/shift_oracles.sh
index 51ba83815e55c58e094da6723318d568b5776274..431ffdceb4b8ff0a3103adc3a1a387521d805749 100755
--- a/bin/shift_oracles.sh
+++ b/bin/shift_oracles.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/bin/test.sh b/bin/test.sh
index be51144b495c37c213c58683b086590dea3b713a..41b9e0e96ba2e3e97bf3efe03adb4115a49bf14c 100755
--- a/bin/test.sh
+++ b/bin/test.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -22,14 +22,13 @@
 ##########################################################################
 
 THIS_SCRIPT="$0"
-CONFIG="<all>"
+CONFIG="<default>"
 VERBOSE=
 CLEAN=
 PREPARE=
 PULLCACHE=
 UPDATE=
 LOGS=
-COMMIT=
 TESTS=
 SAVE=
 COVER=
@@ -60,11 +59,13 @@ function Usage
     echo ""
     echo "  Tip: use shell completion"
     echo ""
-    echo "  <DIR>     all tests in <DIR>"
     echo "  <FILE>    single test file <FILE>"
+    echo "  <DIR>     all tests in <DIR>,"
+    echo "            or in directory tests/<DIR> (if it exists)"
+    echo "            or in plugin src/plugins/<DIR> (if it exists)"
     echo ""
-    echo "  -a|--all            run all tests (default behavior)"
-    echo "  -d|--default        run tests from default config only"
+    echo "  -a|--all            run all config"
+    echo "  -d|--default        run tests from default config only (by default)"
     echo "  -c|--config <name>  run tests from specified config only"
     echo ""
     echo ""
@@ -76,8 +77,8 @@ function Usage
     echo "  -w|--wp-cache       prepare (pull) WP-cache"
     echo "  -f|--force          force re-run tests"
     echo "  -l|--logs           print output of tests (single file, no diff)"
-    echo "  -u|--update         run tests and update oracles (and WP-cache)"
-    echo "  -k|--commit         commit new test oracles"
+    echo "  -u|--update         update oracles (and WP-cache) and create new"
+    echo "                      test oracles"
     echo "  -s|--save           save dune logs into $DUNE_LOG"
     echo "  -v|--verbose        print executed commands"
     echo "  -j|--jobs <jobs>    run no more than <jobs> commands simultaneously."
@@ -155,6 +156,16 @@ do
             Usage
             exit 0
             ;;
+        "-a"|"--all")
+            CONFIG="<all>"
+            ;;
+        "-d"|"--default")
+            CONFIG="<default>"
+            ;;
+        "-c"|"--config")
+            CONFIG=$2
+            shift
+            ;;
         "-r"|"--clean")
             CLEAN=yes
             PREPARE=yes
@@ -166,22 +177,22 @@ do
             PULLCACHE=yes
             ;;
         "-f"|"--force")
-            DUNE_OPT+="--force "
+            DUNE_OPT+=" --force"
             ;;
         "-u"|"--update")
-            DUNE_OPT+="--auto-promote "
+            DUNE_OPT+=" --auto-promote"
             UPDATE=yes
             ;;
         "--watch")
-            DUNE_OPT+="--watch "
+            DUNE_OPT+=" --watch"
             ;;
         "-v"|"--verbose")
-            DUNE_OPT+="--display=short "
+            DUNE_OPT+=" --display=short"
             VERBOSE=yes
             ;;
         "-j"|"--jobs")
             if [[ $2 == "auto" ]] || ([[ $2 != \-* ]] && [[ $2 -ge 1 ]]); then
-                DUNE_OPT+="-j $2 "
+                DUNE_OPT+=" -j $2"
                 shift
             else
                 ErrorUsage \
@@ -191,19 +202,9 @@ do
         "-l"|"--logs")
             LOGS=yes
             ;;
-        "-k"|"--commit")
-            COMMIT=yes
-            ;;
         "-s"|"--save" )
             SAVE=yes
             ;;
-        "-d"|"--default")
-            CONFIG="<default>"
-            ;;
-        "-c"|"--config")
-            CONFIG=$2
-            shift
-            ;;
         "--coverage")
             COVER=yes
             HTML=yes
@@ -220,16 +221,19 @@ do
             ALIAS_NAME=$2
             shift
             ;;
-        "-a"|"--all")
-            TESTS=""
-            for dir in $TEST_DIRS ; do
-                if [ -d "$dir" ]; then
-                    TESTS="$TESTS $dir"
-                fi
-            done
+        "eva")
+            TESTS+=" tests/value tests/builtins tests/float tests/idct"
             ;;
-       *)
-            TESTS+=" $1"
+        *)
+            if [ -f $1 ] || [ -d $1 ]; then
+                TESTS+=" $1"
+            elif [ -d tests/$1 ]; then
+                TESTS+=" tests/$1"
+            elif [ -d src/plugins/$1/tests ]; then
+                TESTS+=" src/plugins/$1/tests"
+            else
+                ErrorUsage "'$1' is not a test file or directory"
+            fi
             ;;
     esac
     shift
@@ -306,6 +310,8 @@ function PrepareCoverage
         Cmd rm -rf _bisect
         Cmd mkdir _coverage
         Cmd mkdir _bisect
+
+        DUNE_OPT+=" --workspace dev/dune-workspace.cover"
     fi
 }
 
@@ -333,8 +339,45 @@ function GenerateCoverage
 # ---  Test Suite Preparation
 # --------------------------------------------------------------------------
 
+function GenerateDuneFiles
+{
+    Head "Generating dune files..."
+    Cmd make run-ptests
+}
+
+function CheckDuneFiles
+{
+    DEFAULT_FILE=tests/syntax/result/dune
+    if [ "$PREPARE" != "yes" ] ;
+    then
+        if [ ! -f "$DEFAULT_FILE" ] ;
+        then
+            GenerateDuneFiles
+        else
+            DATE_TEST_MODIFICATION=$(find $TESTS -type f \
+                                    -not -path "*/result*/*" \
+                                    -not -path "*/oracle*/*" \
+                                    -exec stat --printf "%Y\n" {} \+ | \
+                                    sort -n -r | head -n 1)
+            DATE_TEST_GENERATION=$(stat $DEFAULT_FILE --printf "%Y\n")
+            if [ $DATE_TEST_MODIFICATION -gt $DATE_TEST_GENERATION ] ;
+            then
+                GenerateDuneFiles
+            fi
+        fi
+    fi
+}
+
 function PrepareTests
 {
+    if [ "$TESTS" = "" ]; then
+        for dir in $TEST_DIRS ; do
+            if [ -d "$dir" ]; then
+                TESTS+=" $dir"
+            fi
+        done
+    fi
+
     if [ "$CLEAN" = "yes" ]
     then
         Head "Cleaning all tests..."
@@ -342,8 +385,7 @@ function PrepareTests
     fi
     if [ "$PREPARE" = "yes" ]
     then
-        Head "Generating dune files..."
-        Cmd make run-ptests
+        GenerateDuneFiles
     fi
 }
 
@@ -354,9 +396,6 @@ function PrepareTests
 [ "$DUNE_LOG" = "" ] || rm -rf $DUNE_LOG
 function RunAlias
 {
-    if [ "$COVER" = "yes" ]; then
-        DUNE_OPT+="--workspace dev/dune-workspace.cover "
-    fi
     Head "Running tests..."
     if [ "$DUNE_LOG" = "" ]; then
         Run dune build $DUNE_OPT $@
@@ -405,7 +444,11 @@ function TestFile
     FILE=$(basename $1)
 
     case "$CONFIG" in
-        "<all>"|"<default>")
+        "<all>")
+            RESULT="result*"
+            CFG="(all config)"
+            ;;
+        "<default>")
             RESULT=result
             CFG="(default config)"
             ;;
@@ -414,16 +457,21 @@ function TestFile
             CFG="(config $CONFIG)"
             ;;
     esac
-    if [ "$LOGS" = "yes" ]; then
-        ALIAS=$DIR/$RESULT/$FILE
-    else
-        ALIAS=$DIR/$RESULT/${FILE%.*}.diff
-    fi
-    if [ "$COMMIT" = "yes" ]; then
-        COMMITS="${COMMITS} $DIR/$RESULT/${FILE%.*}"
-    fi
+
+    RESULTS="$DIR/$RESULT"
+    for res in $RESULTS ; do
+        if [ "$LOGS" = "yes" ]; then
+            ALIAS+=" @$res/$FILE"
+        else
+            ALIAS+=" @$res/${FILE%.*}.diff"
+        fi
+        if [ "$UPDATE" = "yes" ]; then
+            COMMITS+=" $res/${FILE%.*}"
+        fi
+    done
+
     Head "Register test on file $1 $CFG"
-    DUNE_ALIAS="${DUNE_ALIAS} @$ALIAS"
+    DUNE_ALIAS="${DUNE_ALIAS} $ALIAS"
 }
 
 # --------------------------------------------------------------------------
@@ -449,21 +497,38 @@ function Register
 }
 
 # --------------------------------------------------------------------------
-# ---  Tests Commits
+# ---  Tests Create New Oracles
 # --------------------------------------------------------------------------
 
-function Commits
+function CreateNewOraclesAux
+{
+    for log in $1*.$2.log
+    do
+        # Only non-empty oracles
+        if [ -s "$log" ];
+        then
+            dest="${log//result/oracle}"
+            dest="${dest//$2.log/$2.oracle}"
+            # Only non-existing oracles, existing ones will be updated via
+            # dune --auto-promote
+            if [ ! -f "../../$dest" ];
+            then
+                echo "Create oracle $dest"
+                cp -f $log "../../$dest"
+            fi
+        fi
+    done
+}
+
+function CreateNewOracles
 {
     while [ "$1" != "" ]
     do
         cd _build/default
-        for log in $1*.res.log
-        do
-            echo "Commit $log"
-            dest="${log//result/oracle}"
-            dest="${dest//res.log/res.oracle}"
-            cp -f $log "../../$dest"
-        done
+
+        CreateNewOraclesAux $1 res
+        CreateNewOraclesAux $1 err
+
         cd ../..
         shift
     done
@@ -484,7 +549,7 @@ function Status
             #-- Details
             Head "Details by directory:"
             if  [ "$NB" != "0" ]; then
-                for dir in $TEST_DIRS ; do
+                for dir in $TESTS ; do
                     if [ -d "$dir" ]; then
                         NB=$(grep -c "^frama-c-wtests $dir" "$1")
                         [ "$NB" = "0" ] || echo "- $dir= $NB"
@@ -514,9 +579,10 @@ SetEnv
 PullCache
 PrepareCoverage
 PrepareTests
+CheckDuneFiles
 Register $TESTS
 RunAlias ${DUNE_ALIAS}
-Commits ${COMMITS}
+CreateNewOracles ${COMMITS}
 Status $DUNE_LOG
 GenerateCoverage
 
diff --git a/configurator.ml b/configurator.ml
index 7be17a56ace254186509392947520793a2d73a4b..5e4c11ec982fdb654024e607b565b737a77097e0 100644
--- a/configurator.ml
+++ b/configurator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/dev/build-release.sh b/dev/build-release.sh
index 424a9a77e632a14c39e1efda2f9ddc4107f42ec1..f12b219b1b1fffe0c1cc92394dc68f24d875ea72 100755
--- a/dev/build-release.sh
+++ b/dev/build-release.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/check-files.sh b/dev/check-files.sh
index 5bc87e486f9f75c489d21cf75cf8bef12d43bf57..38cb99fb37e77e4ec804ff66ed4b9bd1f20091ae 100755
--- a/dev/check-files.sh
+++ b/dev/check-files.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/disable-plugins.sh b/dev/disable-plugins.sh
index 7cd98648ca06ce0f7a69706a96c0c5ff4cba76c3..ca7d0c3c357bdb2203eb7192ed7b8cebd368c701 100755
--- a/dev/disable-plugins.sh
+++ b/dev/disable-plugins.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/docker/Dockerfile b/dev/docker/Dockerfile
index 96e366bce95cdb40b26007f7b525701c4b407d30..dd47fcbe2357f0d5174e46898c9a855fbbd4c4af 100644
--- a/dev/docker/Dockerfile
+++ b/dev/docker/Dockerfile
@@ -24,7 +24,8 @@ RUN /init/install.sh \
   patch \
   tar \
   unzip \
-  wget
+  wget \
+  which
 
 RUN bash -c "yes '' | sh <(curl -fsSL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)" --version 2.1.5
 
@@ -169,8 +170,8 @@ ARG OCAML_VERSION
 ENV DEBIAN_FRONTEND=noninteractive
 
 # Transfers ownership of /home/opam to user opam
-# Note: Fedora does not recognize --disabled-password, but it does not need it
-RUN adduser --disabled-password opam 2>/dev/null || adduser opam
+# Note: Debian and Fedora have 'useradd', but Alpine has 'adduser'
+RUN useradd opam || adduser --disabled-password opam
 
 COPY --from=frama-c /bin /bin/
 COPY --from=frama-c /etc /etc/
@@ -207,7 +208,8 @@ ARG OCAML_VERSION
 ENV DEBIAN_FRONTEND=noninteractive
 
 # Transfers ownership of /home/opam to user opam
-RUN adduser --disabled-password opam 2>/dev/null || adduser opam
+# Note: Debian and Fedora have 'useradd', but Alpine has 'adduser'
+RUN useradd opam || adduser --disabled-password opam
 
 COPY --from=frama-c-gui /bin /bin/
 COPY --from=frama-c-gui /etc /etc/
@@ -305,7 +307,8 @@ ARG OCAML_VERSION
 ENV DEBIAN_FRONTEND=noninteractive
 
 # Transfers ownership of /home/opam to user opam
-RUN adduser --disabled-password opam 2>/dev/null || adduser opam
+# Note: Debian and Fedora have 'useradd', but Alpine has 'adduser'
+RUN useradd opam || adduser --disabled-password opam
 
 COPY --from=frama-c-stripped-prepare /bin /bin/
 COPY --from=frama-c-stripped-prepare /etc /etc/
diff --git a/dev/docker/Makefile b/dev/docker/Makefile
index 36025c4b54e1014f8372f5b95d6d8a908487f1ae..448e5ec91128090d062757fcf3b4a4667740197d 100644
--- a/dev/docker/Makefile
+++ b/dev/docker/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -37,26 +37,32 @@ help:
 	echo "- custom.*: version based on a frama-c-*.tar.gz archive (no gui)"
 	echo "- custom-gui.*: same as previous, but with gui"
 	echo "- custom-stripped.*: same as previous, but with minimal size (no gui)"
+	echo "  (custom targets require FRAMAC_ARCHIVE to be set)"
 	echo ""
 	echo "For each target, the suffix (.*) denotes the Docker base image:"
-	echo "- debian: based on debian:bullseye-slim"
+	echo "- debian: based on debian:trixie-slim"
 	echo "          (default image in the Frama-C Docker Hub)"
-	echo "- fedora: based on fedora:36"
-	echo "- alpine: based on alpine:3.16"
+	echo "- fedora: based on fedora:40"
+	echo "- alpine: based on alpine:3.19"
 	echo "          (smallest image, but E-ACSL does not work due to musl)"
 	echo
 	echo "Targets for users with write access to the framac Docker Hub:"
 	echo "- push TAG=<tag1> AS=<tag2>: perform a docker push with image"
 	echo "  <tag1> sent as <tag2>. Usage example:"
 	echo "  make push TAG=framac/frama-c:dev.debian AS=framac/frama-c:dev"
+	echo ""
+	echo "- dev-push-all: push all variants of dev images"
+	echo ""
+	echo "- custom-push-all: push all variants of custom archive images"
+	echo "  (requires FRAMAC_ARCHIVE to be set)"
 
 DEPS=../../reference-configuration.md Dockerfile *.sh
 
 version=$(shell grep -o "^- OCaml [0-9.]\+" "../../reference-configuration.md" | grep -o "[0-9.]\+")
 BUILD_ARGS += --build-arg=OCAML_VERSION=$(version)
 
-%.debian: BUILD_ARGS += --build-arg=DISTRO=debian:bookworm-slim
-%.fedora: BUILD_ARGS += --build-arg=DISTRO=fedora:39
+%.debian: BUILD_ARGS += --build-arg=DISTRO=debian:trixie-slim
+%.fedora: BUILD_ARGS += --build-arg=DISTRO=fedora:40
 %.alpine: BUILD_ARGS += --build-arg=DISTRO=alpine:3.19
 
 dev-all: dev.debian dev-stripped.debian dev-gui.debian \
@@ -101,6 +107,7 @@ push:
 	echo "        and <new> is the name used in the Docker Hub"
 	echo "        e.g. framac/frama-c:dev, framac/frama-c-gui:dev, etc."
 	echo "(if you supplied identical tags, just run 'docker push $(TAG)')"
+	exit 1
 else
 push:
 	$(DOCKER) tag $(TAG) $(AS)
@@ -123,3 +130,47 @@ dev-push-all:
 	$(DOCKER) push framac/frama-c:dev
 	$(DOCKER) push framac/frama-c:dev-stripped
 	$(DOCKER) push framac/frama-c-gui:dev
+
+ifeq ($(CUSTOM_VERSION),)
+custom-push-all:
+	@echo "error: run '$(MAKE) $@ CUSTOM_VERSION=<version>'"
+	exit 1
+else
+ifeq ($(findstring beta,$(CUSTOM_VERSION)),beta)
+custom-push-all:
+	@echo "error: cannot push a beta archive"
+	exit 1
+else
+custom-push-all:
+	@echo "Copy and paste the following commands:"
+	echo ""
+	echo "$(DOCKER) tag frama-c-custom.debian framac/frama-c:$(CUSTOM_VERSION).debian"
+	echo "$(DOCKER) tag frama-c-custom-stripped.debian framac/frama-c:$(CUSTOM_VERSION)-stripped.debian"
+	echo "$(DOCKER) tag frama-c-custom-gui.debian framac/frama-c-gui:$(CUSTOM_VERSION).debian"
+	echo ""
+	echo "$(DOCKER) tag frama-c-custom.fedora framac/frama-c:$(CUSTOM_VERSION).fedora"
+	echo "$(DOCKER) tag frama-c-custom-stripped.fedora framac/frama-c:$(CUSTOM_VERSION)-stripped.fedora"
+	echo "$(DOCKER) tag frama-c-custom-gui.debian framac/frama-c-gui:$(CUSTOM_VERSION).fedora"
+	echo ""
+	echo "$(DOCKER) tag frama-c-custom.alpine framac/frama-c:$(CUSTOM_VERSION).alpine"
+	echo "$(DOCKER) tag frama-c-custom-stripped.alpine framac/frama-c:$(CUSTOM_VERSION)-stripped.alpine"
+	echo "$(DOCKER) tag frama-c-custom-gui.alpine framac/frama-c-gui:$(CUSTOM_VERSION).alpine"
+	echo ""
+	echo "$(DOCKER) tag framac/frama-c:$(CUSTOM_VERSION).debian framac/frama-c:$(CUSTOM_VERSION)"
+	echo "$(DOCKER) tag framac/frama-c:$(CUSTOM_VERSION)-stripped.debian framac/frama-c:$(CUSTOM_VERSION)-stripped"
+	echo "$(DOCKER) tag framac/frama-c-gui:$(CUSTOM_VERSION).debian framac/frama-c-gui:$(CUSTOM_VERSION)"
+	echo ""
+	echo "$(DOCKER) push framac/frama-c:$(CUSTOM_VERSION).debian"
+	echo "$(DOCKER) push framac/frama-c:$(CUSTOM_VERSION)-stripped.debian"
+	echo "$(DOCKER) push framac/frama-c-gui:$(CUSTOM_VERSION).debian"
+	echo "$(DOCKER) push framac/frama-c:$(CUSTOM_VERSION).fedora"
+	echo "$(DOCKER) push framac/frama-c:$(CUSTOM_VERSION)-stripped.fedora"
+	echo "$(DOCKER) push framac/frama-c-gui:$(CUSTOM_VERSION).fedora"
+	echo "$(DOCKER) push framac/frama-c:$(CUSTOM_VERSION).alpine"
+	echo "$(DOCKER) push framac/frama-c:$(CUSTOM_VERSION)-stripped.alpine"
+	echo "$(DOCKER) push framac/frama-c-gui:$(CUSTOM_VERSION).alpine"
+	echo "$(DOCKER) push framac/frama-c:$(CUSTOM_VERSION)"
+	echo "$(DOCKER) push framac/frama-c:$(CUSTOM_VERSION)-stripped"
+	echo "$(DOCKER) push framac/frama-c-gui:$(CUSTOM_VERSION)"
+endif
+endif
diff --git a/dev/dune-workspace.bench b/dev/dune-workspace.bench
index 8bd6fb36155796033e747a34f876f0e68d72eaa9..6ced78359163779f425e110f37049339fbcdb7ae 100644
--- a/dev/dune-workspace.bench
+++ b/dev/dune-workspace.bench
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/dev/dune-workspace.cover b/dev/dune-workspace.cover
index f4f649202096f4c47deb12d47aed6ffd55bf1f9f..ceec399cb51e6dd6a7884bce2dc54078c5074275 100644
--- a/dev/dune-workspace.cover
+++ b/dev/dune-workspace.cover
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/dev/duplicates.pl b/dev/duplicates.pl
index 0d3e327e588eb954449beacaf4f830010b1c9fee..23e10bc1507e97b631b4166e9a2d1b33912e974d 100755
--- a/dev/duplicates.pl
+++ b/dev/duplicates.pl
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/frama-c-callgrind.sh b/dev/frama-c-callgrind.sh
index e78ea2c6c6589c2fc73b0b882fb58bb0520a11cc..6600065313fdb0df21004e318dce77ab3fa0631e 100755
--- a/dev/frama-c-callgrind.sh
+++ b/dev/frama-c-callgrind.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/git-hooks/pre-commit.sh b/dev/git-hooks/pre-commit.sh
index 5333e2b62eb19f3179948abe78c40a01bdc03680..1a0b5d9b0be0a97b36f91980aa9144fa9f350d8b 100755
--- a/dev/git-hooks/pre-commit.sh
+++ b/dev/git-hooks/pre-commit.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/git-hooks/pre-push.sh b/dev/git-hooks/pre-push.sh
index 7c42e374e1095dd373906ff8bc922872facffb12..7eac14ac9e7a783e7bda603ecde1580c9ebe3499 100755
--- a/dev/git-hooks/pre-push.sh
+++ b/dev/git-hooks/pre-push.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/make-distrib.sh b/dev/make-distrib.sh
index 83742a5917c9a3257852e1b547d6123d361b92fd..f2e1da93bcb6322adb7639a2cf82b92da385cf2a 100755
--- a/dev/make-distrib.sh
+++ b/dev/make-distrib.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/ocamldep_transitive_closure.ml b/dev/ocamldep_transitive_closure.ml
index 6a3f09c28120edde107bdf519e2989e5f0f92d6f..e5d845ee0e51f9a9fae3d511626e290af64366a7 100644
--- a/dev/ocamldep_transitive_closure.ml
+++ b/dev/ocamldep_transitive_closure.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/dev/set-dune-version.sh b/dev/set-dune-version.sh
index e71ca6ebe7d600ed09ca9fbe5786cf66dd824e13..9c43c4313e68584b9e4924f831e4057a36215bae 100755
--- a/dev/set-dune-version.sh
+++ b/dev/set-dune-version.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/dev/set-version.sh b/dev/set-version.sh
index 2fe427c9796cfb58bf9c3106c2708eedc68cffbb..e1c23b1f1488b08d1e5b266b07b03f0dca371746 100755
--- a/dev/set-version.sh
+++ b/dev/set-version.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/LICENSE b/doc/LICENSE
index 96bc2a6a296cdde20d68e024bb0c3534cc63f157..85d76d6e923fd3df32abbe73d6506a7cec532944 100644
--- a/doc/LICENSE
+++ b/doc/LICENSE
@@ -1,4 +1,4 @@
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
 CEA (Commissariat à l'énergie atomique et aux énergies alternatives)
 
 Except where otherwise noted, content on this directory is licensed under a
diff --git a/doc/Makefile b/doc/Makefile
index c1dc08f0208ba93eafa7adec35404fff6b278a10..0fa307397722d812b061f936d1183b53cf9385bf 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/aorai/Makefile b/doc/aorai/Makefile
index 0d2d947ac4e367c06599e073054caaece01efc11..2df474623dbaac0f1849f5f3bd3750f8aedccdf9 100644
--- a/doc/aorai/Makefile
+++ b/doc/aorai/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Aorai plug-in of Frama-C.                        #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #    INRIA (Institut National de Recherche en Informatique et en         #
diff --git a/doc/developer/Makefile b/doc/developer/Makefile
index ade59e570a6d44e96faa4e8c34b58738bffa583f..54e9bd7749f2e1367574a5bf8482f998b08e6059 100644
--- a/doc/developer/Makefile
+++ b/doc/developer/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/developer/Makefile.config b/doc/developer/Makefile.config
index ab8f24e4228fc9367450834087981ebcc3a2b92e..b9add28ca8f69cf1d270cfc6c97121cc28451316 100644
--- a/doc/developer/Makefile.config
+++ b/doc/developer/Makefile.config
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/developer/advance.tex b/doc/developer/advance.tex
index 52c4bd837df33c82a1aca9bc2fb3e4d48629afed..5e81e4c5acbbe5a1a3b63694c770ce232b130838 100644
--- a/doc/developer/advance.tex
+++ b/doc/developer/advance.tex
@@ -2959,7 +2959,7 @@ their execution order.
   \begin{enumerate}[(a)]
   \item the command line options registered for the
     \texttt{Cmdline.Extending}\sscodeidxdef{Cmdline}{stage}{Extending} stage
-    are treated, such as \texttt{-load-script}
+    are treated, such as \texttt{-load-module}
 
   \item the hooks registered through
     \texttt{Cmdline.run\_during\_extending\_stage}
diff --git a/doc/developer/changes.tex b/doc/developer/changes.tex
index 3ec55d7756b1b2de403ed7bd430516c7916396a8..ff75abc257c07627c32d9314b764e75c4c368331 100644
--- a/doc/developer/changes.tex
+++ b/doc/developer/changes.tex
@@ -5,7 +5,9 @@
 This chapter summarizes the major changes in this documentation between each
 \framac release, from newest to oldest.
 
-\section*{Frama-C+dev}
+%\section*{Frama-C+dev}
+
+\section*{29.0 (Copper)}
 \begin{itemize}
 \item \textbf{Logging Services}: Document new \texttt{Current\_loc} module
 \item There is no more \texttt{Db} module:
diff --git a/doc/developer/check_api/Makefile b/doc/developer/check_api/Makefile
index f2acbc71706018b3435599b3df69690d0f60ab0e..c399d6ac065aa0ac3def53837d7bf5ecfec87a15 100644
--- a/doc/developer/check_api/Makefile
+++ b/doc/developer/check_api/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/developer/check_api/check_and_compare.ml b/doc/developer/check_api/check_and_compare.ml
index 3e5488d34c25e5b812e68af870c69d6c961231ca..b9211cac1948db00ea21528c1f0efaf3bf8565c4 100644
--- a/doc/developer/check_api/check_and_compare.ml
+++ b/doc/developer/check_api/check_and_compare.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/doc/developer/check_api/check_code.ml b/doc/developer/check_api/check_code.ml
index 61da6161bf74a6fe105fe026f588b822eec3579e..15b00b9f1ae13b11f0d25018a4af3770274e8f6a 100644
--- a/doc/developer/check_api/check_code.ml
+++ b/doc/developer/check_api/check_code.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/doc/developer/check_api/check_index_grammar.mly b/doc/developer/check_api/check_index_grammar.mly
index 52c4685e7293bb14ce54ffa36d8cd8ca2d176916..b384c57f4aa9228bbd3bfef9a1f506d44aa86562 100644
--- a/doc/developer/check_api/check_index_grammar.mly
+++ b/doc/developer/check_api/check_index_grammar.mly
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/doc/developer/check_api/check_index_lexer.mll b/doc/developer/check_api/check_index_lexer.mll
index 17cf10b1741e3c1b65029c517ae400b2c7f621c3..7c39c8dd21326fafa5a705a8dc19198de460a0a4 100644
--- a/doc/developer/check_api/check_index_lexer.mll
+++ b/doc/developer/check_api/check_index_lexer.mll
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/doc/developer/tutorial/hello/src/dune b/doc/developer/tutorial/hello/src/dune
index 0b5810813d8ac1b8fd908798e498edfadc8c9ada..8ef0f53af8202de0ac5cf72e7eb7cd445650de90 100644
--- a/doc/developer/tutorial/hello/src/dune
+++ b/doc/developer/tutorial/hello/src/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/doc/developer/tutorial/hello/src/dune-project b/doc/developer/tutorial/hello/src/dune-project
index 05d615e01b0c940f0c9d04cfcd73d5a913a26f7c..8b84c975c6cf271b0175e052b9970407f1e6a34d 100644
--- a/doc/developer/tutorial/hello/src/dune-project
+++ b/doc/developer/tutorial/hello/src/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/doc/developer/tutorial/viewcfg/Makefile b/doc/developer/tutorial/viewcfg/Makefile
index 34d935ae58566ee7b95b625f7ad4ab9cf0077365..a35b24e8f5c7d0f111cd1ce99730eedb0973259f 100644
--- a/doc/developer/tutorial/viewcfg/Makefile
+++ b/doc/developer/tutorial/viewcfg/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/developer/tutorial/viewcfg/src/Makefile.split b/doc/developer/tutorial/viewcfg/src/Makefile.split
index 84a58ef03534082b0f82fc2636a3a9006b197fbd..e91427a667ace804e359bb601d5160563e8bf4a6 100644
--- a/doc/developer/tutorial/viewcfg/src/Makefile.split
+++ b/doc/developer/tutorial/viewcfg/src/Makefile.split
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/eva/examples/merge.c b/doc/eva/examples/merge.c
index dbc936c0106f585d7be057c220175149277362d2..838b22d29bfc57cb8caac47c92652fb972db4f68 100644
--- a/doc/eva/examples/merge.c
+++ b/doc/eva/examples/merge.c
@@ -1,5 +1,5 @@
 int x,y;
-char t[8];
+char t[10];
 
 int main(int c)
 {
diff --git a/doc/eva/examples/misa_write.c b/doc/eva/examples/misa_write.c
new file mode 100644
index 0000000000000000000000000000000000000000..42680662405636ebdc3bed11cee23100db34f4f6
--- /dev/null
+++ b/doc/eva/examples/misa_write.c
@@ -0,0 +1,7 @@
+int x;
+int *t[2];
+
+int main(int i){
+  int **ptr = (int **) ((unsigned long) t + i);
+  *ptr = &x;
+}
diff --git a/doc/eva/main.tex b/doc/eva/main.tex
index d4e7cf43ab1a7c5655a9f7f62783cae43189ebff..6950bc6fcbeba901e0a58fa3ad1aa52e91eec6d7 100644
--- a/doc/eva/main.tex
+++ b/doc/eva/main.tex
@@ -1337,8 +1337,20 @@ some of these approximations.
 Most origins are of the form \lstinline|Cause L|, where \lstinline|L|
 is an (optional) line or the application indicating where the approximation
 took place. Origin causes are one of the following:
+
+\subsubsection{Arithmetic operation}
+The origin \lstinline$Arithmetic L$ denotes arithmetic operations over
+addresses, whose result cannot be precisely represented by the analyzer.
+\csource{examples/ari.c}
+In this example, the return value for \lstinline|f| is:
+
+\begin{logs}
+{{ garbled mix of &{x; y} (origin: Arithmetic {ari.c:4}) }}
+\end{logs}
+
 \subsubsection{Misaligned read}
-The origin \lstinline$Misaligned L$ indicates that
+
+The origin \lstinline$Misaligned read L$ indicates that
 misaligned reads prevented the computation to be precise.
 A misaligned read is a memory read-access where the bits read were not
 previously written as a single write that modified the whole set of
@@ -1347,7 +1359,7 @@ bits exactly.
 An example of a program leading to a misaligned read is the following:
 \csource{examples/misa.c}
 The value returned by the function \lstinline|main| is\\
-\lstinline|{{ garbled mix of &{ x; y } (origin: Misaligned { misa.c:6 }) }}|.\\
+\lstinline|{{ garbled mix of &{x; y} (origin: Misaligned read {misa.c:6}) }}|.\\
 The analyzer is by default configured for a 64-bit architecture,
 and that consequently the read memory access is not an out-of-bound access.
 If it was, an alarm would be emitted, and the
@@ -1359,6 +1371,21 @@ but due to the offset of six bytes,
 the 32-bit word read is made of the last two bytes from \lstinline|t[0]|
 and the first two bytes from \lstinline|t[1]|.
 
+\subsubsection{Misaligned writes}
+
+The origin \lstinline$Misaligned write L$ indicates that the interpretation of
+a misaligned write to an imprecise location has created a garbled mix at this
+memory location.
+
+An example of a program where a misaligned write creates a garbled mix
+is the following:
+\csource{examples/misa_write.c}
+
+The interpretation of the last assignment by the analysis writes
+the imprecise value
+\lstinline|{{ garbled mix of &{x} (origin: Misaligned write {misa.c:6}) }}|
+into the array \lstinline|t|.
+
 \subsubsection{Call to an unknown function}
 The origin \lstinline$Library function L$ arises from the interpretation
 of a function specification, when an \lstinline|assigns| clause applies to
@@ -1402,18 +1429,6 @@ called well values.
 Computations that are imprecise because of a well value are marked
 as \lstinline|origin: Well|.
 
-\subsubsection{Arithmetic operation}
-The origin \lstinline$Arithmetic L$
-indicates that arithmetic operations
-take place without the analyzer being able to represent the result
-precisely.
-\csource{examples/ari.c}
-In this example, the return value for \lstinline|f| is:
-
-\begin{logs}
-{{ garbled mix of &{ x; y } (origin: Arithmetic { ari.c:4 }) }}
-\end{logs}
-
 \section{What is checked by \Eva{}}\label{obligations}
 
 \Eva{} warns about possible run-time errors in the analyzed
diff --git a/doc/hevea.css b/doc/hevea.css
index cf964ef4bc9d3f305f5e5a0ca0e2f1bdc54e3a9d..2bbef9b349f50379332e9b052cae9b9eb4e04129 100644
--- a/doc/hevea.css
+++ b/doc/hevea.css
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/doc/metrics/Makefile b/doc/metrics/Makefile
index 131cc8ca5612d831b930db6f4a3466b54f5dfbe7..fa0f677e8302a9dc61afc5a463123bb7e7bc1950 100644
--- a/doc/metrics/Makefile
+++ b/doc/metrics/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/pandoc/style.css b/doc/pandoc/style.css
index 5a64953bca075a7dba09a299a49293a78c1bfb67..97e402f5563a4a67cfb7e6ae8a496da5a9317a8a 100644
--- a/doc/pandoc/style.css
+++ b/doc/pandoc/style.css
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/doc/pdg/Makefile b/doc/pdg/Makefile
index 88886fbc89fc18241c5b6ba1c53c7a167c402985..25d22aaca5da90c069241475efd4bf75f2d7f99a 100644
--- a/doc/pdg/Makefile
+++ b/doc/pdg/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/release/Makefile b/doc/release/Makefile
index 3beeb4849205d631b804cc058a8a22ad2516f1b7..45f85ffd9ba8aa644fbf5918f6d6c41727bc9e53 100644
--- a/doc/release/Makefile
+++ b/doc/release/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/rte/Makefile b/doc/rte/Makefile
index 79003a7e8f8b87394be2d12aeb75a4948fa7bbfc..b73bfd81972160d8f82624893fbd2b5ab3305f5e 100644
--- a/doc/rte/Makefile
+++ b/doc/rte/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/scope/Makefile b/doc/scope/Makefile
index ec9d82b4e2b9b056f4fcb06e57a0ecb7a94a8138..e708196384912014ecc8988354c1ea8d066ce229 100644
--- a/doc/scope/Makefile
+++ b/doc/scope/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/slicing/design-fr/Makefile b/doc/slicing/design-fr/Makefile
index 6f0f9fd280ff474e142b657415a55d2b3352537d..efdaaf5991d98888477a046b3df91a14815f45fe 100644
--- a/doc/slicing/design-fr/Makefile
+++ b/doc/slicing/design-fr/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/slicing/user-manual-fr/Makefile b/doc/slicing/user-manual-fr/Makefile
index 1014030dee5179061af90299fa3047d4ce6e4f37..961cbb535f1a7d2628583d39ceeca7134e9b8757 100644
--- a/doc/slicing/user-manual-fr/Makefile
+++ b/doc/slicing/user-manual-fr/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/userman/Makefile b/doc/userman/Makefile
index 3f187556ccd55ce1ff2b494c52e261c788be1272..2eb7320a183afd22425d3388e9cac52efa4587f5 100644
--- a/doc/userman/Makefile
+++ b/doc/userman/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/userman/Makefile.config b/doc/userman/Makefile.config
index ea7b3a7f3b6f4d79bedec73c2e25ec2dec7a3341..a82b1b2a3f353c559b6ad44a63bd1180d89284d5 100644
--- a/doc/userman/Makefile.config
+++ b/doc/userman/Makefile.config
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/doc/userman/user-changes.tex b/doc/userman/user-changes.tex
index 87f624c5635d73241e09d9cd75ae67ae8cdcf7c9..b2868d04b708fb8cd4ad4436f4ac9390f64af6f2 100644
--- a/doc/userman/user-changes.tex
+++ b/doc/userman/user-changes.tex
@@ -3,9 +3,11 @@
 This chapter summarizes the changes in this documentation between each \FramaC
 release. First we list changes of the last release.
 
-\section*{Frama-C+dev}
+%\section*{Frama-C+dev}
+
+\section*{29.0 (Copper)}
 \begin{itemize}
-  \item \textbf{Normalizing the Source Code:} document the possibility of
+\item \textbf{Normalizing the Source Code:} document the possibility of
   undefining builtin macros from the chosen \texttt{-machdep}.
 \item \textbf{Preparing the Sources:} loop pragmas are removed and replaced
   by dedicated ACSL extension.
diff --git a/doc/userman/user-sources.tex b/doc/userman/user-sources.tex
index 271b6b6d318b0717e309d747dbcddedaf0df0538..2fb46c266137876d0d077ddf8f48286aba43cfee 100644
--- a/doc/userman/user-sources.tex
+++ b/doc/userman/user-sources.tex
@@ -612,36 +612,6 @@ As stated before, if you want to ensure the code analyzed by \FramaC is
 strictly equivalent to the one from the target system, you must either
 proofread the definitions, or provide your own library files.
 
-\subsection*{Portability considerations}
-
-A few POSIX types are specified in an abstract way: {\em not required to be
-  arithmetic types}. This enables them to be defined as e.g. structures.
-Portable code using these types must not inspect them or apply operators
-that are only compatible with arithmetic types (e.g. comparing them with
-\texttt{NULL}). However, such comparisons do exist in the wild, and their
-parsing leads to two issues:
-\begin{itemize}
-\item \FramaC will fail parsing with a generic typing error message;
-\item the user may be unable or unwilling to modify the non-portable code,
-  since they may assume a specific libc implementation that uses an arithmetic
-  type.
-\end{itemize}
-The table below lists a few of such types that currently have special support
-in \FramaC's libc: by adding {\em \#define} macros to the preprocessing
-command-line (e.g. via \texttt{-cpp-extra-args=-D<macro>}), the user can ask
-\FramaC to handle such types as arithmetic.
-
-\begin{table}[!ht]
-  \centering
-  \begin{tabular}{l|l|l}
-    \textbf{Type name} & \textbf{Header} & \textbf{Macro name} \\
-    \midrule
-    \lstinline|pthread_t| & \lstinline|sys/types.h| & \lstinline|__FC_PTHREAD_T_IS_SCALAR| \\
-    \lstinline|fexcept_t| & \lstinline|fenv.h| & \lstinline|__FC_FEXCEPT_T_IS_SCALAR| \\
-  \end{tabular}
-\end{table}
-
-
 \section{Warnings during normalization}\label{sec:warnings-normalize}
 
 \emph{Note: the options below are deprecated, replaced by the more general and
diff --git a/dune b/dune
index 82fbcdc86de6cb46540b47b9919e8171a30c3959..e050833653910b419781a69ee47e687cfd4169b8 100644
--- a/dune
+++ b/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/dune-project b/dune-project
index 24767fe4762b170ba307ece4aafcd290eb43cdf6..5e9fd2575eede1acaf1c4fd4714072c992219576 100644
--- a/dune-project
+++ b/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/headers/closed-source/AORAI_LGPL b/headers/closed-source/AORAI_LGPL
index 62f4707d5e31d5040a8b1a55858fa24be2bb64c3..c71333cc333199a585c15d77cea2c27bfc87285b 100644
--- a/headers/closed-source/AORAI_LGPL
+++ b/headers/closed-source/AORAI_LGPL
@@ -1,7 +1,7 @@
 
 This file is part of Aorai plug-in of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
   INRIA (Institut National de Recherche en Informatique et en
diff --git a/headers/closed-source/CEA_FSF_LGPL b/headers/closed-source/CEA_FSF_LGPL
index df3e914b3a38f102fbdc820f93a4719fa4ee1dc4..4d05ee50c3a200c350d6aa54187c664ca06bf9a0 100644
--- a/headers/closed-source/CEA_FSF_LGPL
+++ b/headers/closed-source/CEA_FSF_LGPL
@@ -1,9 +1,9 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 1995-2023
+Copyright (C) 1995-2021
   Free Software Foundation, Inc.
-Copyright (C) 2021-2023
+Copyright (C) 2021-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
diff --git a/headers/closed-source/CEA_INRIA_LGPL b/headers/closed-source/CEA_INRIA_LGPL
index b822fbe4edcb2d866cb1682e5ab3b1cf4284159a..82a3ebc473227a2eaf37e20ed02a816e1aa37a77 100644
--- a/headers/closed-source/CEA_INRIA_LGPL
+++ b/headers/closed-source/CEA_INRIA_LGPL
@@ -1,7 +1,7 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA   (Commissariat à l'énergie atomique et aux énergies
          alternatives)
   INRIA (Institut National de Recherche en Informatique et en
diff --git a/headers/closed-source/CEA_LGPL b/headers/closed-source/CEA_LGPL
index c3a070094e0d69dd7791fe8b046f358c35151df2..2c70a1e58a67ab311c421398b04c1b6e31f86be1 100644
--- a/headers/closed-source/CEA_LGPL
+++ b/headers/closed-source/CEA_LGPL
@@ -1,7 +1,7 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
diff --git a/headers/closed-source/CEA_LGPL_OR_PROPRIETARY b/headers/closed-source/CEA_LGPL_OR_PROPRIETARY
index 1156813292e600357a3b1f1dfe511266ef23016a..c0a1ec117106b5a8a55ad7e8df2e86918687a972 100644
--- a/headers/closed-source/CEA_LGPL_OR_PROPRIETARY
+++ b/headers/closed-source/CEA_LGPL_OR_PROPRIETARY
@@ -1,7 +1,7 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
diff --git a/headers/closed-source/CEA_PROPRIETARY b/headers/closed-source/CEA_PROPRIETARY
index 1156813292e600357a3b1f1dfe511266ef23016a..c0a1ec117106b5a8a55ad7e8df2e86918687a972 100644
--- a/headers/closed-source/CEA_PROPRIETARY
+++ b/headers/closed-source/CEA_PROPRIETARY
@@ -1,7 +1,7 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
diff --git a/headers/closed-source/CEA_PR_LGPL b/headers/closed-source/CEA_PR_LGPL
index ff7d5b8f95539e0179b57877dcac9a18e36785e8..0fe44201e89f894abae3b9ba3d31ff44336e5fe6 100644
--- a/headers/closed-source/CEA_PR_LGPL
+++ b/headers/closed-source/CEA_PR_LGPL
@@ -4,7 +4,7 @@ This file is part of Frama-C.
 Copyright (C) 2008-2011
   Pierre Roux
 
-Copyright (C) 2009-2023
+Copyright (C) 2009-2024
   CEA LIST
 
 you can redistribute it and/or modify it under the terms of the GNU
diff --git a/headers/closed-source/CEA_WP b/headers/closed-source/CEA_WP
index 11585f7b66e7d12f6aa75078fa950ab3f151c9f8..9e23b633175c876d85ece15cbc03b8d88b4c1dfb 100644
--- a/headers/closed-source/CEA_WP
+++ b/headers/closed-source/CEA_WP
@@ -1,7 +1,7 @@
 
 This file is part of WP plug-in of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat a l'energie atomique et aux energies
        alternatives)
 
diff --git a/headers/dune b/headers/dune
index c68b75886aac4fc65acfde435aa40effcbb9e5cd..fa1f82dd1ed0b5f489ca5ccf8973dae9806260bf 100644
--- a/headers/dune
+++ b/headers/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/headers/headache_config.txt b/headers/headache_config.txt
index da136e6e52e5e19823c90dfa5eb466551f0e30a0..c612e186c184f067481e3df9d1277c1001e6ef17 100644
--- a/headers/headache_config.txt
+++ b/headers/headache_config.txt
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/headers/open-source/AORAI_LGPL b/headers/open-source/AORAI_LGPL
index 62f4707d5e31d5040a8b1a55858fa24be2bb64c3..c71333cc333199a585c15d77cea2c27bfc87285b 100644
--- a/headers/open-source/AORAI_LGPL
+++ b/headers/open-source/AORAI_LGPL
@@ -1,7 +1,7 @@
 
 This file is part of Aorai plug-in of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
   INRIA (Institut National de Recherche en Informatique et en
diff --git a/headers/open-source/CEA_FSF_LGPL b/headers/open-source/CEA_FSF_LGPL
index df3e914b3a38f102fbdc820f93a4719fa4ee1dc4..4d05ee50c3a200c350d6aa54187c664ca06bf9a0 100644
--- a/headers/open-source/CEA_FSF_LGPL
+++ b/headers/open-source/CEA_FSF_LGPL
@@ -1,9 +1,9 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 1995-2023
+Copyright (C) 1995-2021
   Free Software Foundation, Inc.
-Copyright (C) 2021-2023
+Copyright (C) 2021-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
diff --git a/headers/open-source/CEA_INRIA_LGPL b/headers/open-source/CEA_INRIA_LGPL
index b822fbe4edcb2d866cb1682e5ab3b1cf4284159a..82a3ebc473227a2eaf37e20ed02a816e1aa37a77 100644
--- a/headers/open-source/CEA_INRIA_LGPL
+++ b/headers/open-source/CEA_INRIA_LGPL
@@ -1,7 +1,7 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA   (Commissariat à l'énergie atomique et aux énergies
          alternatives)
   INRIA (Institut National de Recherche en Informatique et en
diff --git a/headers/open-source/CEA_LGPL b/headers/open-source/CEA_LGPL
index c3a070094e0d69dd7791fe8b046f358c35151df2..2c70a1e58a67ab311c421398b04c1b6e31f86be1 100644
--- a/headers/open-source/CEA_LGPL
+++ b/headers/open-source/CEA_LGPL
@@ -1,7 +1,7 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
diff --git a/headers/open-source/CEA_LGPL_OR_PROPRIETARY b/headers/open-source/CEA_LGPL_OR_PROPRIETARY
index c3a070094e0d69dd7791fe8b046f358c35151df2..2c70a1e58a67ab311c421398b04c1b6e31f86be1 100644
--- a/headers/open-source/CEA_LGPL_OR_PROPRIETARY
+++ b/headers/open-source/CEA_LGPL_OR_PROPRIETARY
@@ -1,7 +1,7 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
diff --git a/headers/open-source/CEA_PR_LGPL b/headers/open-source/CEA_PR_LGPL
index ff7d5b8f95539e0179b57877dcac9a18e36785e8..0fe44201e89f894abae3b9ba3d31ff44336e5fe6 100644
--- a/headers/open-source/CEA_PR_LGPL
+++ b/headers/open-source/CEA_PR_LGPL
@@ -4,7 +4,7 @@ This file is part of Frama-C.
 Copyright (C) 2008-2011
   Pierre Roux
 
-Copyright (C) 2009-2023
+Copyright (C) 2009-2024
   CEA LIST
 
 you can redistribute it and/or modify it under the terms of the GNU
diff --git a/headers/open-source/CEA_WP b/headers/open-source/CEA_WP
index db63ebcb24124a502bf736d1ab48e0e9a4dc6880..cef4275ee1406ec7a8a352db10a91669ba3c3652 100644
--- a/headers/open-source/CEA_WP
+++ b/headers/open-source/CEA_WP
@@ -1,7 +1,7 @@
 
 This file is part of WP plug-in of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat a l'energie atomique et aux energies
        alternatives)
 
diff --git a/ivette/.dome-pkg-app.lock b/ivette/.dome-pkg-app.lock
index 80a4082f14edeadcc80e40bb7ede4ac1202b6795..d10dcc94cc589097df52ca4b0ce36e2b8eff7e70 100644
--- a/ivette/.dome-pkg-app.lock
+++ b/ivette/.dome-pkg-app.lock
@@ -1 +1 @@
-react@^18 react-dom@^18 source-map-support lodash@^4 react-virtualized@9.22.5 react-draggable react-fast-compare diff@^5 codemirror@5.65.2 @codemirror/language@6.10.0 @codemirror/search@6.5.5 @codemirror/state@6.4.0 @codemirror/view@6.23.1 @lezer/cpp@^1 react-virtualized-auto-sizer@^1.0.22
+react@^18 react-dom@^18 source-map-support lodash@^4 react-virtualized@9.22.5 react-draggable react-fast-compare diff@^5 codemirror@5.65.2 @codemirror/language@6.10.0 @codemirror/search@6.5.5 @codemirror/state@6.4.0 @codemirror/view@6.23.1 @lezer/cpp@^1 react-virtualized-auto-sizer@^1.0.22 react-force-graph-2d@^1.25.4 react-force-graph-3d@^1.24.2 d3-selection@^3 d3-graphviz@^5
diff --git a/ivette/.dome-pkg-dev.lock b/ivette/.dome-pkg-dev.lock
index 573c37041d1e56ab582f2ec1fc2b2f6f7dd7a402..5f7937b83c1ff3cfb536e5756aaa63ce1b21f91e 100644
--- a/ivette/.dome-pkg-dev.lock
+++ b/ivette/.dome-pkg-dev.lock
@@ -1 +1 @@
-electron@^28 electron-builder@^24 electron-vite@^2 electron-devtools-installer @types/lodash@^4 @types/react@^18 @types/node@^18 @types/react-dom@^18 @types/react-virtualized@^9.21.8 @types/diff@^5 typescript@^5
+electron@^28 electron-builder@^24 electron-vite@^2 electron-devtools-installer @types/lodash@^4 @types/react@^18 @types/node@^18 @types/react-dom@^18 @types/react-virtualized@^9.21.8 @types/diff@^5 @types/d3-selection @types/d3-graphviz typescript@^5
diff --git a/ivette/Makefile b/ivette/Makefile
index 93acf3c67c270e96a5f3b130443a4f05abb36e4c..98ba49b41697311318867a42d619f40ba66b3ab6 100644
--- a/ivette/Makefile
+++ b/ivette/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -279,7 +279,6 @@ endif
 # --------------------------------------------------------------------------
 
 tests: dist
-	@cp -r out/renderer/* out/main/
 	@echo "[Ivette] running tests"
 	@dune exec -- yarn playwright test
 
diff --git a/ivette/Makefile.installation b/ivette/Makefile.installation
index 691df3cd90f8ba9c823ecaddf709e361a844318a..93023347915704448df1729f43ed275faa3a236c 100644
--- a/ivette/Makefile.installation
+++ b/ivette/Makefile.installation
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/api.sh b/ivette/api.sh
index c168a023b4fee2e53fd210f59f204e068376f86b..4103f5f7381ca595532a6d73a02359684b2f748f 100755
--- a/ivette/api.sh
+++ b/ivette/api.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/electron.vite.config.ts b/ivette/electron.vite.config.ts
index f40976460c5b7bbe543587f82976a6e3ccb78733..58835c0b2baf01a5390bc5868023ed038f391838 100644
--- a/ivette/electron.vite.config.ts
+++ b/ivette/electron.vite.config.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -66,6 +66,7 @@ export default defineConfig({
         "dome/errors": path.resolve(DOME, "renderer", "errors"),
         "dome/frame": path.resolve(DOME, "renderer", "frame"),
         "dome/layout": path.resolve(DOME, "renderer", "layout"),
+        "dome/graph": path.resolve(DOME, "renderer", "graph"),
         "dome/misc": path.resolve(DOME, "misc"),
         "dome/system": path.resolve(DOME, "misc", "system.ts"),
         "dome/table": path.resolve(DOME, "renderer", "table"),
diff --git a/ivette/ivette-bootstrap.sh b/ivette/ivette-bootstrap.sh
index 237403472d86536aea8412eedd31c1c95bdd817b..6bd9b8fa9d76648a0739555a7c9ad4bc640128d8 100755
--- a/ivette/ivette-bootstrap.sh
+++ b/ivette/ivette-bootstrap.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/ivette-macos.sh b/ivette/ivette-macos.sh
index 8843b61ddffa8b0f5b5c6723f2a2f0c677d12a64..64c91a5955a95bdee6e1501bc8b618fb3d64bc4f 100755
--- a/ivette/ivette-macos.sh
+++ b/ivette/ivette-macos.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/package.json b/ivette/package.json
index 8c6657c0dae258f906451d3161c06eea43e6bb7a..e44cabd9e3d998792d6dd0f9d6896ad0a08a4cba 100644
--- a/ivette/package.json
+++ b/ivette/package.json
@@ -1,7 +1,7 @@
 {
   "name": "ivette",
   "productName": "Ivette",
-  "version": "28.1.0",
+  "version": "29.0.0",
   "repository": "git@git.frama-c.com:frama-c/Ivette.git",
   "author": "Loïc Correnson <loic.correnson@cea.fr>",
   "license": "LGPL-2.1",
@@ -39,6 +39,8 @@
     "cytoscape-klay": "",
     "cytoscape-panzoom": "",
     "cytoscape-popper": "",
+    "d3-graphviz": "^5",
+    "d3-selection": "^3",
     "diff": "^5",
     "lodash": "^4",
     "react": "^18",
@@ -46,6 +48,9 @@
     "react-dom": "^18",
     "react-draggable": "^4.4.6",
     "react-fast-compare": "^3.2.2",
+    "react-force-graph-2d": "^1.25.4",
+    "react-force-graph-3d": "^1.24.2",
+    "react-infinite-scroller": "^1.2.6",
     "react-pivottable": "^0.11.0",
     "react-virtualized": "9.22.5",
     "react-virtualized-auto-sizer": "^1.0.22",
@@ -58,11 +63,14 @@
     "@electron-toolkit/tsconfig": "^1.0.1",
     "@playwright/test": "^1.41.2",
     "@types/cytoscape": "^3.19.16",
-    "@types/diff": "^5.0.9",
-    "@types/lodash": "^4.17.0",
-    "@types/node": "^18.19.9",
+    "@types/d3-graphviz": "^2.6.10",
+    "@types/d3-selection": "^3.0.10",
+    "@types/diff": "^5",
+    "@types/lodash": "^4",
+    "@types/node": "^18",
     "@types/react": "^18",
     "@types/react-dom": "^18",
+    "@types/react-infinite-scroller": "^1.2.5",
     "@types/react-virtualized": "^9.21.8",
     "@typescript-eslint/eslint-plugin": "^7.4.0",
     "@typescript-eslint/parser": "^7.4.0",
@@ -80,14 +88,14 @@
     "eslint-plugin-react": "^7.33.2",
     "eslint-plugin-react-hooks": "^4.6.0",
     "prettier": "^3.2.4",
-    "typescript": "^5.3.3",
+    "typescript": "^5",
     "vite": "^5.0.12",
     "vite-plugin-commonjs-externals": "^0.1.4"
   },
   "build": {
     "appId": "com.framac.ivette",
     "compression": "store",
-    "copyright": "Copyright © 2007-2023 Frama-C. All Rights Reserved.",
+    "copyright": "Copyright © 2007-2024 Frama-C. All Rights Reserved.",
     "artifactName": "${productName}-${arch}-${version}.${ext}",
     "win": {
       "target": [
@@ -99,7 +107,7 @@
           ]
         }
       ],
-      "icon": "static/icon256.png",
+      "icon": "static/icon.png",
       "legalTrademarks": "LGPL-2.1"
     },
     "linux": {
@@ -117,7 +125,7 @@
       "category": "Profiling"
     },
     "mac": {
-      "icon": "static/icon512.png",
+      "icon": "static/icon.png",
       "identity": null,
       "mergeASARs": true,
       "target": [
diff --git a/ivette/playwright.config.ts b/ivette/playwright.config.ts
index b7a7d30b501a478d25023dd13f1a76087bee16d5..ae2c3fd07c2dd7928b2320ebfcae36009a6e7c44 100644
--- a/ivette/playwright.config.ts
+++ b/ivette/playwright.config.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/LICENSE.md b/ivette/src/dome/LICENSE.md
index 803e2e114cbf3b353564ba931b945bbfd06950b8..ffce0bdaf19fb77622e246e657184ab6b3731d26 100644
--- a/ivette/src/dome/LICENSE.md
+++ b/ivette/src/dome/LICENSE.md
@@ -1,7 +1,7 @@
 
 This file is part of Frama-C.
 
-Copyright (C) 2007-2023
+Copyright (C) 2007-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
diff --git a/ivette/src/dome/examples/Makefile b/ivette/src/dome/examples/Makefile
index f62e7e3849907fde7b98e8bd2859da070ca05927..bc4474ef5e7b15e13938e099efccdb4f856e4cd6 100644
--- a/ivette/src/dome/examples/Makefile
+++ b/ivette/src/dome/examples/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/src/dome/main/dome.ts b/ivette/src/dome/main/dome.ts
index 18b8a43ec9a755464f50ea8b91099ed36e746a48..336aa5abaff04af24bcbde8e9e12986a5a873d97 100644
--- a/ivette/src/dome/main/dome.ts
+++ b/ivette/src/dome/main/dome.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -406,7 +406,7 @@ function createBrowserWindow(
     height: 670,
     show: false,
     backgroundColor: '#f0f0f0',
-    icon: path.join(__dirname, 'icon.png'),
+    icon: path.join(__dirname, '../../static/icon.png'),
     webPreferences: {
       contextIsolation: false,
       nodeIntegration: true,
diff --git a/ivette/src/dome/main/menubar.ts b/ivette/src/dome/main/menubar.ts
index ad4156f97fa4ec9ac8907637ee4895f31c9c4e68..0268e73f3c36f62958809d7357bcd75f3d86317c 100644
--- a/ivette/src/dome/main/menubar.ts
+++ b/ivette/src/dome/main/menubar.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/misc/devtools.js b/ivette/src/dome/misc/devtools.js
index 39a664d921b1cd36593b1f229fcf952489517953..0c51604de40542aa75ab4b780bcc22d46d41d9d3 100644
--- a/ivette/src/dome/misc/devtools.js
+++ b/ivette/src/dome/misc/devtools.js
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/misc/format.ts b/ivette/src/dome/misc/format.ts
index fa9ff623f47a21324cfd8b0f17a1c663b1907b06..d7bfc90901ee005039c7fffde95c240c47bdc343 100644
--- a/ivette/src/dome/misc/format.ts
+++ b/ivette/src/dome/misc/format.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/misc/register.js b/ivette/src/dome/misc/register.js
index d987a8035664320db84fc72d6066a24ce547afc2..92fd8e8ce044284ac54b20209e086444b23d2c52 100644
--- a/ivette/src/dome/misc/register.js
+++ b/ivette/src/dome/misc/register.js
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/misc/system.ts b/ivette/src/dome/misc/system.ts
index 297ae8c92b7ddf3b16fd482d12780ccbb3dad6f2..d33f7fcef33bc8aa22b393eff81b2073c96912cf 100644
--- a/ivette/src/dome/misc/system.ts
+++ b/ivette/src/dome/misc/system.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/misc/utils.ts b/ivette/src/dome/misc/utils.ts
index c1c2b6bacf5507eae161cb673725b53289ba49d5..9b183b50fc13e6ec4a4a8992adf42f8a2e4de604 100644
--- a/ivette/src/dome/misc/utils.ts
+++ b/ivette/src/dome/misc/utils.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/controls/buttons.tsx b/ivette/src/dome/renderer/controls/buttons.tsx
index 3120b6ff51ccae5bf60c165f3075267a45cffccb..b42d7cdd14537f4a785054d2f8c31145b90fd6df 100644
--- a/ivette/src/dome/renderer/controls/buttons.tsx
+++ b/ivette/src/dome/renderer/controls/buttons.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/controls/displays.tsx b/ivette/src/dome/renderer/controls/displays.tsx
index 6f2609d50604aa866ec907d1624f235844e4adaf..a11992047db1988e0b3f029f8fa9ee9b99f6a8dd 100644
--- a/ivette/src/dome/renderer/controls/displays.tsx
+++ b/ivette/src/dome/renderer/controls/displays.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/controls/gallery.json b/ivette/src/dome/renderer/controls/gallery.json
index 10ad82c4a2d9daf1670ac692ffb9280496d2086c..ee1c752d5d7fab60749555b293faf8d84675926f 100644
--- a/ivette/src/dome/renderer/controls/gallery.json
+++ b/ivette/src/dome/renderer/controls/gallery.json
@@ -422,6 +422,11 @@
     "viewBox": "0 0 24 24",
     "path": "M20.571 2.571v18.857q0 0.348-0.254 0.603t-0.603 0.254h-18.857q-0.348 0-0.603-0.254t-0.254-0.603v-18.857q0-0.348 0.254-0.603t0.603-0.254h18.857q0.348 0 0.603 0.254t0.254 0.603z"
   },
+  "MEDIA.HALT": {
+    "section": "Media",
+    "viewBox": "0 0 16 16",
+    "path": "M8 0c-4.418 0-8 3.582-8 8s3.582 8 8 8 8-3.582 8-8-3.582-8-8-8zM8 14.5c-3.59 0-6.5-2.91-6.5-6.5s2.91-6.5 6.5-6.5 6.5 2.91 6.5 6.5-2.91 6.5-6.5 6.5zM5 5h6v6h-6z"
+  },
   "MEDIA.EJECT": {
     "section": "Media",
     "viewBox": "0 0 21 24",
diff --git a/ivette/src/dome/renderer/controls/icons.tsx b/ivette/src/dome/renderer/controls/icons.tsx
index c1b8d8408424658c690c26f7102f99660cd201a6..e6c26a8b62e022dd741b977452c230f359856871 100644
--- a/ivette/src/dome/renderer/controls/icons.tsx
+++ b/ivette/src/dome/renderer/controls/icons.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/controls/labels.tsx b/ivette/src/dome/renderer/controls/labels.tsx
index 7eefc1f4a9fe635b38d8ca32f4c1093a32f38209..37f07c8c8e53c75df9a46c4b1fcf5cf068773ce6 100644
--- a/ivette/src/dome/renderer/controls/labels.tsx
+++ b/ivette/src/dome/renderer/controls/labels.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/data/arrays.ts b/ivette/src/dome/renderer/data/arrays.ts
index 994b261ac7006840e7e7fb2126447648799ab3a7..1fbdad980401a672cc708110ecbc4eac5de5b4f5 100644
--- a/ivette/src/dome/renderer/data/arrays.ts
+++ b/ivette/src/dome/renderer/data/arrays.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/data/compare.ts b/ivette/src/dome/renderer/data/compare.ts
index a405a965dd1ea5b09807a2fcf580c01886e7bee2..47c3eaccd33e6b83f1df9e7c7367708e64fedf4b 100644
--- a/ivette/src/dome/renderer/data/compare.ts
+++ b/ivette/src/dome/renderer/data/compare.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/data/json.ts b/ivette/src/dome/renderer/data/json.ts
index 17bba91b054fe13e61572e0faed2aa0ea25cc9dc..fe6de213a20bcb96149cea9e5cc8b533f1c1f049 100644
--- a/ivette/src/dome/renderer/data/json.ts
+++ b/ivette/src/dome/renderer/data/json.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/data/library.js b/ivette/src/dome/renderer/data/library.js
index 5f24b9bd0b503a4e4f488cd19339131e4a91a5a0..2c2c3090cc553dd533c9b54f647d9526de5c0561 100644
--- a/ivette/src/dome/renderer/data/library.js
+++ b/ivette/src/dome/renderer/data/library.js
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/data/settings.ts b/ivette/src/dome/renderer/data/settings.ts
index 62abf2d59881643b1fcd2ccd35124c6713a5393c..3171dff3a3dc8db3ed289eacd133621eaa43e693 100644
--- a/ivette/src/dome/renderer/data/settings.ts
+++ b/ivette/src/dome/renderer/data/settings.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/data/states.ts b/ivette/src/dome/renderer/data/states.ts
index 261c64202b8b91b6c06f3be4aa1ec1c6565bbff4..fab86e0e57d922093f329dd36cbf22b244a8f072 100644
--- a/ivette/src/dome/renderer/data/states.ts
+++ b/ivette/src/dome/renderer/data/states.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/dialogs.tsx b/ivette/src/dome/renderer/dialogs.tsx
index ee44787270a51aa9ad83022c62847d3c890c5c4a..a1bff13059eb5f2375ff1f83eb33d25cb79a3e02 100644
--- a/ivette/src/dome/renderer/dialogs.tsx
+++ b/ivette/src/dome/renderer/dialogs.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/dnd.tsx b/ivette/src/dome/renderer/dnd.tsx
index 7a7643036414ad413d4390591b88866760a92535..2162c6b3497602f92ed2ce1c52c122419caae913 100644
--- a/ivette/src/dome/renderer/dnd.tsx
+++ b/ivette/src/dome/renderer/dnd.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/dome.tsx b/ivette/src/dome/renderer/dome.tsx
index 4e3378c960ace0d9b9bcdf33cb5e5077c997f733..ffaaa36e3a5337beb2d6ba71cad1a934dfc279d1 100644
--- a/ivette/src/dome/renderer/dome.tsx
+++ b/ivette/src/dome/renderer/dome.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -780,9 +780,10 @@ export function useTimer(period: number, callback: () => void): void {
 type Callback<A> = (arg: A) => void;
 
 /**
-   Protected callback against unmounted component.
-   The returned callback will be only fired when the component is mounted.
-   The provided callback need not be memoized.
+ * Protected callback against unwanted dependencies and unmounted component.
+ * - The provided callback need _not_ be memoized, no dependency is needed.
+ * - The provided callback will _not_ be fired after the component is unmounted.
+ * - The returned callback will be _constant_ during the entire hook lifetime.
  */
 export function useProtected<A>(fn: Callback<A> | undefined): Callback<A> {
   const cb = React.useRef<Callback<A>>();
diff --git a/ivette/src/dome/renderer/errors.tsx b/ivette/src/dome/renderer/errors.tsx
index f025ffcf48ac535d7ed1644f668cf5044512a62f..9635e2625d646e286b94d603edcd3b63d6055826 100644
--- a/ivette/src/dome/renderer/errors.tsx
+++ b/ivette/src/dome/renderer/errors.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -30,7 +30,7 @@
 */
 
 import React, { ReactNode } from 'react';
-import { Debug } from 'dome';
+import { DEVEL, Debug } from 'dome';
 import { Label } from 'dome/controls/labels';
 import { Button } from 'dome/controls/buttons';
 
@@ -53,7 +53,6 @@ export interface CatchProps {
   label?: string;
   /** Alternative renderer callback in case of errors. */
   onError?: JSX.Element | ErrorRenderer;
-
   children: ReactNode;
 }
 
@@ -62,25 +61,34 @@ interface CatchState {
   info?: unknown;
 }
 
+/* eslint-disable react/prop-types */
+
 /**
    React Error Boundaries.
  */
 export class Catch extends React.Component<CatchProps, CatchState, unknown> {
 
-  constructor(private p: CatchProps) {
-    super(p);
+  constructor(props: CatchProps) {
+    super(props);
     this.state = {};
     this.logerr = this.logerr.bind(this);
     this.reload = this.reload.bind(this);
   }
 
   componentDidCatch(error: unknown, info: unknown): void {
-    this.setState({ error, info });
+    if (DEVEL) {
+      const { label='Error' } = this.props;
+      D.error(label, ': ', error, info);
+    }
+  }
+
+  static getDerivedStateFromError(error: unknown, info: unknown): CatchState {
+    return { error, info };
   }
 
   logerr(): void {
     const { error, info } = this.state;
-    D.error('catched error:', error, info);
+    D.error('Catched error:', error, info);
   }
 
   reload(): void {
@@ -89,7 +97,7 @@ export class Catch extends React.Component<CatchProps, CatchState, unknown> {
 
   render(): JSX.Element {
     const { error, info } = this.state;
-    const { onError, label = 'Error' } = this.p;
+    const { onError, label = 'Error' } = this.props;
     if (error) {
       if (typeof onError === 'function')
         return onError(error, info, this.reload);
@@ -106,7 +114,7 @@ export class Catch extends React.Component<CatchProps, CatchState, unknown> {
         </div>
       );
     }
-    return (<>{this.p.children}</>);
+    return (<>{this.props.children}</>);
   }
 }
 
diff --git a/ivette/src/dome/renderer/frame/sidebars.tsx b/ivette/src/dome/renderer/frame/sidebars.tsx
index 716db0d0da35493327c88ba1e3fd3ade4285f90f..b8806c5c87fb7f960d870cbb85767a84992ce228 100644
--- a/ivette/src/dome/renderer/frame/sidebars.tsx
+++ b/ivette/src/dome/renderer/frame/sidebars.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/frame/style.css b/ivette/src/dome/renderer/frame/style.css
index 8ac7d4f4001164f3b08f8c6d03d12447a849643f..0a7fe9e602bfaaa9d382f549f540babb6c9cb650 100644
--- a/ivette/src/dome/renderer/frame/style.css
+++ b/ivette/src/dome/renderer/frame/style.css
@@ -234,11 +234,11 @@
 /* -------------------------------------------------------------------------- */
 
 .dome-xToolBar-group {
-    flex: 0 0 auto ;
+    flex: 1 0 auto ;
     min-height: 24px ;
     display: flex ;
     flex-direction: row ;
-    flex-wrap: wrap ;
+    flex-wrap: nowrap;
     align-items: center ;
     margin-left: 2px ;
     margin-right: 2px ;
diff --git a/ivette/src/dome/renderer/frame/tabs.tsx b/ivette/src/dome/renderer/frame/tabs.tsx
index 8fbc1395f98a98b0266e146ba55c3b254e4a798b..67cf16aae2842445938952fc9efc136b81e0d3c1 100644
--- a/ivette/src/dome/renderer/frame/tabs.tsx
+++ b/ivette/src/dome/renderer/frame/tabs.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/frame/toolbars.tsx b/ivette/src/dome/renderer/frame/toolbars.tsx
index a2243d7832274d03f65d71ef003c30ff3d961d2b..5cde88b571d735ca163fc73cd1f20b6d2e761d13 100644
--- a/ivette/src/dome/renderer/frame/toolbars.tsx
+++ b/ivette/src/dome/renderer/frame/toolbars.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -383,7 +383,7 @@ function scrollToRef(r: null | HTMLLabelElement): void {
 
 function Suggestions(props: SuggestionsProps): JSX.Element {
   const { hints, onHint, index, onClose } = props;
-  const suggestions = hints.map((h, k) => {
+  const suggestions = hints.slice(0, 100).map((h, k) => {
     const selected = k === index || hints.length === 1;
     const classSelected = selected && 'dome-xToolBar-searchIndex';
     const className = classes('dome-xToolBar-searchItem', classSelected);
@@ -414,6 +414,9 @@ function Suggestions(props: SuggestionsProps): JSX.Element {
       onMouseDown={(event) => event.preventDefault()}
     >
       {suggestions}
+      {hints.length > 100 ?
+        <Label>({hints.length - 100} omitted)</Label> :
+        null}
     </div>
   );
 }
diff --git a/ivette/src/dome/renderer/graph/diagram.tsx b/ivette/src/dome/renderer/graph/diagram.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..ec0325a9dcc403b3da70add407567c299832114e
--- /dev/null
+++ b/ivette/src/dome/renderer/graph/diagram.tsx
@@ -0,0 +1,571 @@
+/* ************************************************************************ */
+/*                                                                          */
+/*   This file is part of Frama-C.                                          */
+/*                                                                          */
+/*   Copyright (C) 2007-2024                                                */
+/*     CEA (Commissariat à l'énergie atomique et aux énergies               */
+/*          alternatives)                                                   */
+/*                                                                          */
+/*   you can redistribute it and/or modify it under the terms of the GNU    */
+/*   Lesser General Public License as published by the Free Software        */
+/*   Foundation, version 2.1.                                               */
+/*                                                                          */
+/*   It is distributed in the hope that it will be useful,                  */
+/*   but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
+/*   GNU Lesser General Public License for more details.                    */
+/*                                                                          */
+/*   See the GNU Lesser General Public License version 2.1                  */
+/*   for more details (enclosed in the file licenses/LGPLv2.1).             */
+/*                                                                          */
+/* ************************************************************************ */
+
+import React from 'react';
+import { Catch } from 'dome/errors';
+import { classes } from 'dome/misc/utils';
+import { Size } from 'react-virtualized';
+import { select, selectAll } from 'd3-selection';
+import { graphviz } from 'd3-graphviz';
+import AutoSizer from 'react-virtualized-auto-sizer';
+import './style.css';
+
+/* -------------------------------------------------------------------------- */
+/* --- Graph Specifications                                               --- */
+/* -------------------------------------------------------------------------- */
+
+export type Direction = 'LR' | 'TD';
+
+export type Font = 'serif' | 'sans' | 'mono';
+
+export type Color =
+  | 'white' | 'grey' | 'dark'
+  | 'primary' | 'selected'
+  | 'green' | 'orange' | 'red'
+  | 'yellow' | 'blue' | 'pink';
+
+export type Shape =
+  | 'point' | 'box'
+  | 'diamond' | 'hexagon'
+  | 'circle' | 'ellipse'
+  | 'note' | 'tab' | 'folder' | 'cds';
+
+export type Anchor =
+  'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw' | 'c' | '_';
+
+export type Arrow = 'none' | 'arrow' | 'tee' | 'box' | 'dot';
+
+export type Line = 'solid' | 'dashed' | 'dotted';
+
+export type Cell = string | { label: string, port: string };
+
+export type Box = Cell | Box[];
+
+export interface Node {
+  /** Node identifier (unique). */
+  id: string;
+  /** Cluster identifier */
+  cluster?: string;
+  /** Node label */
+  label?: string;
+  /** Node tooltip */
+  title?: string;
+  /** Node font (label) */
+  font?: Font;
+  /** Node color (filled background) */
+  color?: Color;
+  /**
+   * Shape. Nested boxes alternate LR and TD directions. Initial direction is
+   * orthogonal to the graph direction. Node label is ignored for box layout.
+   */
+  shape?: Shape | Box[];
+}
+
+/**
+ *  Edge properties.
+ *  Alternative syntax `id:port` is also supported for port names.
+ */
+export interface Edge {
+  /** Source node identifier */
+  source: string;
+  /** Source port (provided source node has box shape) */
+  sourcePort?: string;
+  /** Target node identifier */
+  target: string;
+  /** Target port (provided target node has box shape) */
+  targetPort?: string;
+  /** Default is `solid` */
+  line?: Line;
+  /** Default is `dark` */
+  color?: Color;
+  head?: Arrow;
+  headLabel?: string,
+  headAnchor?: Anchor;
+  tail?: Arrow;
+  tailLabel?: string,
+  tailAnchor?: Anchor;
+  font?: Font;
+  label?: string;
+  title?: string;
+  /** Edge constraints node placement (default: true). */
+  constraint?: boolean;
+  /** Node placement on the same rank (default: false). */
+  aligned?: boolean;
+}
+
+export interface Cluster {
+  /** Identifier */
+  id: string;
+  /** Label (default is none) */
+  label?: string;
+  /** Title (default is none) */
+  title?: string;
+  /** Background color (default is grey) */
+  color?: Color;
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Graph Component Properties                                         --- */
+/* -------------------------------------------------------------------------- */
+
+export interface DiagramProps {
+  nodes?: readonly Node[];
+  edges?: readonly Edge[];
+  clusters?: readonly Cluster[];
+
+  /**
+     Element to focus on.
+     The default color for this element is `'selected'`.
+   */
+  selected?: string;
+
+  /** Top-Down (`'TD'`, default) or Left-Right (`'LR'`) direction. */
+  direction?: Direction;
+
+  /** Invoked when a node is selected. */
+  onSelection?: (node: string | undefined) => void;
+
+  /** Whether the Graph shall be displayed or not (defaults to true). */
+  display?: boolean;
+
+  /** Styling the Graph main div element. */
+  className?: string;
+
+  /** Debug the generated DotModel */
+  onModelChanged?: (model: string) => void;
+
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- CSS Model                                                          --- */
+/* -------------------------------------------------------------------------- */
+
+const FONTNAME = {
+  'serif': 'Times',
+  'sans': 'sans-serif',
+  'mono': 'Courier',
+};
+
+// node background colors
+const BGCOLOR = {
+  'white': '#fff',
+  'grey': '#ccc',
+  'dark': '#666',
+  'primary': 'dodgerblue',
+  'selected': 'deepskyblue',
+  'green': 'lime',
+  'orange': '#ffa700',
+  'red': 'red',
+  'yellow': 'yellow',
+  'blue': 'cyan',
+  'pink': 'hotpink',
+};
+
+// cluster background colors
+const SGCOLOR = {
+  'white': '#eee',
+  'grey': '#ccc',
+  'dark': '#aaa',
+  'primary': '#4fc3f7',
+  'selected': '#90caf9',
+  'green': '#AED581',
+  'orange': '#FFCC80',
+  'red': '#ff6e6e',
+  'yellow': '#fff59d',
+  'blue': '#bbdefb',
+  'pink': '#f8bbd0',
+};
+
+// foreground colors
+const FGCOLOR = {
+  'white': 'black',
+  'grey': 'black',
+  'dark': 'white',
+  'primary': 'white',
+  'selected': 'black',
+  'green': 'black',
+  'orange': 'black',
+  'red': 'white',
+  'yellow': 'black',
+  'blue': 'black',
+  'pink': 'white',
+};
+
+// edge colors
+const EDCOLOR = {
+  'white': '#ccc',
+  'grey': '#888',
+  'dark': 'black',
+  'primary': 'dodgerblue',
+  'selected': 'deepskyblue',
+  'green': 'green',
+  'orange': 'orange',
+  'red': 'red',
+  'yellow': '#e5e100',
+  'blue': 'deepskyblue',
+  'pink': 'palevioletred1',
+};
+
+/* -------------------------------------------------------------------------- */
+/* --- Edge Model                                                         --- */
+/* -------------------------------------------------------------------------- */
+
+const DIR = (h: Arrow, t: Arrow): string | undefined =>
+  h === 'none'
+    ? (t === 'none' ? 'none' : 'back')
+    : (t === 'none' ? undefined : 'both');
+
+/* -------------------------------------------------------------------------- */
+/* --- Dot Model                                                          --- */
+/* -------------------------------------------------------------------------- */
+
+type cluster = { props: Cluster; nodes: Node[]; }
+
+class Builder {
+
+  private selected: string | undefined;
+  private spec = '';
+
+  private kid = 0;
+  private imap = new Map<string, string>();
+  private rmap = new Map<string, string>();
+  private cmap = new Map<string, cluster>();
+
+  index(id: string): string {
+    const n = this.imap.get(id);
+    if (n !== undefined) return n;
+    const m = `n${this.kid++}`;
+    this.imap.set(id, m);
+    this.rmap.set(m, id);
+    return m;
+  }
+
+  findCluster(id: string): cluster {
+    const c = this.cmap.get(id);
+    if (c !== undefined) return c;
+    const d = { props: { id }, nodes: [] };
+    this.cmap.set(id, d);
+    return d;
+  }
+
+  addClusterNode(n: Node): void {
+    if (n.cluster !== undefined) {
+      this.findCluster(n.cluster).nodes.push(n);
+    }
+  }
+
+  setClusterProps(props: Cluster): void {
+    const c = this.findCluster(props.id);
+    c.props = props;
+  }
+
+  nodeId(n: string): string {
+    return this.rmap.get(n) ?? n;
+  }
+
+  init(): Builder {
+    this.spec = 'digraph {\n';
+    this.selected = undefined;
+    this.cmap.clear();
+    // Keep node index to fade in & out
+    return this;
+  }
+
+  select(selected: string | undefined): Builder {
+    this.selected = selected;
+    return this;
+  }
+
+  flush(): string { return this.spec.concat('}'); }
+
+  print(...text: string[]): Builder {
+    this.spec = this.spec.concat(...text);
+    return this;
+  }
+
+  println(...text: string[]): Builder {
+    this.spec = this.spec.concat(...text).concat('\n');
+    return this;
+  }
+
+  // --- Attributes
+
+  escaped(a: string): Builder {
+    return this.print(a.split('"').join('\\"'));
+  }
+
+  value(a: string | number | boolean): Builder {
+    if (typeof a === 'string')
+      return this.print('"').escaped(a).print('"');
+    else
+      return this.print(`${a}`);
+  }
+
+  attr(a: string, v: string | number | boolean | undefined): Builder {
+    if (v !== undefined && v !== '')
+      return this.print(' ', a, '=').value(v).print(';');
+    else
+      return this;
+  }
+
+  // --- Node Table Shape
+
+  port(id: string, port?: string): Builder {
+    this.print(this.index(id));
+    if (port) this.print(':', this.index(port));
+    return this;
+  }
+
+  record(r: Box, nested = false): Builder {
+    if (Array.isArray(r)) {
+      if (nested) this.print('{');
+      r.forEach((c, k) => {
+        if (k > 0) this.print('|');
+        this.record(c, true);
+      });
+      if (nested) this.print('}');
+      return this;
+    } else if (typeof r === 'string') {
+      return this.escaped(r);
+    } else {
+      return this.print('<').port(r.port).print('> ').escaped(r.label);
+    }
+  }
+
+  // --- Node
+  node(n: Node): void {
+    this
+      .print('  ')
+      .port(n.id)
+      .print(' [')
+      .attr('id', n.id)
+      .attr('fontname', n.font ? FONTNAME[n.font] : undefined);
+    if (typeof n.shape === 'object') {
+      this
+        .attr('shape', 'record')
+        .print(' label="')
+        .record(n.shape)
+        .print('";')
+        .attr('tooltip', n.title ?? n.id);
+    } else {
+      this
+        .attr('label', n.label ?? n.id)
+        .attr('shape', n.shape)
+        .attr('tooltip', n.title ?? n.label ?? n.id);
+    }
+    const color = n.color ?? (n.id === this.selected ? 'selected' : 'white');
+    this
+      .attr('fontcolor', FGCOLOR[color])
+      .attr('fillcolor', BGCOLOR[color])
+      .println(' ];');
+  }
+
+  cluster(c: cluster): void {
+    const { props: s, nodes } = c;
+    const { color = 'grey' } = s;
+    this
+      .print('  subgraph cluster_', this.index(s.id), ' {\n   ')
+      .attr('style', 'filled')
+      .attr('label', s.label)
+      .attr('tooltip', s.title ?? s.id)
+      .attr('fontcolor', FGCOLOR[color])
+      .attr('fillcolor', SGCOLOR[color])
+      .print('\n   ');
+    nodes.forEach(n => this.print(' ', this.index(n.id), ';'));
+    this.println('\n  }');
+  }
+
+  clusters(cs: readonly Cluster[]): Builder {
+    cs.forEach(c => this.setClusterProps(c));
+    return this;
+  }
+
+  nodes(ns: readonly Node[]): Builder {
+    ns.forEach(n => this.addClusterNode(n));
+    this.cmap.forEach(c => this.cluster(c));
+    ns.forEach(n => this.node(n));
+    return this;
+  }
+
+  // --- Edge
+  edge(e: Edge): void {
+    const { line = 'solid', head = 'arrow', tail = 'none' } = e;
+    const tooltip = e.title ?? e.label ?? `${e.source} -> ${e.target}`;
+    if (e.aligned === true)
+      this
+        .print('{ rank=same; ')
+        .port(e.source).print(' ')
+        .port(e.target).println(' };');
+    this
+      .print('  ')
+      .port(e.source, e.sourcePort)
+      .print(' -> ')
+      .port(e.target, e.targetPort)
+      .print(' [')
+      .attr('label', e.label)
+      .attr('fontname', e.font ? FONTNAME[e.font] : undefined)
+      .attr('headport', e.tailAnchor)
+      .attr('tailport', e.headAnchor)
+      .attr('headlabel', e.headLabel)
+      .attr('taillabel', e.tailLabel)
+      .attr('constraint', e.constraint === false ? false : undefined)
+      .attr('labeltooltip', e.label ? tooltip : undefined)
+      .attr('headtooltip', e.headLabel ? tooltip : undefined)
+      .attr('tailtooltip', e.tailLabel ? tooltip : undefined)
+      .attr('tooltip', tooltip)
+      .attr('dir', DIR(head, tail))
+      .attr('color', e.color ? EDCOLOR[e.color] : undefined)
+      .attr('style', line === 'solid' ? undefined : line)
+      .attr('arrowhead', head === 'arrow' ? undefined : head)
+      .attr('arrowtail', tail === 'arrow' ? undefined : tail)
+      .println('];');
+  }
+
+  edges(es: readonly Edge[]): Builder {
+    es.forEach(e => this.edge(e));
+    return this;
+  }
+
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- d3-Graphviz view                                                   --- */
+/* -------------------------------------------------------------------------- */
+
+let divId = 0;
+const newDivId = (): string => `dome_xDiagram_g${++divId}`;
+
+interface GraphvizProps extends DiagramProps { size: Size }
+
+function GraphvizView(props: GraphvizProps): JSX.Element {
+
+  // --- Builder Instance (unique)
+  const builder = React.useMemo(() => new Builder, []);
+
+  // --- Model Generation
+  const {
+    direction = 'LR',
+    clusters = [],
+    nodes = [],
+    edges = [],
+    selected
+  } = props;
+
+  const model = React.useMemo(() =>
+    builder
+      .init()
+      .select(selected)
+      .print(' ')
+      .attr('rankdir', direction)
+      .attr('bgcolor', 'none')
+      .attr('width', 0.5)
+      .println('node [ style="filled" ];')
+      .clusters(clusters)
+      .nodes(nodes)
+      .edges(edges)
+      .flush()
+    , [builder, direction, clusters, nodes, edges, selected]
+  );
+
+  // --- Model Update Callback
+  const { onModelChanged } = props;
+  React.useEffect(() => {
+    if (onModelChanged) onModelChanged(model);
+  }, [model, onModelChanged]);
+
+
+  // --- Rendering & Remote
+  const [error, setError] = React.useState<string>();
+  const id = React.useMemo(newDivId, []);
+  const href = `#${id}`;
+  const { onSelection } = props;
+  const { width, height } = props.size;
+  React.useEffect(() => {
+    setError(undefined);
+    graphviz(href, {
+      useWorker: false,
+      fit: false, zoom: true, width, height,
+    }).onerror(setError)
+      .renderDot(model).on('end', function () {
+        if (onSelection) {
+          selectAll('.node')
+            .on('click', function (evt: PointerEvent) {
+              const s = select(this).attr('id');
+              if (s) {
+                evt.stopPropagation();
+                onSelection(builder.nodeId(s));
+              }
+            });
+        }
+      });
+  }, [href, model, width, height, builder, onSelection, setError]);
+
+  const onClick = React.useCallback((): void => {
+    if (onSelection) onSelection(undefined);
+  }, [onSelection]);
+
+  const onKey = React.useCallback((evt: React.KeyboardEvent): void => {
+    if (evt.key === 'Escape') {
+      evt.preventDefault();
+      graphviz(href).resetZoom();
+      if (onSelection) onSelection(undefined);
+    }
+  }, [href, onSelection]);
+
+  if (error !== undefined) throw (error);
+
+  return (
+    <div
+      id={id}
+      tabIndex={-1}
+      style={{ outline: 'none' }}
+      className={props.className}
+      onKeyDown={onKey}
+      onClick={onClick} />
+  );
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Dome Diagram Component                                             --- */
+/* -------------------------------------------------------------------------- */
+
+export function Diagram(props: DiagramProps): JSX.Element {
+  const { display = true } = props;
+  const className = classes('dome-xDiagram', props.className);
+  return (
+    <>
+      {display && (
+        <AutoSizer>
+          {(size: Size) => (
+            <div className={className} style={size}>
+              <Catch label='Graphviz Error'>
+                <GraphvizView size={size} {...props} />
+              </Catch>
+            </div>
+          )}
+        </AutoSizer >
+      )}
+    </>
+  );
+}
+
+/* -------------------------------------------------------------------------- */
diff --git a/ivette/src/dome/renderer/graph/graph.tsx b/ivette/src/dome/renderer/graph/graph.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..535d0dd9bb118e6f0e3d3b272a70ff37dcdb31ef
--- /dev/null
+++ b/ivette/src/dome/renderer/graph/graph.tsx
@@ -0,0 +1,281 @@
+/* ************************************************************************ */
+/*                                                                          */
+/*   This file is part of Frama-C.                                          */
+/*                                                                          */
+/*   Copyright (C) 2007-2024                                                */
+/*     CEA (Commissariat à l'énergie atomique et aux énergies               */
+/*          alternatives)                                                   */
+/*                                                                          */
+/*   you can redistribute it and/or modify it under the terms of the GNU    */
+/*   Lesser General Public License as published by the Free Software        */
+/*   Foundation, version 2.1.                                               */
+/*                                                                          */
+/*   It is distributed in the hope that it will be useful,                  */
+/*   but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
+/*   GNU Lesser General Public License for more details.                    */
+/*                                                                          */
+/*   See the GNU Lesser General Public License version 2.1                  */
+/*   for more details (enclosed in the file licenses/LGPLv2.1).             */
+/*                                                                          */
+/* ************************************************************************ */
+
+import React from 'react';
+
+import ForceGraph2D, {
+  ForceGraphMethods as ForceGraphMethods2D,
+  LinkObject as LinkObject2D,
+  NodeObject as NodeObject2D,
+} from 'react-force-graph-2d';
+
+import ForceGraph3D, {
+  ForceGraphMethods as ForceGraphMethods3D,
+  LinkObject as LinkObject3D,
+  NodeObject as NodeObject3D,
+} from 'react-force-graph-3d';
+
+import { Size } from 'react-virtualized';
+import AutoSizer from 'react-virtualized-auto-sizer';
+
+// ForceGraphMethods as ForceGraphMethods3D,
+
+/* -------------------------------------------------------------------------- */
+/* --- Graph Specifications                                               --- */
+/* -------------------------------------------------------------------------- */
+
+export type Layout = '2D' | '3D';
+
+export interface Node {
+  /** Node identifier (unique). */
+  id: string;
+  /** Node label (optional). */
+  label?: string;
+}
+
+export interface Edge {
+  source: string /** Source node identifier */;
+  target: string /** Target node identifier */;
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Graph Component Properties                                         --- */
+/* -------------------------------------------------------------------------- */
+
+export type Callback = () => void;
+export type SelectionCallback = (node: string, evt: MouseEvent) => void;
+
+export interface GraphProps {
+  nodes: readonly Node[];
+  edges: readonly Edge[];
+
+  /**
+     Element to focus on.
+     The graph is scrolled to make this node visible if necessary.
+   */
+  selected?: string;
+
+  /** Layout engine. */
+  layout?: Layout;
+
+  /** Invoked when a node is selected. */
+  onSelection?: SelectionCallback;
+
+  /** Invoked after layout is computed (typically used after a reset). */
+  onReady?: Callback;
+
+  /** Whether the Graph shall be displayed or not (defaults to true). */
+  display?: boolean;
+
+  /** Styling the Graph main div element. */
+  className?: string;
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Force Graph Components                                             --- */
+/* -------------------------------------------------------------------------- */
+
+interface GNode {
+  id: string;
+  label?: string;
+}
+interface GLink {
+  source: string;
+  target: string;
+}
+interface GData {
+  nodes: GNode[];
+  links: GLink[];
+}
+
+interface GProps {
+  data: GData;
+  onSelection?: SelectionCallback;
+  selected: string | undefined;
+  size: Size;
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- 2D Force Graph Component                                           --- */
+/* -------------------------------------------------------------------------- */
+
+function Graph2D(props: GProps): JSX.Element {
+  const { data, onSelection, selected, size } = props;
+  const { width, height } = size;
+
+  const fgRef2D = React.useRef<
+    | ForceGraphMethods2D<NodeObject2D<GNode>, LinkObject2D<GNode, GLink>>
+    | undefined
+  >(undefined);
+
+  React.useEffect(() => {
+    if (fgRef2D.current && selected) {
+      const selectedNode: NodeObject2D | undefined = data.nodes.find(
+        (node) => node.id === selected
+      );
+      if (selectedNode?.x && selectedNode?.y)
+        fgRef2D.current.centerAt(selectedNode.x, selectedNode.y, 500);
+    }
+  }, [selected, data]);
+
+  return (
+    <ForceGraph2D<GNode, GLink>
+      ref={fgRef2D}
+      width={width}
+      height={height}
+      nodeId='id'
+      nodeLabel='label'
+      linkSource='source'
+      linkTarget='target'
+      graphData={data}
+      autoPauseRedraw={true}
+      // default value of intensity
+      d3AlphaDecay={0.0228}
+      dagLevelDistance={50}
+      onNodeClick={(node, event): void => {
+        if (onSelection) onSelection(node.id, event);
+      }}
+      // Fix target position on drag end
+      onNodeDragEnd={(node) => {
+        node.fx = node.x;
+        node.fy = node.y;
+      }}
+      cooldownTime={50}
+      nodeColor={(node) => (node.id === selected ? '#F4D03F' : '#5DADE2')}
+    />
+  );
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- 3D Force Graph Component                                           --- */
+/* -------------------------------------------------------------------------- */
+
+function Graph3D(props: GProps): JSX.Element {
+  const { data, onSelection, selected, size } = props;
+  const { width, height } = size;
+
+  const fgRef3D = React.useRef<
+    | ForceGraphMethods3D<NodeObject3D<GNode>, LinkObject3D<GNode, GLink>>
+    | undefined
+  >(undefined);
+
+  React.useEffect(() => {
+    if (fgRef3D.current && selected) {
+      // distance to set between camera and node
+      const distance = 370;
+      const selectedNode: NodeObject3D | undefined = data.nodes.find(
+        (node) => node.id === selected
+      );
+      if (selectedNode) {
+        const { x, y, z } = selectedNode;
+        if (x && y && z) {
+          const distRatio = 1 + distance / Math.hypot(x, y, z);
+          fgRef3D.current.cameraPosition(
+            // new position
+            { x: x * distRatio, y: y * distRatio, z: z * distRatio },
+            { x, y, z }, // lookAt Parameter
+            1000 // ms transition duration
+          );
+        }
+      }
+    }
+  }, [selected, data]);
+
+  return (
+    <ForceGraph3D<GNode, GLink>
+      ref={fgRef3D}
+      width={width}
+      height={height}
+      nodeId='id'
+      nodeLabel='label'
+      linkSource='source'
+      linkTarget='target'
+      graphData={data}
+      d3AlphaDecay={0.0228}
+      onNodeClick={(node, event): void => {
+        if (onSelection) onSelection(node.id, event);
+      }}
+      cooldownTime={50}
+      dagLevelDistance={50}
+      controlType='orbit'
+      // Fix target position on drag end
+      onNodeDragEnd={(node) => {
+        node.fx = node.x;
+        node.fy = node.y;
+        node.fz = node.z;
+      }}
+      nodeColor={(node) => (node.id === selected ? '#F4D03F' : '#5DADE2')}
+    />
+  );
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Dome Graph Component                                               --- */
+/* -------------------------------------------------------------------------- */
+
+export function Graph(props: GraphProps): JSX.Element {
+  const { nodes, edges, onSelection, display = true, selected } = props;
+  const data: GData = React.useMemo(
+    () => ({
+      nodes: nodes.slice(),
+      links: edges.slice(),
+    }),
+    [nodes, edges]
+  );
+
+  return (
+    <>
+      {display && props.layout === '2D' && (
+        <AutoSizer>
+          {(size: Size) => (
+            <div className={props.className}>
+              <Graph2D
+                key='2D'
+                data={data}
+                onSelection={onSelection}
+                selected={selected}
+                size={size}
+              />
+            </div>
+          )}
+        </AutoSizer>
+      )}
+      {display && props.layout === '3D' && (
+        <AutoSizer>
+          {(size: Size) => (
+            <div className={props.className}>
+              <Graph3D
+                key='3D'
+                data={data}
+                onSelection={onSelection}
+                selected={selected}
+                size={size}
+              />
+            </div>
+          )}
+        </AutoSizer>
+      )}
+    </>
+  );
+}
+
+/* -------------------------------------------------------------------------- */
diff --git a/ivette/src/dome/renderer/graph/style copy.css b/ivette/src/dome/renderer/graph/style copy.css
new file mode 100644
index 0000000000000000000000000000000000000000..ad640de4533911ff329e887669ac8c19cf4bf3e6
--- /dev/null
+++ b/ivette/src/dome/renderer/graph/style copy.css	
@@ -0,0 +1,213 @@
+/* -------------------------------------------------------------------------- */
+/* --- Main Dome Styles                                                   --- */
+/* -------------------------------------------------------------------------- */
+
+* {
+  user-select: none;
+  box-sizing: border-box;
+  margin: 0 ;
+  padding: 0 ;
+}
+
+body {
+  color: var(--text);
+  background: var(--background-softer);
+  overflow: hidden ;
+  position: fixed ;
+  font-family: sans-serif ;
+  font-size: 13px ;
+  top: 0 ;
+  bottom: 0 ;
+  left: 0 ;
+  right: 0 ;
+}
+
+#app {
+  width: 100% ;
+  height: 100% ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Frame Colors                                                       --- */
+/* -------------------------------------------------------------------------- */
+
+.dome-erased {
+    display: none !important;
+}
+
+.dome-hidden {
+    visibility: hidden !important;
+}
+
+.dome-positionned {
+    position: relative;
+}
+
+.dome-color-frame {
+    fill:         var(--text-discrete) ;
+    color:        var(--text-discrete) ;
+    border-color: var(--border) ;
+    background:   var(--background-intense) ;
+}
+
+.dome-color-dragzone {
+    opacity: 0.0 ;
+    background: transparent ;
+    transition: opacity .1s linear 0.1s , background .1s linear 0.1s ;
+}
+
+.dome-color-dragzone:hover {
+    background: var(--grid-layout-holder) ;
+    opacity: 0.4 ;
+    transition: opacity .1s linear 0.1s , background .1s linear 0.1s ;
+}
+
+.dome-color-dragging {
+    background: var(--grid-layout-target) ;
+    opacity: 0.5 ;
+    transition: opacity .1s linear 0.1s , background .1s linear 0.1s ;
+}
+
+div.dome-dragged {
+    background: var(--grid-layout-holder) ;
+    border: none ;
+}
+
+.dome-dragging * {
+    cursor: move ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Text Properties                                                    --- */
+/* -------------------------------------------------------------------------- */
+
+.dome-text-label {
+    font-family: sans-serif ;
+    user-select: none ;
+    white-space: nowrap ;
+    text-overflow: ellipsis ;
+}
+
+.dome-text-title {
+    font-family: sans-serif ;
+    font-size: larger ;
+    font-weight: bolder ;
+    user-select: none ;
+    white-space: nowrap ;
+    text-overflow: ellipsis ;
+}
+
+.dome-text-descr {
+    font-weight: lighter ;
+    font-family: sans-serif ;
+    font-size: smaller ;
+    user-select: none ;
+    white-space: normal ;
+    text-overflow: ellipsis ;
+}
+
+.dome-text-data {
+    cursor: text ;
+    user-select: text ;
+    font-family: sans-serif ;
+    white-space: nowrap ;
+    text-overflow: clip ;
+}
+
+.dome-text-code {
+    cursor: text ;
+    user-select: text ;
+    font-family: 'Andale mono', monospace ;
+    font-size: 9pt ;
+    white-space: nowrap ;
+    text-overflow: clip ;
+}
+
+.dome-text-cell {
+    cursor: default ;
+    user-select: text ;
+    font-family: 'Andale mono', monospace ;
+    font-size: 9pt ;
+    white-space: nowrap ;
+    text-overflow: clip ;
+}
+
+.dome-text-item {
+    cursor: default ;
+    user-select: none ;
+    font-family: 'Andale mono', monospace ;
+    font-size: 9pt ;
+    white-space: nowrap ;
+    text-overflow: clip ;
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Theme-compliant Scrollbars                                         --- */
+/* -------------------------------------------------------------------------- */
+
+::-webkit-scrollbar {
+  width: 14px;
+  height: 14px;
+}
+
+::-webkit-scrollbar-track {
+  background: var(--background-intense);
+}
+
+::-webkit-scrollbar-thumb {
+  background-color: var(--info-text-discrete);
+  border-radius: 20px;
+  border: 3px solid var(--background-intense);
+}
+
+::-webkit-scrollbar-corner {
+  background-color: var(--background-profound);
+  background: var(--background-profound);
+  color: var(--background-profound);
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Theme-compliant Input Widgets                                      --- */
+/* -------------------------------------------------------------------------- */
+
+input[type="search"]::placeholder {
+  font-style: italic;
+  color: var(--text-discrete);
+}
+
+input[type="text"]::placeholder {
+  font-style: italic;
+  color: var(--text-discrete);
+}
+
+input[type="text"] {
+  vertical-align: middle;
+  margin: 2px 4px 2px 0px;
+  background-color: var(--background-interaction);
+  border: var(--border);
+  border-radius: 2px;
+}
+
+input:focus-visible {
+  outline: none;
+  box-shadow: 0px 0px 1px 1px var(--border);
+}
+
+input[type="checkbox"] {
+  appearance: none;
+  width: 13px;
+  height: 13px;
+  border: 1px solid var(--border);
+  border-radius: 2px;
+  content: "";
+  font-size: 12px;
+  color: var(--text);
+  background-clip: content-box;
+  padding: 1px;
+}
+
+input[type="checkbox"]:checked {
+  background-color: var(--checked-element);
+}
+
+/* -------------------------------------------------------------------------- */
diff --git a/ivette/src/dome/renderer/graph/style.css b/ivette/src/dome/renderer/graph/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..c8818cb37fc1b12a09f3fc820acec6e7e6a256a0
--- /dev/null
+++ b/ivette/src/dome/renderer/graph/style.css
@@ -0,0 +1,7 @@
+/* -------------------------------------------------------------------------- */
+/* --- Graph Styles                                                       --- */
+/* -------------------------------------------------------------------------- */
+
+.dome-xDiagram {
+    background: #eee;
+}
diff --git a/ivette/src/dome/renderer/layout/boxes.tsx b/ivette/src/dome/renderer/layout/boxes.tsx
index cbb6f2b030885628833578847b3cc2483730d6e6..ae900f7400f98d27305c74a7c94c4737c2420cee 100644
--- a/ivette/src/dome/renderer/layout/boxes.tsx
+++ b/ivette/src/dome/renderer/layout/boxes.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/layout/dispatch.tsx b/ivette/src/dome/renderer/layout/dispatch.tsx
index bc8ec21fb24982048a70b8b60945ad246f089bf5..b8c05ea300ee9d58a3e3b6758583ea293338ba2d 100644
--- a/ivette/src/dome/renderer/layout/dispatch.tsx
+++ b/ivette/src/dome/renderer/layout/dispatch.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/layout/forms.tsx b/ivette/src/dome/renderer/layout/forms.tsx
index 30ce592c92d6754dcb20b9459d09a29a15bd25f4..7d6f590814e8f5ad8ddd5204e2bc92489a4773a7 100644
--- a/ivette/src/dome/renderer/layout/forms.tsx
+++ b/ivette/src/dome/renderer/layout/forms.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/layout/qsplit.tsx b/ivette/src/dome/renderer/layout/qsplit.tsx
index 9fc3f4b90bb7d063266eb8d26820e04e36a728a8..7ac25db00c9f5c88b6701fcd38bfadf35e0ac67f 100644
--- a/ivette/src/dome/renderer/layout/qsplit.tsx
+++ b/ivette/src/dome/renderer/layout/qsplit.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/layout/splitters.tsx b/ivette/src/dome/renderer/layout/splitters.tsx
index adaa52445d06ae542701891094be2d4b82fb5fb6..990602493b839b98856eaf3a9b15614f7dfd96e0 100644
--- a/ivette/src/dome/renderer/layout/splitters.tsx
+++ b/ivette/src/dome/renderer/layout/splitters.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/table/arrays.ts b/ivette/src/dome/renderer/table/arrays.ts
index 16d1e29ba1fab4d11c435201113488eb2ed505c2..45eed6bfc269d3001ed0df80f5ba37e19c37a13a 100644
--- a/ivette/src/dome/renderer/table/arrays.ts
+++ b/ivette/src/dome/renderer/table/arrays.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/table/models.ts b/ivette/src/dome/renderer/table/models.ts
index a524dd6b7750a986de86d557e425e98f9189a303..1ac2aa16c980e4c7ee3dad8a6048587c7cffade8 100644
--- a/ivette/src/dome/renderer/table/models.ts
+++ b/ivette/src/dome/renderer/table/models.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/table/views.tsx b/ivette/src/dome/renderer/table/views.tsx
index 6e20b4637a75889f5ae13771ffc980421de30b94..ebeb697813c12d4fb1ba0b021a04ae965546fca2 100644
--- a/ivette/src/dome/renderer/table/views.tsx
+++ b/ivette/src/dome/renderer/table/views.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/text/editor.tsx b/ivette/src/dome/renderer/text/editor.tsx
index a2bfc2004bcab29a85f50fb0a9d8395ad042b2ab..c96a6345336c1b6c33c8cff3d29741deb87580dd 100644
--- a/ivette/src/dome/renderer/text/editor.tsx
+++ b/ivette/src/dome/renderer/text/editor.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/text/pages.tsx b/ivette/src/dome/renderer/text/pages.tsx
index 4a1b12e0e04367f05ec42745dc72873234595d36..8c82d19e5a9ec8143263cf14da45a703f0b27738 100644
--- a/ivette/src/dome/renderer/text/pages.tsx
+++ b/ivette/src/dome/renderer/text/pages.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/text/richtext.tsx b/ivette/src/dome/renderer/text/richtext.tsx
index 02ea5b7a143800453597a82069a72213b64e9254..494f437b3fe72022ba8a5260a27506dd3a82ae6f 100644
--- a/ivette/src/dome/renderer/text/richtext.tsx
+++ b/ivette/src/dome/renderer/text/richtext.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/renderer/themes.tsx b/ivette/src/dome/renderer/themes.tsx
index 67c18a86ba0adbe60db73e7b767c75d4df4aab2f..655d4639010a5e7bcba1f07f674f2908e15ef6b3 100644
--- a/ivette/src/dome/renderer/themes.tsx
+++ b/ivette/src/dome/renderer/themes.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/template/Application.ts.templ b/ivette/src/dome/template/Application.ts.templ
index 0523c8b26a9095f6a6c3b44ecbfde0d1c530030c..add932295561f21ea76766afcc0bf422fa76ff4e 100644
--- a/ivette/src/dome/template/Application.ts.templ
+++ b/ivette/src/dome/template/Application.ts.templ
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/template/Preferences.ts.templ b/ivette/src/dome/template/Preferences.ts.templ
index 6d673ba4fecc1eabdae52c983ce34011fe62ed33..cd5832163d5dc8478d9d62580280e190752641a8 100644
--- a/ivette/src/dome/template/Preferences.ts.templ
+++ b/ivette/src/dome/template/Preferences.ts.templ
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/template/dome-pull.sh b/ivette/src/dome/template/dome-pull.sh
index 05425dcc289d1d516c9ad9c139cbc362b6506462..8c19b678aa234bf5074245e519b06fe5ad32a6f1 100755
--- a/ivette/src/dome/template/dome-pull.sh
+++ b/ivette/src/dome/template/dome-pull.sh
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/src/dome/template/dome-push.sh b/ivette/src/dome/template/dome-push.sh
index 1c25b8a92e6d52680c852cc7b91ac1b442322d74..04f793967f34060bb6dfde8da3b2eaf6056cc5ca 100755
--- a/ivette/src/dome/template/dome-push.sh
+++ b/ivette/src/dome/template/dome-push.sh
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/src/dome/template/export.sh b/ivette/src/dome/template/export.sh
index 95e8cf24d9eba9d852a646fad1982fd2f367afbe..2be7de68b8390e6744876cb2cdf15e104b2808b8 100755
--- a/ivette/src/dome/template/export.sh
+++ b/ivette/src/dome/template/export.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/src/dome/template/main.ts.templ b/ivette/src/dome/template/main.ts.templ
index f42bb3e586304a7d63d070b370456ae601bb9ba1..12a372c5eab0414b4586101df58e943a51df1a0c 100644
--- a/ivette/src/dome/template/main.ts.templ
+++ b/ivette/src/dome/template/main.ts.templ
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/template/makefile b/ivette/src/dome/template/makefile
index b9f40dc9c506f91e958cb89e3b6dab38fba7aeb2..314d39b9bd96acee1e467bb3fc90e8873899238f 100644
--- a/ivette/src/dome/template/makefile
+++ b/ivette/src/dome/template/makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/src/dome/template/makefile.app.packages b/ivette/src/dome/template/makefile.app.packages
index 7471ec1406f8a458cbd83f2638bc1a73f19358a6..7eb94eb0cceadbe8409daa298aba410556670697 100644
--- a/ivette/src/dome/template/makefile.app.packages
+++ b/ivette/src/dome/template/makefile.app.packages
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/src/dome/template/makefile.packages b/ivette/src/dome/template/makefile.packages
index 05007627e0ffb97e289b48e9b999d650adddcdd2..ba3fa7df3f6160b836499cb1329696c168061c2e 100644
--- a/ivette/src/dome/template/makefile.packages
+++ b/ivette/src/dome/template/makefile.packages
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -35,6 +35,8 @@ DOME_DEV_PACKAGES= \
 	@types/react-dom@^18 \
 	@types/react-virtualized@^9.21.8 \
 	@types/diff@^5 \
+	@types/d3-selection \
+	@types/d3-graphviz \
 	typescript@^5
 
 DOME_APP_PACKAGES= \
@@ -52,6 +54,10 @@ DOME_APP_PACKAGES= \
     @codemirror/state@6.4.0 \
     @codemirror/view@6.23.1 \
 	@lezer/cpp@^1 \
-	react-virtualized-auto-sizer@^1.0.22
+	react-virtualized-auto-sizer@^1.0.22 \
+	react-force-graph-2d@^1.25.4 \
+	react-force-graph-3d@^1.24.2 \
+	d3-selection@^3 \
+	d3-graphviz@^5
 
 # --------------------------------------------------------------------------
diff --git a/ivette/src/dome/template/package.sh b/ivette/src/dome/template/package.sh
index ddcd8a8b362b8565925050deca0b99b97e9d47e1..6b46d7aa499e98d4bae03d9a3a5d5e8f58d9c0c1 100755
--- a/ivette/src/dome/template/package.sh
+++ b/ivette/src/dome/template/package.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/src/dome/template/react-virtualized.hacked.onScroll.js b/ivette/src/dome/template/react-virtualized.hacked.onScroll.js
index e4f25a532d15a6c3c4cf7190961af34b0a18cbe6..13a5d04c355fbf179199c894441f387cca994510 100644
--- a/ivette/src/dome/template/react-virtualized.hacked.onScroll.js
+++ b/ivette/src/dome/template/react-virtualized.hacked.onScroll.js
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/template/renderer.ts.templ b/ivette/src/dome/template/renderer.ts.templ
index c10e89652077d05d791aed5f9f512b387ff4b9d6..7f65fc7be6a729692695ad5d972a8ca16dcd6fa3 100644
--- a/ivette/src/dome/template/renderer.ts.templ
+++ b/ivette/src/dome/template/renderer.ts.templ
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/dome/template/update.sh b/ivette/src/dome/template/update.sh
index b84992c0e90ba92ce1cc18967734c0c36a94573d..0fe9baed489e243487c5daa69bf2a9e0fbbc2cef 100755
--- a/ivette/src/dome/template/update.sh
+++ b/ivette/src/dome/template/update.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/ivette/src/frama-c/client.ts b/ivette/src/frama-c/client.ts
index 2cdada333dac013d3d1d5b9ec8c27600506b7e3a..1b85035cbe6ddff332f84a2236c1e20813f31cd6 100644
--- a/ivette/src/frama-c/client.ts
+++ b/ivette/src/frama-c/client.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/client_socket.ts b/ivette/src/frama-c/client_socket.ts
index 67c4da535611f54c88abf98bc3960620b4130fbd..2f50d744b25891a96f0b280b444304e85414843e 100644
--- a/ivette/src/frama-c/client_socket.ts
+++ b/ivette/src/frama-c/client_socket.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/index.tsx b/ivette/src/frama-c/index.tsx
index abc2b6bc1349f6a74822a63749fb22e40f2267c3..4e1db38c729e012431667c3997fe795b5ff4d1d9 100644
--- a/ivette/src/frama-c/index.tsx
+++ b/ivette/src/frama-c/index.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -28,7 +28,7 @@ import React from 'react';
 import * as Ivette from 'ivette';
 
 import History from 'frama-c/kernel/History';
-import { Functions, Globals, Types } from 'frama-c/kernel/Globals';
+import Globals from 'frama-c/kernel/Globals';
 import ASTview from 'frama-c/kernel/ASTview';
 import ASTinfo from 'frama-c/kernel/ASTinfo';
 import SourceCode from 'frama-c/kernel/SourceCode';
@@ -50,11 +50,9 @@ Menu.init();
 Ivette.registerSidebar({
   id: 'fc.kernel.globals',
   label: 'AST',
-  children: <>
-    <Types />
-    <Globals />
-    <Functions />
-  </>
+  icon: 'DUPLICATE',
+  title: 'Global Declarations (AST)',
+  children: <Globals />
 });
 
 Ivette.registerToolbar({
@@ -77,7 +75,7 @@ Ivette.registerGroup({
 });
 
 Ivette.registerComponent({
-  id: 'fc.kernel.serverlogs',
+  id: 'fc.server.serverlogs',
   label: 'Server Logs',
   title: 'Frama-C server output logs',
   children: <ServerLogs />
diff --git a/ivette/src/frama-c/kernel/ASTinfo.tsx b/ivette/src/frama-c/kernel/ASTinfo.tsx
index 393405a8968c035028f131793235c4572fb19f70..c2e6e7bb62261eebd51d001be2a04dfd496c80f7 100644
--- a/ivette/src/frama-c/kernel/ASTinfo.tsx
+++ b/ivette/src/frama-c/kernel/ASTinfo.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -143,7 +143,7 @@ function MarkInfos(props: InfoSectionProps): JSX.Element {
   const foreign = !!current && !!scope && current !== scope;
   const [unfold, setUnfold] = React.useState(true);
   const [expand, setExpand] = React.useState(false);
-  const markerFields = States.useRequest(Ast.getInformation, marker) ?? [];
+  const markerFields = States.useRequestValue(Ast.getInformation, marker);
   const isScrolled = marker === scrolled;
   const isHovered = marker === hovered;
   const isSelected = marker === selected;
@@ -273,7 +273,7 @@ export default function ASTinfo(): JSX.Element {
   const [setting, setSetting] = Dome.useStringSettings(filterSettings, '');
   const { scope: current, marker: selected } = States.useCurrentLocation();
   const hovered = States.useHovered();
-  const allFields = States.useRequest(Ast.getInformation, null) ?? [];
+  const allFields = States.useRequestValue(Ast.getInformation, null);
   const excluded = React.useMemo(() => makeFilter(setting), [setting]);
   Dome.useEvent(States.MetaSelection, (loc: States.Location) => {
     setMarkers(addMarker(markers, loc.marker));
diff --git a/ivette/src/frama-c/kernel/ASTview.tsx b/ivette/src/frama-c/kernel/ASTview.tsx
index e1092fa2e44f75f97c4a0665bd2e5a9277209806..96db99d2d781adf5db22db440ac9e2c5aa45a6ac 100644
--- a/ivette/src/frama-c/kernel/ASTview.tsx
+++ b/ivette/src/frama-c/kernel/ASTview.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -418,7 +418,7 @@ function getPropertiesNodes(tree: Tree): Node[] {
 // This aspect contains all the properties nodes, along with their tags.
 interface Property extends Node { tag: States.Tag }
 const PropertiesNodes = createPropertiesNodes();
-function createPropertiesNodes() : Editor.Aspect<Property[]> {
+function createPropertiesNodes(): Editor.Aspect<Property[]> {
   const deps = { tree: Tree, tags: Tags, statuses: PropertiesStatuses };
   return Editor.createAspect(deps, ({ tree, tags, statuses }) => {
     const nodes = getPropertiesNodes(tree);
@@ -494,9 +494,9 @@ function createPropertiesGutter(): Editor.Extension {
 type MarkerMenuExtender =
   (items: Dome.PopupMenuItem[], attr: Ast.markerAttributesData) => void;
 
-const MarkerMenuExtenders : MarkerMenuExtender[] = [];
+const MarkerMenuExtenders: MarkerMenuExtender[] = [];
 
-export function registerMarkerMenuExtender(e : MarkerMenuExtender) : void {
+export function registerMarkerMenuExtender(e: MarkerMenuExtender): void {
   MarkerMenuExtenders.push(e);
 }
 
@@ -530,7 +530,7 @@ function createContextMenuHandler(): Editor.Extension {
         const descr = `Calls to ${name}`;
         Lodash.forEach(groupedCallers, (group) => {
           const n = group.length;
-          const { call } : Eva.CallSite = group[0];
+          const { call }: Eva.CallSite = group[0];
           const { name: fct } = States.getDeclaration(call);
           const caller = `caller ${fct}`;
           const nsites = n > 1 ? `s (${n} call sites)` : '';
@@ -559,7 +559,8 @@ function createContextMenuHandler(): Editor.Extension {
         onClick: () => {
           const text = view.state.sliceDoc(node.from, node.to);
           if (text !== '') navigator.clipboard.writeText(text);
-      } });
+        }
+      });
       Dome.popupMenu(items);
       return;
     }
@@ -635,45 +636,32 @@ function createTaintTooltip(): Editor.Extension {
 
 // Server request handler returning the given function's text.
 function useAST(decl: Ast.decl | undefined): text {
-  return States.useRequest(
-    Ast.printDeclaration, decl || undefined,
-    { onError: [] }
-  ) ?? [];
+  return States.useRequestValue(Ast.printDeclaration, decl || undefined);
 }
 
 // Server request handler returning the given function's callers.
 function useCallers(decl: Decl): Eva.CallSite[] {
-  return States.useRequest(
-    Eva.getCallers, decl || undefined,
-    { onError: [] }
-  ) ?? [];
+  return States.useRequestValue(Eva.getCallers, decl || undefined);
 }
 
 // Server request handler returning the given function's callers.
 function useCallees(marker: Marker): Ast.decl[] {
-  return States.useRequest(
-    Eva.getCallees, marker || undefined,
-    { onError: [] }
-  ) ?? [];
+  return States.useRequestValue(Eva.getCallees, marker || undefined);
 }
 
 // Server request handler returning the tainted lvalues.
 function useTaints(decl: Decl): Eva.LvalueTaints[] {
-  return States.useRequest(Eva.taintedLvalues, decl, { onError: [] }) ?? [];
+  return States.useRequestValue(Eva.taintedLvalues, decl || undefined);
 }
 
 // Server request handler returning the given function's dead code information.
 function useDead(decl: Decl): Eva.deadCode {
-  return States.useRequest(
-    Eva.getDeadCode, decl || undefined,
-    { onError: emptyDeadCode }
-  ) ?? emptyDeadCode;
+  return States.useRequestValue(Eva.getDeadCode, decl || undefined)
+    ?? emptyDeadCode;
 }
 
 // -----------------------------------------------------------------------------
 
-
-
 // -----------------------------------------------------------------------------
 //  AST View component
 // -----------------------------------------------------------------------------
@@ -748,7 +736,7 @@ export default function ASTview(): JSX.Element {
       <TitleBar>
         <IconButton
           icon={icon}
-          onClick= {unFoldButtonClicked}
+          onClick={unFoldButtonClicked}
           title={title + ' all multi-line ACSL properties'}
           className="titlebar-thin-icon"
         />
diff --git a/ivette/src/frama-c/kernel/Globals.tsx b/ivette/src/frama-c/kernel/Globals.tsx
index 5e1df12a025ca4b299471fe74b386a54cb870af2..819ee2b202dfe6d3f117795ddaf4d2815bce7d60 100644
--- a/ivette/src/frama-c/kernel/Globals.tsx
+++ b/ivette/src/frama-c/kernel/Globals.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -31,6 +31,8 @@ import { classes } from 'dome/misc/utils';
 import { alpha } from 'dome/data/compare';
 import { Section, Item } from 'dome/frame/sidebars';
 import { Button } from 'dome/controls/buttons';
+import { Label } from 'dome/controls/labels';
+import InfiniteScroll from 'react-infinite-scroller';
 
 import * as Ivette from 'ivette';
 import * as Server from 'frama-c/server';
@@ -40,13 +42,14 @@ import * as Locations from 'frama-c/kernel/Locations';
 import { computationState } from 'frama-c/plugins/eva/api/general';
 import * as Eva from 'frama-c/plugins/eva/api/general';
 
+
 // --------------------------------------------------------------------------
 // --- Global Search Hints
 // --------------------------------------------------------------------------
 
 function globalHints(): Ivette.Hint[] {
   const globals = States.getSyncArray(Ast.declAttributes).getArray();
-  return globals.map((g : Ast.declAttributesData) => ({
+  return globals.map((g: Ast.declAttributesData) => ({
     id: g.decl,
     name: g.name,
     label: g.label,
@@ -54,7 +57,7 @@ function globalHints(): Ivette.Hint[] {
   }));
 }
 
-const globalMode : Ivette.SearchProps = {
+const globalMode: Ivette.SearchProps = {
   id: 'frama-c.kernel.globals',
   label: 'Globals',
   title: 'Lookup for Global Declarations',
@@ -94,15 +97,20 @@ function menuItem(label: string, [b, flip]: setting, enabled?: boolean)
 // --- Lists
 // --------------------------------------------------------------------------
 
-interface ListProps {
+interface InfiniteScrollableListProps {
+  scrollableParent: React.RefObject<HTMLDivElement>;
+}
+
+type ListProps = {
   name: string;
   total: number;
   filteringMenuItems: Dome.PopupMenuItem[];
   children: JSX.Element[];
-}
+} & InfiniteScrollableListProps
 
 function List(props: ListProps): JSX.Element {
-  const { name, total, filteringMenuItems, children } = props;
+  const [displayedCount, setDisplayedCount] = React.useState(100);
+  const { name, total, filteringMenuItems, children, scrollableParent } = props;
   const Name = name.charAt(0).toUpperCase() + name.slice(1);
   const count = children.length;
 
@@ -112,20 +120,39 @@ function List(props: ListProps): JSX.Element {
     onClick: () => Dome.popupMenu(filteringMenuItems),
   };
 
-  const noItems =
-    <div className='dome-xSideBarSection-content'>
-      <label className='globals-info'>
-        There is no {name} to display.
-      </label>
-    </div>;
-
-  const allFiltered =
-    <div className='dome-xSideBarSection-content'>
-      <label className='globals-info'>
-        All {name}s are filtered. Try adjusting {name} filters.
-      </label>
-      <Button {...filterButtonProps} label={`${Name}s filters`} />
-    </div>;
+  let contents;
+
+  if (count <= 0 && total > 0) {
+    contents =
+      <div className='dome-xSideBarSection-content'>
+        <label className='globals-info'>
+          All {name}s are filtered. Try adjusting {name} filters.
+        </label>
+        <Button {...filterButtonProps} label={`${Name}s filters`} />
+      </div>;
+  }
+  else if (total <= 0) {
+    contents =
+      <div className='dome-xSideBarSection-content'>
+        <label className='globals-info'>
+          There is no {name} to display.
+        </label>
+      </div>;
+  }
+  else {
+    contents =
+      // @ts-expect-error (incompatibility due to @types/react versions)
+      <InfiniteScroll
+        pageStart={0}
+        loadMore={() => setDisplayedCount(displayedCount + 100)}
+        hasMore={displayedCount < count}
+        loader={<Label key={-1}>Loading more...</Label>}
+        useWindow={false}
+        getScrollParent={() => scrollableParent.current}
+      >
+        {children.slice(0, displayedCount)}
+      </InfiniteScroll>;
+  }
 
   return (
     <Section
@@ -137,7 +164,7 @@ function List(props: ListProps): JSX.Element {
       summary={[count]}
       className='globals-section'
     >
-      {count > 0 ? children : total > 0 ? allFiltered : noItems}
+      {contents}
     </Section>
   );
 }
@@ -193,10 +220,12 @@ function computeFcts(
     const ef = eva.getData(kf.key);
     arr.push({ ...ef, ...kf });
   });
-  return arr.sort((f, g) => alpha(f.name, g.name));
+  return arr;
 }
 
-export function Functions(): JSX.Element {
+type FunctionProps = InfiniteScrollableListProps
+
+export function Functions(props: FunctionProps): JSX.Element {
 
   // Hooks
   const scope = States.useCurrentScope();
@@ -223,7 +252,7 @@ export function Functions(): JSX.Element {
   const multipleSelection: States.Scope[] =
     React.useMemo(
       () => markers.map((m) => getMarker(m)?.scope)
-      , [ getMarker, markers ]);
+      , [getMarker, markers]);
   const multipleSelectionActive = multipleSelection.length > 0;
   const evaComputed = States.useSyncValue(computationState) === 'computed';
 
@@ -245,9 +274,9 @@ export function Functions(): JSX.Element {
       && (extern[0] || !fct.extern)
       && (!multipleSelectionActive || !selected[0] || isSelected(fct))
       && (evaAnalyzed[0] || !evaComputed ||
-          !('eva_analyzed' in fct && fct.eva_analyzed === true))
+        !('eva_analyzed' in fct && fct.eva_analyzed === true))
       && (evaUnreached[0] || !evaComputed ||
-          ('eva_analyzed' in fct && fct.eva_analyzed === true));
+        ('eva_analyzed' in fct && fct.eva_analyzed === true));
     return !!visible;
   }
 
@@ -271,6 +300,7 @@ export function Functions(): JSX.Element {
   const items =
     fcts
       .filter(showFunction)
+      .sort((f, g) => alpha(f.name, g.name))
       .map((fct) => <FctItem key={fct.key} fct={fct} current={current} />);
 
   return (
@@ -278,6 +308,7 @@ export function Functions(): JSX.Element {
       name="function"
       total={fcts.length}
       filteringMenuItems={contextMenuItems}
+      scrollableParent={props.scrollableParent}
     >
       {items}
     </List>
@@ -304,7 +335,9 @@ function makeVarItem(
   );
 }
 
-export function Globals(): JSX.Element {
+type VariablesProps = InfiniteScrollableListProps
+
+export function Variables(props: VariablesProps): JSX.Element {
 
   // Hooks
   const scope = States.useCurrentScope();
@@ -367,6 +400,7 @@ export function Globals(): JSX.Element {
   const items =
     variables
       .filter(showVariable)
+      .sort((v1, v2) => alpha(v1.name, v2.name))
       .map((v) => makeVarItem(scope, v));
 
   return (
@@ -374,6 +408,7 @@ export function Globals(): JSX.Element {
       name="variable"
       total={variables.length}
       filteringMenuItems={contextMenuItems}
+      scrollableParent={props.scrollableParent}
     >
       {items}
     </List>
@@ -410,7 +445,7 @@ function makeItem(
 }
 
 export function Declarations(props: DeclarationsProps): JSX.Element {
-  const { id, label, title, filter, defaultUnfold=false } = props;
+  const { id, label, title, filter, defaultUnfold = false } = props;
   const settings = React.useMemo(() => `frama-c.sidebar.${id}`, [id]);
   const data = States.useSyncArrayData(Ast.declAttributes);
   const scope = States.useCurrentScope();
@@ -418,6 +453,7 @@ export function Declarations(props: DeclarationsProps): JSX.Element {
     () =>
       data
         .filter(filter)
+        .sort((d1, d2) => alpha(d1.name, d2.name))
         .map((d) => makeItem(scope, d))
     , [scope, data, filter]
   );
@@ -440,7 +476,7 @@ export function Declarations(props: DeclarationsProps): JSX.Element {
 // --------------------------------------------------------------------------
 
 const filterTypes = (d: Ast.declAttributesData): boolean => {
-  switch(d.kind) {
+  switch (d.kind) {
     case 'TYPE':
     case 'ENUM':
     case 'UNION':
@@ -463,3 +499,18 @@ export function Types(): JSX.Element {
 }
 
 // --------------------------------------------------------------------------
+// --- All globals
+// --------------------------------------------------------------------------
+
+export default function Globals(): JSX.Element {
+  const scrollableArea = React.useRef<HTMLDivElement>(null);
+  return (
+    <div ref={scrollableArea} className="globals-scrollable-area">
+      <Types />
+      <Variables scrollableParent={scrollableArea} />
+      <Functions scrollableParent={scrollableArea} />
+    </div>
+  );
+}
+
+// --------------------------------------------------------------------------
diff --git a/ivette/src/frama-c/kernel/History.tsx b/ivette/src/frama-c/kernel/History.tsx
index 114f9c2c1f5542982494f02a68f419a9988abe86..9fb63d7a8525de4057782ef64d76ab0192d77379 100644
--- a/ivette/src/frama-c/kernel/History.tsx
+++ b/ivette/src/frama-c/kernel/History.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/kernel/Locations.tsx b/ivette/src/frama-c/kernel/Locations.tsx
index 7a4298db2da151428b1826023a3ee751bb2a50ee..9907e21c2b73e71db685ef91ec588161ebe4dc15 100644
--- a/ivette/src/frama-c/kernel/Locations.tsx
+++ b/ivette/src/frama-c/kernel/Locations.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -60,15 +60,19 @@ export function useSelection(): MultiSelection {
   return s;
 }
 
-export function setSelection(s: MultiSelection): void {
+function updateSelection(s: MultiSelection): void {
   MultiSelection.setValue(s);
   const marker = s.index !== undefined ? s.markers[s.index] : undefined;
   if (marker) States.setSelected(marker);
+}
+
+export function setSelection(s: MultiSelection): void {
+  updateSelection(s);
   if (s.plugin && s.markers.length > 0) {
-    const label =
-      `${s.plugin}: ${s.markers.length} locations selected, \
-      listed in the 'Locations' panel`;
-    const title = `${s.label}: ${s.markers.length} locations selected`;
+    const label = `${s.plugin}: ${s.markers.length} locations selected`;
+    const title =
+      `${s.label}: ${s.markers.length} locations selected`
+      + `\nListed in the 'Locations' panel`;
     Display.showMessage({ label, title });
     Display.alertComponent('fc.kernel.locations');
   }
@@ -78,7 +82,7 @@ Server.onShutdown(() => MultiSelection.setValue(emptySelection));
 
 export function setIndex(index: number): void {
   const s = MultiSelection.getValue();
-  setSelection({ ...s, index });
+  updateSelection({ ...s, index });
 }
 
 function sameMarkers(xs: Ast.marker[], ys: Ast.marker[]): boolean {
@@ -104,9 +108,9 @@ export function setNextSelection(s: MultiSelection): void {
     const { index, markers } = selection;
     const target = index === undefined ? 0 : index + 1;
     const select = target < markers.length ? target : 0;
-    setSelection({ ...selection, index: select });
+    updateSelection({ ...selection, index: select });
   } else {
-    setSelection(s);
+    updateSelection(s);
   }
 }
 
@@ -117,7 +121,7 @@ export function clearSelection(): void {
 function gotoIndex(index: number): void {
   const selection = MultiSelection.getValue();
   if (0 <= index && index <= selection.markers.length)
-    setSelection({ ...selection, index });
+    updateSelection({ ...selection, index });
 }
 
 // --------------------------------------------------------------------------
diff --git a/ivette/src/frama-c/kernel/PivotTable.tsx b/ivette/src/frama-c/kernel/PivotTable.tsx
index fdf6b2c53e510794b1367082acbe9f200fdd7aab..252fe3f1c8bc4eb9aac9b33d7d01040b923b1ede 100644
--- a/ivette/src/frama-c/kernel/PivotTable.tsx
+++ b/ivette/src/frama-c/kernel/PivotTable.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/kernel/Properties.tsx b/ivette/src/frama-c/kernel/Properties.tsx
index 7aa7f20eee31b194f56aebc7daa6f394a35feb61..7ef5a8430092b4ac0b9655693b1130ca260513a3 100644
--- a/ivette/src/frama-c/kernel/Properties.tsx
+++ b/ivette/src/frama-c/kernel/Properties.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/kernel/ServerLogs.tsx b/ivette/src/frama-c/kernel/ServerLogs.tsx
index e62ff6098d6a46c5213387d9039bf9457e158f7c..cf473d0d6269024a6fd752bc968110bc9cdc8472 100644
--- a/ivette/src/frama-c/kernel/ServerLogs.tsx
+++ b/ivette/src/frama-c/kernel/ServerLogs.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -536,13 +536,13 @@ function computeDelta(log?: Log): void {
 // -------------------------------------------------------------------------
 
 export function RecordingLogs(): JSX.Element {
-  const { active } = Display.useComponentStatus('fc.kernel.serverlogs');
+  const { active } = Display.useComponentStatus('fc.server.serverlogs');
   const [isRecording] = useGlobalState(RECORDING);
   const onClick = (): void => RECORDING.setValue(!isRecording);
   return (
     <IconButton
-      kind={isRecording ? 'negative' : 'warning'}
-      icon={isRecording ? 'MEDIA.STOP' : 'MEDIA.PAUSE'}
+      kind={isRecording ? 'negative' : 'default'}
+      icon="MEDIA.HALT"
       display={active}
       onClick={onClick}
       title='Stop recording logs'
diff --git a/ivette/src/frama-c/kernel/SourceCode.tsx b/ivette/src/frama-c/kernel/SourceCode.tsx
index 6a51de3a66ca397035e8a796875d4356248fa8f8..c69b5084da75380dcddef525900a6d267f82f910 100644
--- a/ivette/src/frama-c/kernel/SourceCode.tsx
+++ b/ivette/src/frama-c/kernel/SourceCode.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -198,7 +198,7 @@ export default function SourceCode(): JSX.Element {
   const selectedMarkerLine = floc?.line ?? 0;
   const source = useSourceFileContents(file);
   const [cursor, setCursor] = React.useState<SourceCursor>(noCursor);
-  const markerAtCursor = States.useRequest(Ast.getMarkerAt, cursor);
+  const markerAtCursor = States.useRequestResponse(Ast.getMarkerAt, cursor);
   const { sloc: slocAtCursor } = States.useMarker(markerAtCursor);
 
   const openFile = React.useCallback(() => {
diff --git a/ivette/src/frama-c/kernel/api/ast/index.ts b/ivette/src/frama-c/kernel/api/ast/index.ts
index 65907b9357a70b0a5fc6ec0c8aeabc7431ecc2ef..8e936a7fb1e9094bce985769a4c4b55b2663a0e7 100644
--- a/ivette/src/frama-c/kernel/api/ast/index.ts
+++ b/ivette/src/frama-c/kernel/api/ast/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -51,6 +51,7 @@ const compute_internal: Server.ExecRequest<null,null> = {
   name: 'kernel.ast.compute',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Ensures that AST is computed */
@@ -186,6 +187,7 @@ const reloadDeclAttributes_internal: Server.GetRequest<null,null> = {
   name: 'kernel.ast.reloadDeclAttributes',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`declAttributes`](#declattributes)  */
@@ -205,6 +207,7 @@ const fetchDeclAttributes_internal: Server.GetRequest<
             updated: Json.jArray(jDeclAttributesData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`declAttributes`](#declattributes)  */
@@ -235,6 +238,7 @@ const printDeclaration_internal: Server.GetRequest<decl,text> = {
   name: 'kernel.ast.printDeclaration',
   input: jDecl,
   output: jText,
+  fallback: textDefault,
   signals: [ { name: 'kernel.ast.changed' } ],
 };
 /** Prints an AST Declaration */
@@ -335,6 +339,7 @@ const reloadMarkerAttributes_internal: Server.GetRequest<null,null> = {
   name: 'kernel.ast.reloadMarkerAttributes',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`markerAttributes`](#markerattributes)  */
@@ -354,6 +359,7 @@ const fetchMarkerAttributes_internal: Server.GetRequest<
             updated: Json.jArray(jMarkerAttributesData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`markerAttributes`](#markerattributes)  */
@@ -385,6 +391,7 @@ const getMainFunction_internal: Server.GetRequest<null,decl | undefined> = {
   name: 'kernel.ast.getMainFunction',
   input: Json.jNull,
   output: Json.jOption(jDecl),
+  fallback: undefined,
   signals: [],
 };
 /** Get the current 'main' function. */
@@ -395,6 +402,7 @@ const getFunctions_internal: Server.GetRequest<null,decl[]> = {
   name: 'kernel.ast.getFunctions',
   input: Json.jNull,
   output: Json.jArray(jDecl),
+  fallback: [],
   signals: [],
 };
 /** Collect all functions in the AST */
@@ -467,6 +475,7 @@ const reloadFunctions_internal: Server.GetRequest<null,null> = {
   name: 'kernel.ast.reloadFunctions',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`functions`](#functions)  */
@@ -486,6 +495,7 @@ const fetchFunctions_internal: Server.GetRequest<
             updated: Json.jArray(jFunctionsData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`functions`](#functions)  */
@@ -588,6 +598,7 @@ const reloadGlobals_internal: Server.GetRequest<null,null> = {
   name: 'kernel.ast.reloadGlobals',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`globals`](#globals)  */
@@ -607,6 +618,7 @@ const fetchGlobals_internal: Server.GetRequest<
             updated: Json.jArray(jGlobalsData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`globals`](#globals)  */
@@ -654,6 +666,7 @@ const getInformation_internal: Server.GetRequest<
               descr: Json.jString,
               text: jText,
             })),
+  fallback: [],
   signals: [ { name: 'kernel.ast.getInformationUpdate' } ],
 };
 /** Get available information about markers. When no marker is given, returns all kinds of information (with empty `descr` field). */
@@ -676,6 +689,7 @@ const getMarkerAt_internal: Server.GetRequest<
            column: Json.jNumber,
          }),
   output: Json.jOption(jMarker),
+  fallback: undefined,
   signals: [ { name: 'kernel.ast.changed' } ],
 };
 /** Returns the marker and function at a source file position, if any. Input: file path, line and column. File can be empty, in case no marker is returned. */
@@ -690,6 +704,7 @@ const getFiles_internal: Server.GetRequest<null,string[]> = {
   name: 'kernel.ast.getFiles',
   input: Json.jNull,
   output: Json.jArray(Json.jString),
+  fallback: [],
   signals: [],
 };
 /** Get the currently analyzed source file names */
@@ -700,6 +715,7 @@ const setFiles_internal: Server.SetRequest<string[],null> = {
   name: 'kernel.ast.setFiles',
   input: Json.jArray(Json.jString),
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Set the source file names to analyze. */
@@ -713,6 +729,7 @@ const parseExpr_internal: Server.GetRequest<
   name: 'kernel.ast.parseExpr',
   input: Json.jObject({ stmt: jMarker, term: Json.jString,}),
   output: jMarker,
+  fallback: markerDefault,
   signals: [],
 };
 /** Parse a C expression and returns the associated marker */
@@ -729,6 +746,7 @@ const parseLval_internal: Server.GetRequest<
   name: 'kernel.ast.parseLval',
   input: Json.jObject({ stmt: jMarker, term: Json.jString,}),
   output: jMarker,
+  fallback: markerDefault,
   signals: [],
 };
 /** Parse a C lvalue and returns the associated marker */
diff --git a/ivette/src/frama-c/kernel/api/data/index.ts b/ivette/src/frama-c/kernel/api/data/index.ts
index 6cd1ba463a9e6cd9b0b92bc645a9a1cc94478467..66cd50ef062b0f0fd115054a80f72818bea1cef4 100644
--- a/ivette/src/frama-c/kernel/api/data/index.ts
+++ b/ivette/src/frama-c/kernel/api/data/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/kernel/api/project/index.ts b/ivette/src/frama-c/kernel/api/project/index.ts
index e65c4d93e077e3d66c67b1327dce57c914e076f6..e111b68e69d869c6030a8444f80bbf14934d25b6 100644
--- a/ivette/src/frama-c/kernel/api/project/index.ts
+++ b/ivette/src/frama-c/kernel/api/project/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -68,6 +68,7 @@ const getList_internal: Server.GetRequest<null,projectInfo[]> = {
   name: 'kernel.project.getList',
   input: Json.jNull,
   output: Json.jArray(jProjectInfo),
+  fallback: [],
   signals: [],
 };
 /** Returns the list of all projects */
@@ -78,6 +79,7 @@ const create_internal: Server.SetRequest<string,projectInfo> = {
   name: 'kernel.project.create',
   input: Json.jString,
   output: jProjectInfo,
+  fallback: projectInfoDefault,
   signals: [],
 };
 /** Create a new project */
diff --git a/ivette/src/frama-c/kernel/api/properties/index.ts b/ivette/src/frama-c/kernel/api/properties/index.ts
index da82af1774b8290511d55975a7f7a57716b1abee..9a6e1bc5c5a2b2c36833ac03a18d27b30912778e 100644
--- a/ivette/src/frama-c/kernel/api/properties/index.ts
+++ b/ivette/src/frama-c/kernel/api/properties/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -158,6 +158,7 @@ const propKindTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'kernel.properties.propKindTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -204,6 +205,7 @@ const propStatusTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'kernel.properties.propStatusTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -261,6 +263,7 @@ const alarmsTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'kernel.properties.alarmsTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -337,6 +340,7 @@ const reloadStatus_internal: Server.GetRequest<null,null> = {
   name: 'kernel.properties.reloadStatus',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`status`](#status)  */
@@ -356,6 +360,7 @@ const fetchStatus_internal: Server.GetRequest<
             updated: Json.jArray(jStatusData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`status`](#status)  */
diff --git a/ivette/src/frama-c/kernel/api/services/index.ts b/ivette/src/frama-c/kernel/api/services/index.ts
index 817dbfed4915dc604a294c026ce513226fe87f0c..d4e700d3831fcbe4152fb91d2102cd899b975cbd 100644
--- a/ivette/src/frama-c/kernel/api/services/index.ts
+++ b/ivette/src/frama-c/kernel/api/services/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -82,6 +82,7 @@ const getConfig_internal: Server.GetRequest<
             datadir: Json.jArray(Json.jString),
             pluginpath: Json.jArray(Json.jString),
           }),
+  fallback: { version: '', datadir: [], pluginpath: [] },
   signals: [],
 };
 /** Frama-C Kernel configuration */
@@ -95,6 +96,7 @@ const load_internal: Server.SetRequest<string,string | undefined> = {
   name: 'kernel.services.load',
   input: Json.jString,
   output: Json.jOption(Json.jString),
+  fallback: undefined,
   signals: [],
 };
 /** Load a save file. Returns an error, if not successfull. */
@@ -105,6 +107,7 @@ const save_internal: Server.SetRequest<string,string | undefined> = {
   name: 'kernel.services.save',
   input: Json.jString,
   output: Json.jOption(Json.jString),
+  fallback: undefined,
   signals: [],
 };
 /** Save the current session. Returns an error, if not successfull. */
@@ -140,6 +143,7 @@ const logkindTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'kernel.services.logkindTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -204,6 +208,7 @@ const reloadMessage_internal: Server.GetRequest<null,null> = {
   name: 'kernel.services.reloadMessage',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`message`](#message)  */
@@ -223,6 +228,7 @@ const fetchMessage_internal: Server.GetRequest<
             updated: Json.jArray(jMessageData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`message`](#message)  */
@@ -295,6 +301,7 @@ const setLogs_internal: Server.SetRequest<boolean,null> = {
   name: 'kernel.services.setLogs',
   input: Json.jBoolean,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Turn logs monitoring on/off */
@@ -305,6 +312,7 @@ const getLogs_internal: Server.GetRequest<null,log[]> = {
   name: 'kernel.services.getLogs',
   input: Json.jNull,
   output: Json.jArray(jLog),
+  fallback: [],
   signals: [],
 };
 /** Flush the last emitted logs since last call (max 100) */
diff --git a/ivette/src/frama-c/kernel/style.css b/ivette/src/frama-c/kernel/style.css
index d9e59c1d7b91c05ddc8f2e7d7a83d87b8b4e8f20..db351090b3fe8f2132e0ee0593be75505b230d35 100644
--- a/ivette/src/frama-c/kernel/style.css
+++ b/ivette/src/frama-c/kernel/style.css
@@ -64,6 +64,13 @@
 /* --- Globals                                                            --- */
 /* -------------------------------------------------------------------------- */
 
+.globals-scrollable-area {
+    width: 100%;
+    height: 100%;
+    overflow-x: hidden;
+    overflow-y: scroll;
+}
+
 .globals-info {
     color: var(--info-text-discrete);
     font-style: italic;
diff --git a/ivette/src/frama-c/menu.ts b/ivette/src/frama-c/menu.ts
index bcb5ae8c7e509b8a70345cd11ec069ebcf779f87..4e2da60c4fbf195dc201a984c853ca8830e7f629 100644
--- a/ivette/src/frama-c/menu.ts
+++ b/ivette/src/frama-c/menu.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/callgraph/api/index.ts b/ivette/src/frama-c/plugins/callgraph/api/index.ts
index b436e192c03efc1a0655924ea548c226c4c7437b..1cbea161542c8a67dd8f057f2641aad72b5094a0 100644
--- a/ivette/src/frama-c/plugins/callgraph/api/index.ts
+++ b/ivette/src/frama-c/plugins/callgraph/api/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -112,6 +112,7 @@ const edgeKindTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'plugins.callgraph.edgeKindTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -176,6 +177,7 @@ const getCallgraph_internal: Server.GetRequest<null,graph | undefined> = {
   name: 'plugins.callgraph.getCallgraph',
   input: Json.jNull,
   output: Json.jOption(jGraph),
+  fallback: undefined,
   signals: [],
 };
 /** Getter for state [`callgraph`](#callgraph)  */
@@ -199,6 +201,7 @@ const getIsComputed_internal: Server.GetRequest<null,boolean> = {
   name: 'plugins.callgraph.getIsComputed',
   input: Json.jNull,
   output: Json.jBoolean,
+  fallback: false,
   signals: [],
 };
 /** Getter for state [`isComputed`](#iscomputed)  */
@@ -217,6 +220,7 @@ const compute_internal: Server.ExecRequest<null,null> = {
   name: 'plugins.callgraph.compute',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Compute the callgraph for the current project */
diff --git a/ivette/src/frama-c/plugins/callgraph/index.tsx b/ivette/src/frama-c/plugins/callgraph/index.tsx
index 3682d59a0d04639f59aacac7128c33469fdfe148..a4450256bf6071dbe1529bd6c2b9bc2d9bef7813 100644
--- a/ivette/src/frama-c/plugins/callgraph/index.tsx
+++ b/ivette/src/frama-c/plugins/callgraph/index.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -120,9 +120,7 @@ function Callgraph() : JSX.Element {
   const graph = States.useSyncValue(CgAPI.callgraph);
   const [cy, setCy] = React.useState<Cy.Core>();
   const [cs] = useGlobalState(CallstackState);
-  const callstack = States.useRequest(
-    ValuesAPI.getCallstackInfo, cs, { onError: [] }
-  );
+  const callstack = States.useRequestValue(ValuesAPI.getCallstackInfo, cs);
   const scope = States.useCurrentScope();
   const layout = { name: 'cola', nodeSpacing: 32 };
   const computedStyle = getComputedStyle(document.documentElement);
@@ -142,7 +140,7 @@ function Callgraph() : JSX.Element {
 
   // Callstack selection
   React.useEffect(() => {
-    cy && selectCallstack(cy, callstack ?? []);
+    cy && selectCallstack(cy, callstack);
   }, [cy, callstack]);
 
   // Click on graph
diff --git a/ivette/src/frama-c/plugins/dive/api/index.ts b/ivette/src/frama-c/plugins/dive/api/index.ts
index 8d71030cfd4332848ac1036ab6210b806161af25..9305025278bf9c5b2dc982cc8c362e7d040f15f9 100644
--- a/ivette/src/frama-c/plugins/dive/api/index.ts
+++ b/ivette/src/frama-c/plugins/dive/api/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -212,6 +212,7 @@ const nodeKindTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'plugins.dive.nodeKindTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -241,6 +242,7 @@ const taintTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'plugins.dive.taintTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -272,6 +274,7 @@ const explorationTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'plugins.dive.explorationTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -304,6 +307,7 @@ const nodeSpecialRangeTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'plugins.dive.nodeSpecialRangeTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -478,6 +482,7 @@ const reloadGraph_internal: Server.GetRequest<null,null> = {
   name: 'plugins.dive.reloadGraph',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`graph`](#graph)  */
@@ -497,6 +502,7 @@ const fetchGraph_internal: Server.GetRequest<
             updated: Json.jArray(jGraphData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`graph`](#graph)  */
@@ -526,6 +532,7 @@ const window_internal: Server.SetRequest<explorationWindow,null> = {
   name: 'plugins.dive.window',
   input: jExplorationWindow,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Set the exploration window */
@@ -536,6 +543,7 @@ const clear_internal: Server.ExecRequest<null,null> = {
   name: 'plugins.dive.clear',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Erase the graph and start over with an empty one */
@@ -546,6 +554,7 @@ const add_internal: Server.ExecRequest<marker,nodeId | undefined> = {
   name: 'plugins.dive.add',
   input: jMarker,
   output: Json.jOption(jNodeId),
+  fallback: undefined,
   signals: [],
 };
 /** Add a node to the graph */
@@ -556,6 +565,7 @@ const explore_internal: Server.ExecRequest<nodeId,null> = {
   name: 'plugins.dive.explore',
   input: jNodeId,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Explore the graph starting from an existing vertex */
@@ -566,6 +576,7 @@ const show_internal: Server.ExecRequest<nodeId,null> = {
   name: 'plugins.dive.show',
   input: jNodeId,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Show the dependencies of an existing vertex */
@@ -576,6 +587,7 @@ const hide_internal: Server.ExecRequest<nodeId,null> = {
   name: 'plugins.dive.hide',
   input: jNodeId,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Hide the dependencies of an existing vertex */
diff --git a/ivette/src/frama-c/plugins/dive/cytoscape_libs.js b/ivette/src/frama-c/plugins/dive/cytoscape_libs.js
index 28756f2edaaf5b6420f845bfc9e3f23705110169..759de06b8057ec335276425d8afb0403ad18d257 100644
--- a/ivette/src/frama-c/plugins/dive/cytoscape_libs.js
+++ b/ivette/src/frama-c/plugins/dive/cytoscape_libs.js
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/dive/graph.tsx b/ivette/src/frama-c/plugins/dive/graph.tsx
index c19d1be03e8ead99bd57d8c78ab4df7bf772b78d..a2d5d1564ddd797f42c8ab7856eee1eb78abed47 100644
--- a/ivette/src/frama-c/plugins/dive/graph.tsx
+++ b/ivette/src/frama-c/plugins/dive/graph.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/dive/index.tsx b/ivette/src/frama-c/plugins/dive/index.tsx
index 3cd2361172b2825d82388accaee243736b270288..a03b44140d75dcf9e911a4b4263bac5ff9f46615 100644
--- a/ivette/src/frama-c/plugins/dive/index.tsx
+++ b/ivette/src/frama-c/plugins/dive/index.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/dive/legend.tsx b/ivette/src/frama-c/plugins/dive/legend.tsx
index ff8918adeb7633a407c426d0dd4fc956850dee6e..4ba6452db73c7f14fca91bb5f1127d243deccb02 100644
--- a/ivette/src/frama-c/plugins/dive/legend.tsx
+++ b/ivette/src/frama-c/plugins/dive/legend.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/dive/react-cytoscapejs.d.ts b/ivette/src/frama-c/plugins/dive/react-cytoscapejs.d.ts
index 303ecbefbaeb4f8e2d61384da90f208bf5c9a8e4..fc4d2717258121687db9873214e252e8e39a081f 100644
--- a/ivette/src/frama-c/plugins/dive/react-cytoscapejs.d.ts
+++ b/ivette/src/frama-c/plugins/dive/react-cytoscapejs.d.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/dive/tree.tsx b/ivette/src/frama-c/plugins/dive/tree.tsx
index c790bdb0d0b5b1f14e3b170c07243dcd0fee0915..d73e80961dab13d4457aee4ef5e2e11a7e870adf 100644
--- a/ivette/src/frama-c/plugins/dive/tree.tsx
+++ b/ivette/src/frama-c/plugins/dive/tree.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/eva/Coverage.tsx b/ivette/src/frama-c/plugins/eva/Coverage.tsx
index 22dae9fb93553f421c3fa64e99f2c94913b8507d..92c6c2050ead5a3f8b68bd9f141317f548be8d98 100644
--- a/ivette/src/frama-c/plugins/eva/Coverage.tsx
+++ b/ivette/src/frama-c/plugins/eva/Coverage.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/eva/CoverageMeter.tsx b/ivette/src/frama-c/plugins/eva/CoverageMeter.tsx
index fe6bcd419683c8c3b24736818d28ec88cf8472fc..a658ce768da62862cc62896fcd8119327b74e2b8 100644
--- a/ivette/src/frama-c/plugins/eva/CoverageMeter.tsx
+++ b/ivette/src/frama-c/plugins/eva/CoverageMeter.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/eva/DomainStates.tsx b/ivette/src/frama-c/plugins/eva/DomainStates.tsx
index 3a820f397aac684082d168256496501e6bda89d7..e06725e6f2e002ecc4fc224cadfe451dca10b882 100644
--- a/ivette/src/frama-c/plugins/eva/DomainStates.tsx
+++ b/ivette/src/frama-c/plugins/eva/DomainStates.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -44,7 +44,7 @@ export function EvaStates(): JSX.Element {
   const [filter, setFilter] = useGlobalState(globalFilter);
 
   const requestArg = marker ? [marker, filter] : undefined;
-  const states = States.useRequest(Eva.getStates, requestArg);
+  const states = States.useRequestResponse(Eva.getStates, requestArg);
 
   React.useEffect(() => {
     if (states && states.length > 0) {
diff --git a/ivette/src/frama-c/plugins/eva/EvaReady/index.tsx b/ivette/src/frama-c/plugins/eva/EvaReady/index.tsx
index 74d2b5457b261aac307de10b77c66d90240798ae..17489a957e59cc890275909aa7ede00823ed8769 100644
--- a/ivette/src/frama-c/plugins/eva/EvaReady/index.tsx
+++ b/ivette/src/frama-c/plugins/eva/EvaReady/index.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/eva/Summary.tsx b/ivette/src/frama-c/plugins/eva/Summary.tsx
index 1bb326faa5e29a7e0e3c58beff1674152e77868a..9dcf7faf8191938a6aa1cc044f4611c2ecfa7181 100644
--- a/ivette/src/frama-c/plugins/eva/Summary.tsx
+++ b/ivette/src/frama-c/plugins/eva/Summary.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/eva/api/general/index.ts b/ivette/src/frama-c/plugins/eva/api/general/index.ts
index 7f18915ca118b6d3d7a0c85babccaea7b8d8790c..2e5a1eec5f83acdd15aae5b839502f64946bfe86 100644
--- a/ivette/src/frama-c/plugins/eva/api/general/index.ts
+++ b/ivette/src/frama-c/plugins/eva/api/general/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -96,6 +96,7 @@ const getComputationState_internal: Server.GetRequest<
   name: 'plugins.eva.general.getComputationState',
   input: Json.jNull,
   output: jComputationStateType,
+  fallback: computationStateTypeDefault,
   signals: [],
 };
 /** Getter for state [`computationState`](#computationstate)  */
@@ -136,6 +137,7 @@ const getCallers_internal: Server.GetRequest<decl,CallSite[]> = {
   name: 'plugins.eva.general.getCallers',
   input: jDecl,
   output: Json.jArray(jCallSite),
+  fallback: [],
   signals: [ { name: 'plugins.eva.general.signalComputationState' } ],
 };
 /** Get the list of call sites for a function */
@@ -146,6 +148,7 @@ const getCallees_internal: Server.GetRequest<marker,decl[]> = {
   name: 'plugins.eva.general.getCallees',
   input: jMarker,
   output: Json.jArray(jDecl),
+  fallback: [],
   signals: [ { name: 'plugins.eva.general.signalComputationState' } ],
 };
 /** Return the functions pointed to by a function pointer */
@@ -184,6 +187,7 @@ const reloadFunctions_internal: Server.GetRequest<null,null> = {
   name: 'plugins.eva.general.reloadFunctions',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`functions`](#functions)  */
@@ -203,6 +207,7 @@ const fetchFunctions_internal: Server.GetRequest<
             updated: Json.jArray(jFunctionsData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`functions`](#functions)  */
@@ -263,6 +268,7 @@ const getDeadCode_internal: Server.GetRequest<decl,deadCode | undefined> = {
   name: 'plugins.eva.general.getDeadCode',
   input: jDecl,
   output: Json.jOption(jDeadCode),
+  fallback: undefined,
   signals: [ { name: 'plugins.eva.general.signalComputationState' } ],
 };
 /** Get the lists of unreachable and of non terminating statements in a function */
@@ -304,6 +310,7 @@ const taintStatusTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'plugins.eva.general.taintStatusTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -338,6 +345,7 @@ const taintedLvalues_internal: Server.GetRequest<decl,LvalueTaints[]> = {
   name: 'plugins.eva.general.taintedLvalues',
   input: jDecl,
   output: Json.jArray(jLvalueTaints),
+  fallback: [],
   signals: [ { name: 'plugins.eva.general.signalComputationState' } ],
 };
 /** Get the tainted lvalues of a given function */
@@ -377,6 +385,7 @@ const reloadProperties_internal: Server.GetRequest<null,null> = {
   name: 'plugins.eva.general.reloadProperties',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`properties`](#properties)  */
@@ -396,6 +405,7 @@ const fetchProperties_internal: Server.GetRequest<
             updated: Json.jArray(jPropertiesData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`properties`](#properties)  */
@@ -461,6 +471,7 @@ const alarmCategoryTags_internal: Server.GetRequest<null,tag[]> = {
   name: 'plugins.eva.general.alarmCategoryTags',
   input: Json.jNull,
   output: Json.jArray(jTag),
+  fallback: [],
   signals: [],
 };
 /** Registered tags for the above type. */
@@ -598,6 +609,7 @@ const getProgramStats_internal: Server.GetRequest<null,programStatsType> = {
   name: 'plugins.eva.general.getProgramStats',
   input: Json.jNull,
   output: jProgramStatsType,
+  fallback: programStatsTypeDefault,
   signals: [],
 };
 /** Getter for state [`programStats`](#programstats)  */
@@ -662,6 +674,7 @@ const reloadFunctionStats_internal: Server.GetRequest<null,null> = {
   name: 'plugins.eva.general.reloadFunctionStats',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`functionStats`](#functionstats)  */
@@ -681,6 +694,7 @@ const fetchFunctionStats_internal: Server.GetRequest<
             updated: Json.jArray(jFunctionStatsData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`functionStats`](#functionstats)  */
@@ -715,6 +729,7 @@ const getStates_internal: Server.GetRequest<
   input: Json.jPair( jMarker, Json.jBoolean,),
   output: Json.jArray(
             Json.jTriple( Json.jString, Json.jString, Json.jString,)),
+  fallback: [],
   signals: [ { name: 'plugins.eva.general.signalComputationState' } ],
 };
 /** Get the domain states about the given marker */
diff --git a/ivette/src/frama-c/plugins/eva/api/values/index.ts b/ivette/src/frama-c/plugins/eva/api/values/index.ts
index 26435c8173c9a2c32c156f992225a67d0f8dc7a7..e5dfbd41bb73978a2bcc2adb8f5665c168cf6977 100644
--- a/ivette/src/frama-c/plugins/eva/api/values/index.ts
+++ b/ivette/src/frama-c/plugins/eva/api/values/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -106,6 +106,7 @@ const getCallstacks_internal: Server.GetRequest<marker[],callstack[]> = {
   name: 'plugins.eva.values.getCallstacks',
   input: Json.jArray(jMarker),
   output: Json.jArray(jCallstack),
+  fallback: [],
   signals: [],
 };
 /** Callstacks for markers */
@@ -116,6 +117,7 @@ const getCallstackInfo_internal: Server.GetRequest<callstack,callsite[]> = {
   name: 'plugins.eva.values.getCallstackInfo',
   input: jCallstack,
   output: Json.jArray(jCallsite),
+  fallback: [],
   signals: [],
 };
 /** Callstack Description */
@@ -129,6 +131,7 @@ const getStmtInfo_internal: Server.GetRequest<
   name: 'plugins.eva.values.getStmtInfo',
   input: jMarker,
   output: Json.jObject({ fct: Json.jString, rank: Json.jNumber,}),
+  fallback: { fct: '', rank: 0 },
   signals: [],
 };
 /** Stmt Information */
@@ -152,6 +155,8 @@ const getProbeInfo_internal: Server.GetRequest<
             effects: Json.jBoolean,
             condition: Json.jBoolean,
           }),
+  fallback: { evaluable: false, code: undefined, stmt: undefined,
+              effects: false, condition: false },
   signals: [],
 };
 /** Probe informations */
@@ -216,6 +221,8 @@ const getValues_internal: Server.GetRequest<
             vThen: Json.jOption(jEvaluation),
             vElse: Json.jOption(jEvaluation),
           }),
+  fallback: { vBefore: undefined, vAfter: undefined, vThen: undefined,
+              vElse: undefined },
   signals: [],
 };
 /** Abstract values for the given marker */
diff --git a/ivette/src/frama-c/plugins/eva/images/index.d.ts b/ivette/src/frama-c/plugins/eva/images/index.d.ts
index d3c9c86538519ab02ba80e8c8bf14788c2484549..280f867b1627df006b788e79c7254b35ffd306f6 100644
--- a/ivette/src/frama-c/plugins/eva/images/index.d.ts
+++ b/ivette/src/frama-c/plugins/eva/images/index.d.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/eva/index.tsx b/ivette/src/frama-c/plugins/eva/index.tsx
index 5619bcb791a178d5ab4e968d672e3c73adf991ba..1aced6c446efa710f2a9ce3c002b7cc4a5aaf6cf 100644
--- a/ivette/src/frama-c/plugins/eva/index.tsx
+++ b/ivette/src/frama-c/plugins/eva/index.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -46,7 +46,7 @@ Ivette.registerView({
   layout: {
     'A': 'fc.eva.summary',
     'B': 'fc.eva.coverage',
-    'CD': 'ivette.messages',
+    'CD': 'fc.kernel.messages',
   },
 });
 
diff --git a/ivette/src/frama-c/plugins/eva/valuetable.tsx b/ivette/src/frama-c/plugins/eva/valuetable.tsx
index 20862aeedbd34a6a2469867bb7bef855ecfbf7d4..5c8c647d351010391486fa557421d95421657277 100644
--- a/ivette/src/frama-c/plugins/eva/valuetable.tsx
+++ b/ivette/src/frama-c/plugins/eva/valuetable.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/pivot/api/general/index.ts b/ivette/src/frama-c/plugins/pivot/api/general/index.ts
index 363f2b17bb4cbd58409406b4110d5328693bae37..92549423c3c05d29ca04b1038f0aa69853fe4223 100644
--- a/ivette/src/frama-c/plugins/pivot/api/general/index.ts
+++ b/ivette/src/frama-c/plugins/pivot/api/general/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -62,6 +62,7 @@ const getPivotState_internal: Server.GetRequest<null,tableStateType> = {
   name: 'plugins.pivot.general.getPivotState',
   input: Json.jNull,
   output: jTableStateType,
+  fallback: tableStateTypeDefault,
   signals: [],
 };
 /** Getter for state [`pivotState`](#pivotstate)  */
@@ -80,6 +81,7 @@ const compute_internal: Server.ExecRequest<null,null> = {
   name: 'plugins.pivot.general.compute',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Computes the pivot table. */
diff --git a/ivette/src/frama-c/plugins/region/api/index.ts b/ivette/src/frama-c/plugins/region/api/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5d01bdbe22ac529ecefaa43e5a11963c12441397
--- /dev/null
+++ b/ivette/src/frama-c/plugins/region/api/index.ts
@@ -0,0 +1,199 @@
+/* ************************************************************************ */
+/*                                                                          */
+/*   This file is part of Frama-C.                                          */
+/*                                                                          */
+/*   Copyright (C) 2007-2024                                                */
+/*     CEA (Commissariat à l'énergie atomique et aux énergies               */
+/*          alternatives)                                                   */
+/*                                                                          */
+/*   you can redistribute it and/or modify it under the terms of the GNU    */
+/*   Lesser General Public License as published by the Free Software        */
+/*   Foundation, version 2.1.                                               */
+/*                                                                          */
+/*   It is distributed in the hope that it will be useful,                  */
+/*   but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
+/*   GNU Lesser General Public License for more details.                    */
+/*                                                                          */
+/*   See the GNU Lesser General Public License version 2.1                  */
+/*   for more details (enclosed in the file licenses/LGPLv2.1).             */
+/*                                                                          */
+/* ************************************************************************ */
+
+/* --- Generated Frama-C Server API --- */
+
+/**
+   Region Analysis
+   @packageDocumentation
+   @module frama-c/plugins/region/api
+*/
+
+//@ts-ignore
+import * as Json from 'dome/data/json';
+//@ts-ignore
+import * as Compare from 'dome/data/compare';
+//@ts-ignore
+import * as Server from 'frama-c/server';
+//@ts-ignore
+import * as State from 'frama-c/states';
+
+//@ts-ignore
+import { byDecl } from 'frama-c/kernel/api/ast';
+//@ts-ignore
+import { byMarker } from 'frama-c/kernel/api/ast';
+//@ts-ignore
+import { decl } from 'frama-c/kernel/api/ast';
+//@ts-ignore
+import { declDefault } from 'frama-c/kernel/api/ast';
+//@ts-ignore
+import { jDecl } from 'frama-c/kernel/api/ast';
+//@ts-ignore
+import { jMarker } from 'frama-c/kernel/api/ast';
+//@ts-ignore
+import { marker } from 'frama-c/kernel/api/ast';
+//@ts-ignore
+import { markerDefault } from 'frama-c/kernel/api/ast';
+
+export type node = Json.index<'#node'>;
+
+/** Decoder for `node` */
+export const jNode: Json.Decoder<node> = Json.jIndex<'#node'>('#node');
+
+/** Natural order for `node` */
+export const byNode: Compare.Order<node> = Compare.number;
+
+/** Default value for `node` */
+export const nodeDefault: node = Json.jIndex<'#node'>('#node')(-1);
+
+export type range =
+  { offset: number, length: number, cells: number, data: node };
+
+/** Decoder for `range` */
+export const jRange: Json.Decoder<range> =
+  Json.jObject({
+    offset: Json.jNumber,
+    length: Json.jNumber,
+    cells: Json.jNumber,
+    data: jNode,
+  });
+
+/** Natural order for `range` */
+export const byRange: Compare.Order<range> =
+  Compare.byFields
+    <{ offset: number, length: number, cells: number, data: node }>({
+    offset: Compare.number,
+    length: Compare.number,
+    cells: Compare.number,
+    data: byNode,
+  });
+
+/** Default value for `range` */
+export const rangeDefault: range =
+  { offset: 0, length: 0, cells: 0, data: nodeDefault };
+
+export type region =
+  { node: node, roots: string[], labels: string[], parents: node[],
+    sizeof: number, ranges: range[], pointed?: node, reads: boolean,
+    writes: boolean, bytes: boolean, label: string, title: string };
+
+/** Decoder for `region` */
+export const jRegion: Json.Decoder<region> =
+  Json.jObject({
+    node: jNode,
+    roots: Json.jArray(Json.jString),
+    labels: Json.jArray(Json.jString),
+    parents: Json.jArray(jNode),
+    sizeof: Json.jNumber,
+    ranges: Json.jArray(jRange),
+    pointed: Json.jOption(jNode),
+    reads: Json.jBoolean,
+    writes: Json.jBoolean,
+    bytes: Json.jBoolean,
+    label: Json.jString,
+    title: Json.jString,
+  });
+
+/** Natural order for `region` */
+export const byRegion: Compare.Order<region> =
+  Compare.byFields
+    <{ node: node, roots: string[], labels: string[], parents: node[],
+       sizeof: number, ranges: range[], pointed?: node, reads: boolean,
+       writes: boolean, bytes: boolean, label: string, title: string }>({
+    node: byNode,
+    roots: Compare.array(Compare.alpha),
+    labels: Compare.array(Compare.alpha),
+    parents: Compare.array(byNode),
+    sizeof: Compare.number,
+    ranges: Compare.array(byRange),
+    pointed: Compare.defined(byNode),
+    reads: Compare.boolean,
+    writes: Compare.boolean,
+    bytes: Compare.boolean,
+    label: Compare.string,
+    title: Compare.string,
+  });
+
+/** Default value for `region` */
+export const regionDefault: region =
+  { node: nodeDefault, roots: [], labels: [], parents: [], sizeof: 0,
+    ranges: [], pointed: undefined, reads: false, writes: false,
+    bytes: false, label: '', title: '' };
+
+/** Region Analysis Updated */
+export const updated: Server.Signal = {
+  name: 'plugins.region.updated',
+};
+
+const compute_internal: Server.ExecRequest<decl,null> = {
+  kind: Server.RqKind.EXEC,
+  name: 'plugins.region.compute',
+  input: jDecl,
+  output: Json.jNull,
+  fallback: null,
+  signals: [],
+};
+/** Compute regions for the given declaration */
+export const compute: Server.ExecRequest<decl,null>= compute_internal;
+
+const regions_internal: Server.GetRequest<decl,region[]> = {
+  kind: Server.RqKind.GET,
+  name: 'plugins.region.regions',
+  input: jDecl,
+  output: Json.jArray(jRegion),
+  fallback: [],
+  signals: [ { name: 'plugins.region.updated' } ],
+};
+/** Returns computed regions for the given declaration */
+export const regions: Server.GetRequest<decl,region[]>= regions_internal;
+
+const regionsAt_internal: Server.GetRequest<[ marker, boolean ],region[]> = {
+  kind: Server.RqKind.GET,
+  name: 'plugins.region.regionsAt',
+  input: Json.jPair( jMarker, Json.jBoolean,),
+  output: Json.jArray(jRegion),
+  fallback: [],
+  signals: [ { name: 'plugins.region.updated' } ],
+};
+/** Compute regions at the given marker */
+export const regionsAt: Server.GetRequest<[ marker, boolean ],region[]>= regionsAt_internal;
+
+const localize_internal: Server.GetRequest<
+  [ marker, boolean ],
+  node |
+  undefined
+  > = {
+  kind: Server.RqKind.GET,
+  name: 'plugins.region.localize',
+  input: Json.jPair( jMarker, Json.jBoolean,),
+  output: Json.jOption(jNode),
+  fallback: undefined,
+  signals: [ { name: 'plugins.region.updated' } ],
+};
+/** Localize in the local (true) or global map (false) */
+export const localize: Server.GetRequest<
+  [ marker, boolean ],
+  node |
+  undefined
+  >= localize_internal;
+
+/* ------------------------------------- */
diff --git a/ivette/src/frama-c/plugins/region/index.tsx b/ivette/src/frama-c/plugins/region/index.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..eed8bea5b81bb105826aaab9a9c1e05b85593f5a
--- /dev/null
+++ b/ivette/src/frama-c/plugins/region/index.tsx
@@ -0,0 +1,99 @@
+/* ************************************************************************ */
+/*                                                                          */
+/*   This file is part of Frama-C.                                          */
+/*                                                                          */
+/*   Copyright (C) 2007-2024                                                */
+/*     CEA (Commissariat à l'énergie atomique et aux énergies               */
+/*          alternatives)                                                   */
+/*                                                                          */
+/*   you can redistribute it and/or modify it under the terms of the GNU    */
+/*   Lesser General Public License as published by the Free Software        */
+/*   Foundation, version 2.1.                                               */
+/*                                                                          */
+/*   It is distributed in the hope that it will be useful,                  */
+/*   but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
+/*   GNU Lesser General Public License for more details.                    */
+/*                                                                          */
+/*   See the GNU Lesser General Public License version 2.1                  */
+/*   for more details (enclosed in the file licenses/LGPLv2.1).             */
+/*                                                                          */
+/* ************************************************************************ */
+
+// --------------------------------------------------------------------------
+// --- Regions
+// --------------------------------------------------------------------------
+
+import React from 'react';
+import { Label } from 'dome/controls/labels';
+import { LCD } from 'dome/controls/displays';
+import { IconButton } from 'dome/controls/buttons';
+import * as Dome from 'dome';
+import * as Tools from 'dome/frame/toolbars';
+import * as Ivette from 'ivette';
+import * as Server from 'frama-c/server';
+import * as States from 'frama-c/states';
+import * as Region from './api';
+import { MemoryView } from './memory';
+import './style.css';
+
+function RegionAnalys(): JSX.Element {
+  const [kf, setKf] = React.useState<States.Scope>();
+  const [kfName, setName] = React.useState<string>();
+  const [pinned, setPinned] = React.useState(false);
+  const [running, setRunning] = React.useState(false);
+  const setComputing = Dome.useProtected(setRunning);
+  const scope = States.useCurrentScope();
+  const { kind, name } = States.useDeclaration(scope);
+  const regions = States.useRequestStable(Region.regions, kf);
+  React.useEffect(() => {
+    if (!pinned && kind === 'FUNCTION' && scope !== kf) {
+      setKf(scope);
+      setName(name);
+    } else if (!Server.isRunning()) {
+      setKf(undefined);
+      setName(undefined);
+      setPinned(false);
+    }
+  }, [pinned, kind, name, scope, kf]);
+  async function compute(): Promise<void> {
+    try {
+      setComputing(true);
+      await Server.send(Region.compute, kf);
+    } finally {
+      setComputing(false);
+    }
+  }
+  return (
+    <>
+      <Tools.ToolBar>
+        <Label label='Function' />
+        <LCD className='region-lcd' label={kfName ?? '---'} />
+        <Tools.Button
+          icon={running ? 'EXECUTE' : 'MEDIA.PLAY'}
+          title='Run region analysis on the selected function'
+          disabled={running}
+          visible={kf !== undefined && regions.length === 0}
+          onClick={compute}
+        />
+        <IconButton
+          icon='PIN'
+          display={kf !== undefined}
+          title='Keep focus on current function'
+          selected={pinned}
+          onClick={() => setPinned(!pinned)}
+        />
+      </Tools.ToolBar>
+      <MemoryView regions={regions} />
+    </>
+  );
+}
+
+Ivette.registerComponent({
+  id: 'fc.region.main',
+  label: 'Region Analysis',
+  preferredPosition: 'BD',
+  children: <RegionAnalys />,
+});
+
+// --------------------------------------------------------------------------
diff --git a/ivette/src/frama-c/plugins/region/memory.tsx b/ivette/src/frama-c/plugins/region/memory.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..a59a4adac95021d3e17cd48d6e10cb0e9aceb15f
--- /dev/null
+++ b/ivette/src/frama-c/plugins/region/memory.tsx
@@ -0,0 +1,124 @@
+/* ************************************************************************ */
+/*                                                                          */
+/*   This file is part of Frama-C.                                          */
+/*                                                                          */
+/*   Copyright (C) 2007-2024                                                */
+/*     CEA (Commissariat à l'énergie atomique et aux énergies               */
+/*          alternatives)                                                   */
+/*                                                                          */
+/*   you can redistribute it and/or modify it under the terms of the GNU    */
+/*   Lesser General Public License as published by the Free Software        */
+/*   Foundation, version 2.1.                                               */
+/*                                                                          */
+/*   It is distributed in the hope that it will be useful,                  */
+/*   but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
+/*   GNU Lesser General Public License for more details.                    */
+/*                                                                          */
+/*   See the GNU Lesser General Public License version 2.1                  */
+/*   for more details (enclosed in the file licenses/LGPLv2.1).             */
+/*                                                                          */
+/* ************************************************************************ */
+
+// --------------------------------------------------------------------------
+// --- Regions
+// --------------------------------------------------------------------------
+
+import React from 'react';
+import * as Dot from 'dome/graph/diagram';
+import * as Region from './api';
+
+function makeRecord(
+  edges: Dot.Edge[],
+  source: string,
+  sizeof: number,
+  ranges: Region.range[]
+): Dot.Cell[] {
+  if (ranges.length === 0) return [];
+  const cells: Dot.Cell[] = [];
+  let offset = 0;
+  ranges.forEach((rg, i) => {
+    const port = `r${i}`;
+    const target = `n${rg.data}`;
+    edges.push({ source, sourcePort: port, target });
+    if (offset !== rg.offset)
+      cells.push(`${offset}..${rg.offset - 1} ##`);
+    offset = rg.offset + rg.length;
+    cells.push({
+      label: `${rg.offset}..${offset - 1} [${rg.cells}]`,
+      port,
+    });
+  });
+  if (offset !== sizeof)
+    cells.push(`${offset}..${sizeof - 1} ##`);
+  return cells;
+}
+
+interface Diagram {
+  nodes: Dot.Node[];
+  edges: Dot.Edge[];
+}
+
+function makeDiagram(regions: readonly Region.region[]): Diagram {
+  const nodes: Dot.Node[] = [];
+  const edges: Dot.Edge[] = [];
+  regions.forEach(r => {
+    const id = `n${r.node}`;
+    // --- Color
+    const color =
+      r.bytes ? 'red' :
+        r.pointed !== undefined
+          ? (r.writes ? 'orange' : 'yellow')
+          : (r.writes && r.reads) ? 'green' :
+            r.writes ? 'pink' : r.reads ? 'grey' : 'white';
+    // --- Shape
+    const font = r.ranges.length > 0 ? 'mono' : 'sans';
+    const cells = makeRecord(edges, id, r.sizeof, r.ranges);
+    const shape = cells.length > 0 ? cells : undefined;
+    nodes.push({ id, font, color, label: r.label, title: r.title, shape });
+    // --- Labels
+    const L: Dot.Node =
+      { id: '', shape: 'note', font: 'mono' };
+    r.labels.forEach(a => {
+      const lid = `L${a}`;
+      nodes.push({ ...L, id: lid, label: `${a}:` });
+      edges.push({ source: lid, aligned: true, head: 'tee', target: id });
+    });
+    // --- Roots
+    const R: Dot.Node =
+      { id: '', shape: 'cds', font: 'mono' };
+    r.roots.forEach(x => {
+      const xid = `X${x}`;
+      nodes.push({ ...R, id: xid, label: x });
+      edges.push({ source: xid, headAnchor: "e", target: id });
+    });
+    // --- Pointed
+    if (r.pointed !== undefined) {
+      const pid = `n${r.pointed}`;
+      edges.push({ source: id, target: pid, head: 'dot', color: 'orange' });
+    }
+  });
+  return { nodes, edges };
+}
+
+function addSelected(d: Diagram, label: string, node: Region.node): void {
+  d.nodes.push({
+    id: 'Selected', label, title: "Selected Marker", shape: 'note'
+  });
+  d.edges.push({ source: 'Selected', target: `n${node}` });
+}
+
+export interface MemoryViewProps {
+  regions?: readonly Region.region[];
+  node?: Region.node | undefined;
+  label?: string;
+}
+
+export function MemoryView(props: MemoryViewProps): JSX.Element {
+  const { regions = [], label, node } = props;
+  const diagram = React.useMemo(() => makeDiagram(regions), [regions]);
+  if (label && node) addSelected(diagram, label, node);
+  return <Dot.Diagram {...diagram} />;
+}
+
+// --------------------------------------------------------------------------
diff --git a/ivette/src/frama-c/plugins/region/pkg.json b/ivette/src/frama-c/plugins/region/pkg.json
new file mode 100644
index 0000000000000000000000000000000000000000..f9ba9b34ba90149f99ddfff2cce84846d98bbf63
--- /dev/null
+++ b/ivette/src/frama-c/plugins/region/pkg.json
@@ -0,0 +1,3 @@
+{
+  "name": "Frama-C/Region"
+}
diff --git a/ivette/src/frama-c/plugins/region/style.css b/ivette/src/frama-c/plugins/region/style.css
new file mode 100644
index 0000000000000000000000000000000000000000..0076926a0527f0215a6fa22963d4129835df2279
--- /dev/null
+++ b/ivette/src/frama-c/plugins/region/style.css
@@ -0,0 +1,9 @@
+/* -------------------------------------------------------------------------- */
+/* --- CSS for Region Views                                               --- */
+/* -------------------------------------------------------------------------- */
+
+.region-lcd {
+    margin-top: 4px;
+    min-width: 160px;
+    text-align: center;
+}
diff --git a/ivette/src/frama-c/plugins/studia/api/studia/index.ts b/ivette/src/frama-c/plugins/studia/api/studia/index.ts
index 2d6909c38e473be97575e3c50c32e3d9ec126d42..958174eedacbb8b56664ef2cbfeb39a1673931e5 100644
--- a/ivette/src/frama-c/plugins/studia/api/studia/index.ts
+++ b/ivette/src/frama-c/plugins/studia/api/studia/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -77,6 +77,7 @@ const getReadsLval_internal: Server.GetRequest<marker,effects> = {
   name: 'plugins.studia.studia.getReadsLval',
   input: jMarker,
   output: jEffects,
+  fallback: effectsDefault,
   signals: [],
 };
 /** Get the list of statements that read a lval. */
@@ -87,6 +88,7 @@ const getWritesLval_internal: Server.GetRequest<marker,effects> = {
   name: 'plugins.studia.studia.getWritesLval',
   input: jMarker,
   output: jEffects,
+  fallback: effectsDefault,
   signals: [],
 };
 /** Get the list of statements that write a lval. */
diff --git a/ivette/src/frama-c/plugins/studia/index.ts b/ivette/src/frama-c/plugins/studia/index.ts
index 1cbbbf2dfd364253a8f45e0f60bb649b6e774841..594845b7fa49ca0d400977cddd0ef18dc7b8dd92 100644
--- a/ivette/src/frama-c/plugins/studia/index.ts
+++ b/ivette/src/frama-c/plugins/studia/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/wp/api/index.ts b/ivette/src/frama-c/plugins/wp/api/index.ts
index f6e91065867c26d0a72cc068c43f41aa4047cfe0..151220bcedd7dc5b02a3465f53aa130fa232edd1 100644
--- a/ivette/src/frama-c/plugins/wp/api/index.ts
+++ b/ivette/src/frama-c/plugins/wp/api/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -88,6 +88,7 @@ const getProvers_internal: Server.GetRequest<null,prover[]> = {
   name: 'plugins.wp.getProvers',
   input: Json.jNull,
   output: Json.jArray(jProver),
+  fallback: [],
   signals: [],
 };
 /** Getter for state [`provers`](#provers)  */
@@ -98,6 +99,7 @@ const setProvers_internal: Server.SetRequest<prover[],null> = {
   name: 'plugins.wp.setProvers',
   input: Json.jArray(jProver),
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Setter for state [`provers`](#provers)  */
@@ -122,6 +124,7 @@ const getProcess_internal: Server.GetRequest<null,number> = {
   name: 'plugins.wp.getProcess',
   input: Json.jNull,
   output: Json.jNumber,
+  fallback: 0,
   signals: [],
 };
 /** Getter for state [`process`](#process)  */
@@ -132,6 +135,7 @@ const setProcess_internal: Server.SetRequest<number,null> = {
   name: 'plugins.wp.setProcess',
   input: Json.jNumber,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Setter for state [`process`](#process)  */
@@ -156,6 +160,7 @@ const getTimeout_internal: Server.GetRequest<null,number> = {
   name: 'plugins.wp.getTimeout',
   input: Json.jNull,
   output: Json.jNumber,
+  fallback: 0,
   signals: [],
 };
 /** Getter for state [`timeout`](#timeout)  */
@@ -166,6 +171,7 @@ const setTimeout_internal: Server.SetRequest<number,null> = {
   name: 'plugins.wp.setTimeout',
   input: Json.jNumber,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Setter for state [`timeout`](#timeout)  */
@@ -221,6 +227,7 @@ const reloadProverInfos_internal: Server.GetRequest<null,null> = {
   name: 'plugins.wp.reloadProverInfos',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`ProverInfos`](#proverinfos)  */
@@ -240,6 +247,7 @@ const fetchProverInfos_internal: Server.GetRequest<
             updated: Json.jArray(jProverInfosData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`ProverInfos`](#proverinfos)  */
@@ -441,6 +449,7 @@ const reloadGoals_internal: Server.GetRequest<null,null> = {
   name: 'plugins.wp.reloadGoals',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`goals`](#goals)  */
@@ -459,6 +468,7 @@ const fetchGoals_internal: Server.GetRequest<
             updated: Json.jArray(jGoalsData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`goals`](#goals)  */
@@ -490,6 +500,7 @@ const generateRTEGuards_internal: Server.ExecRequest<marker,null> = {
   name: 'plugins.wp.generateRTEGuards',
   input: jMarker,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Generate RTE guards for the function */
@@ -500,6 +511,7 @@ const startProofs_internal: Server.ExecRequest<marker,null> = {
   name: 'plugins.wp.startProofs',
   input: jMarker,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Generate goals and run provers */
@@ -523,6 +535,7 @@ const getScheduledTasks_internal: Server.GetRequest<
             done: Json.jNumber,
             todo: Json.jNumber,
           }),
+  fallback: { procs: 0, active: 0, done: 0, todo: 0 },
   signals: [ { name: 'plugins.wp.serverActivity' } ],
 };
 /** Scheduled tasks in proof server */
@@ -536,6 +549,7 @@ const cancelProofTasks_internal: Server.SetRequest<null,null> = {
   name: 'plugins.wp.cancelProofTasks',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Cancel all scheduled proof tasks */
diff --git a/ivette/src/frama-c/plugins/wp/api/tac/index.ts b/ivette/src/frama-c/plugins/wp/api/tac/index.ts
index f2c0881779d2d0711821f09746271545a2ba2c58..147176b824eb92490f9e98409ccd85b30649a6b4 100644
--- a/ivette/src/frama-c/plugins/wp/api/tac/index.ts
+++ b/ivette/src/frama-c/plugins/wp/api/tac/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -228,6 +228,7 @@ const reloadTactical_internal: Server.GetRequest<null,null> = {
   name: 'plugins.wp.tac.reloadTactical',
   input: Json.jNull,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Force full reload for array [`tactical`](#tactical)  */
@@ -247,6 +248,7 @@ const fetchTactical_internal: Server.GetRequest<
             updated: Json.jArray(jTacticalData),
             pending: Json.jNumber,
           }),
+  fallback: { reload: false, removed: [], updated: [], pending: 0 },
   signals: [],
 };
 /** Data fetcher for array [`tactical`](#tactical)  */
@@ -277,6 +279,7 @@ const configureTactics_internal: Server.ExecRequest<node,null> = {
   name: 'plugins.wp.tac.configureTactics',
   input: jNode,
   output: Json.jNull,
+  fallback: null,
   signals: [ { name: 'plugins.wp.tip.printStatus' } ],
 };
 /** Configure all tactics */
@@ -295,6 +298,7 @@ const setParameter_internal: Server.ExecRequest<
            value: Json.jAny,
          }),
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Configure tactical parameter */
@@ -308,6 +312,7 @@ const applyTactic_internal: Server.ExecRequest<tactic,node[]> = {
   name: 'plugins.wp.tac.applyTactic',
   input: jTactic,
   output: Json.jArray(jNode),
+  fallback: [],
   signals: [],
 };
 /** Applies the (configured) tactic */
@@ -318,6 +323,7 @@ const applyTacticAndProve_internal: Server.ExecRequest<tactic,node[]> = {
   name: 'plugins.wp.tac.applyTacticAndProve',
   input: jTactic,
   output: Json.jArray(jNode),
+  fallback: [],
   signals: [],
 };
 /** Applies tactic and run provers on children */
diff --git a/ivette/src/frama-c/plugins/wp/api/tip/index.ts b/ivette/src/frama-c/plugins/wp/api/tip/index.ts
index c33edca169b1fd5ce813fcf95adb4e5c739e6cfe..da50ab37d512c0a688acf42a8d1ab05cf56d0801 100644
--- a/ivette/src/frama-c/plugins/wp/api/tip/index.ts
+++ b/ivette/src/frama-c/plugins/wp/api/tip/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -126,6 +126,9 @@ const getNodeInfos_internal: Server.GetRequest<
             path: Json.jArray(jNode),
             children: Json.jArray(jNode),
           }),
+  fallback: { title: '', proved: false, pending: 0, size: 0, stats: '',
+              results: [], tactic: undefined, header: undefined,
+              childLabel: undefined, path: [], children: [] },
   signals: [ { name: 'plugins.wp.tip.proofStatus' } ],
 };
 /** Proof node information */
@@ -144,6 +147,7 @@ const getResult_internal: Server.GetRequest<
   name: 'plugins.wp.tip.getResult',
   input: Json.jObject({ node: jNode, prover: jProver,}),
   output: jResult,
+  fallback: resultDefault,
   signals: [ { name: 'plugins.wp.tip.proofStatus' } ],
 };
 /** Result for specified node and prover */
@@ -173,6 +177,8 @@ const getProofStatus_internal: Server.GetRequest<
             tactic: Json.jOption(jTactic),
             children: Json.jArray(jNode),
           }),
+  fallback: { size: 0, index: 0, pending: 0, current: nodeDefault,
+              parents: [], tactic: undefined, children: [] },
   signals: [ { name: 'plugins.wp.tip.proofStatus' } ],
 };
 /** Current Proof Status of a Goal */
@@ -187,6 +193,7 @@ const goForward_internal: Server.SetRequest<goal,null> = {
   name: 'plugins.wp.tip.goForward',
   input: jGoal,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Go to to first pending node, or root if none */
@@ -197,6 +204,7 @@ const goToRoot_internal: Server.SetRequest<goal,null> = {
   name: 'plugins.wp.tip.goToRoot',
   input: jGoal,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Go to root of proof tree */
@@ -207,6 +215,7 @@ const goToIndex_internal: Server.SetRequest<[ goal, number ],null> = {
   name: 'plugins.wp.tip.goToIndex',
   input: Json.jPair( jGoal, Json.jNumber,),
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Go to k-th pending node of proof tree */
@@ -217,6 +226,7 @@ const goToNode_internal: Server.SetRequest<node,null> = {
   name: 'plugins.wp.tip.goToNode',
   input: jNode,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Set current node of associated proof tree */
@@ -227,6 +237,7 @@ const clearNode_internal: Server.SetRequest<node,null> = {
   name: 'plugins.wp.tip.clearNode',
   input: jNode,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Cancel all node results and sub-tree (if any) */
@@ -237,6 +248,7 @@ const clearNodeTactic_internal: Server.SetRequest<node,null> = {
   name: 'plugins.wp.tip.clearNodeTactic',
   input: jNode,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Cancel node current tactic */
@@ -247,6 +259,7 @@ const clearParentTactic_internal: Server.SetRequest<node,null> = {
   name: 'plugins.wp.tip.clearParentTactic',
   input: jNode,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Cancel parent node tactic */
@@ -257,6 +270,7 @@ const clearGoal_internal: Server.SetRequest<goal,null> = {
   name: 'plugins.wp.tip.clearGoal',
   input: jGoal,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Remove the complete goal proof tree */
@@ -337,6 +351,7 @@ const printSequent_internal: Server.GetRequest<
            unmangled: Json.jOption(Json.jBoolean),
          }),
   output: jText,
+  fallback: textDefault,
   signals: [ { name: 'plugins.wp.tip.printStatus' } ],
 };
 /** Pretty-print the associated node */
@@ -351,6 +366,7 @@ const clearSelection_internal: Server.SetRequest<node,null> = {
   name: 'plugins.wp.tip.clearSelection',
   input: jNode,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Reset node selection */
@@ -369,6 +385,7 @@ const setSelection_internal: Server.SetRequest<
            extend: Json.jOption(Json.jBoolean),
          }),
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Set node selection */
@@ -388,6 +405,7 @@ const getSelection_internal: Server.GetRequest<
             part: Json.jOption(jPart),
             term: Json.jOption(jTerm),
           }),
+  fallback: { part: undefined, term: undefined },
   signals: [ { name: 'plugins.wp.tip.printStatus' },
              { name: 'plugins.wp.tip.proofStatus' } ],
 };
@@ -409,6 +427,7 @@ const runProvers_internal: Server.SetRequest<
            provers: Json.jOption(Json.jArray(jProver)),
          }),
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Schedule provers on proof node */
@@ -428,6 +447,7 @@ const killProvers_internal: Server.SetRequest<
            provers: Json.jOption(Json.jArray(jProver)),
          }),
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Interrupt running provers on proof node */
@@ -447,6 +467,7 @@ const clearProvers_internal: Server.SetRequest<
            provers: Json.jOption(Json.jArray(jProver)),
          }),
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Remove prover results from proof node */
@@ -467,6 +488,7 @@ const getScriptStatus_internal: Server.GetRequest<
             script: Json.jOption(Json.jString),
             saved: Json.jBoolean,
           }),
+  fallback: { proof: false, script: undefined, saved: false },
   signals: [ { name: 'plugins.wp.tip.proofStatus' } ],
 };
 /** Script Status for a given Goal */
@@ -480,6 +502,7 @@ const saveScript_internal: Server.SetRequest<goal,null> = {
   name: 'plugins.wp.tip.saveScript',
   input: jGoal,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Save Script for the Goal */
@@ -490,6 +513,7 @@ const runScript_internal: Server.SetRequest<goal,null> = {
   name: 'plugins.wp.tip.runScript',
   input: jGoal,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Replay Saved Script for the Goal (if any) */
@@ -500,6 +524,7 @@ const clearProofScript_internal: Server.SetRequest<goal,null> = {
   name: 'plugins.wp.tip.clearProofScript',
   input: jGoal,
   output: Json.jNull,
+  fallback: null,
   signals: [],
 };
 /** Clear Proof and Remove any Saved Script for the Goal */
diff --git a/ivette/src/frama-c/plugins/wp/goals.tsx b/ivette/src/frama-c/plugins/wp/goals.tsx
index 167f55efeff29a8f73a99be6ad935f2e2a01beb0..4ec549d6ae59f035dee2eb33f121eaf68f85d593 100644
--- a/ivette/src/frama-c/plugins/wp/goals.tsx
+++ b/ivette/src/frama-c/plugins/wp/goals.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/plugins/wp/index.tsx b/ivette/src/frama-c/plugins/wp/index.tsx
index f56c222cb59c14dff256dd651b4c2ddd2ad09e6c..53f2c81942054dfeac8fd5e1e8125070c0cca741 100644
--- a/ivette/src/frama-c/plugins/wp/index.tsx
+++ b/ivette/src/frama-c/plugins/wp/index.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -28,7 +28,7 @@ import React from 'react';
 import * as Dome from 'dome';
 import { Label } from 'dome/controls/labels';
 import { IconButton } from 'dome/controls/buttons';
-import { LED, Meter } from 'dome/controls/displays';
+import { Meter } from 'dome/controls/displays';
 import { Group, Inset } from 'dome/frame/toolbars';
 import * as Ivette from 'ivette';
 import * as Server from 'frama-c/server';
@@ -37,6 +37,7 @@ import * as Ast from 'frama-c/kernel/api/ast';
 import * as ASTview from 'frama-c/kernel/ASTview';
 import { GoalTable } from './goals';
 import { TIPView } from './tip';
+import * as TIP from './tip';
 import * as WP from 'frama-c/plugins/wp/api';
 import './style.css';
 
@@ -167,22 +168,20 @@ Ivette.registerComponent({
 /* -------------------------------------------------------------------------- */
 
 function ServerActivity(): JSX.Element {
-  const rq = States.useRequest(WP.getScheduledTasks, null, { pending: null });
-  const procs = rq ? rq.procs : 0;
-  const active = rq ? rq.active : 0;
-  const status = active > 0 ? 'active' : 'inactive';
-  const done = rq ? rq.done : 0;
-  const todo = rq ? rq.todo : 0;
+  const { done, todo, active, procs, running } = TIP.useServerActivity();
   const total = done + todo;
   const progress = done + active;
   const objective = done + todo + procs;
   const title = `${done} / ${todo} (${active} running, ${procs} procs)`;
   return (
     <Group display={total > 0} title={title}>
-      <LED status={status} />
       <Label>WP</Label>
       <Meter min={0} value={progress} max={objective} />
       <Inset />
+      <IconButton
+        icon="MEDIA.HALT" kind="negative" enabled={running}
+        onClick={TIP.cancelProofTasks} />
+      <Inset />
     </Group>
   );
 }
diff --git a/ivette/src/frama-c/plugins/wp/seq.tsx b/ivette/src/frama-c/plugins/wp/seq.tsx
index aaf2809e5019141c689d7421356640b075c768d1..287f3c528706d74a4fe543ac4a2367939f9d01a9 100644
--- a/ivette/src/frama-c/plugins/wp/seq.tsx
+++ b/ivette/src/frama-c/plugins/wp/seq.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -165,17 +165,8 @@ export interface GoalViewProps {
 
 export function GoalView(props: GoalViewProps): JSX.Element {
   const { node, locked } = props;
-  const jtext = States.useRequest(TIP.printSequent, props, {
-    pending: null,
-    offline: undefined,
-    onError: '',
-  }) ?? null;
-  const { part, term } =
-    States.useRequest(TIP.getSelection, node, {
-      pending: null,
-      offline: {},
-      onError: {},
-    }) ?? {};
+  const jtext = States.useRequestStable(TIP.printSequent, props);
+  const { part, term } = States.useRequestStable(TIP.getSelection, node);
   const proxy = React.useMemo(() => new TextProxy(), []);
   const sequent = React.useMemo(() => new Sequent(jtext), [jtext]);
   React.useEffect(() => proxy.updateContents(sequent.text), [proxy, sequent]);
diff --git a/ivette/src/frama-c/plugins/wp/tac.tsx b/ivette/src/frama-c/plugins/wp/tac.tsx
index b5cc19e36f857e4799b7caf88591e5f7ae2e94cf..cc3f0f786dfd8e22fa7392eb8b1d918e139b61f0 100644
--- a/ivette/src/frama-c/plugins/wp/tac.tsx
+++ b/ivette/src/frama-c/plugins/wp/tac.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -126,7 +126,7 @@ function ProverItem(props : ProverItemProps): JSX.Element
   );
   const enabled = !inactive && (play || running);
   const icon =
-    inactive ? 'LOCK' : running ? 'MEDIA.PAUSE' : 'MEDIA.PLAY';
+    inactive ? 'LOCK' : running ? 'MEDIA.STOP' : 'MEDIA.PLAY';
   const title =
     inactive ? undefined :
     running ? 'Interrupt Prover' : 'Run Prover';
@@ -162,9 +162,7 @@ export interface ProverSelection {
 
 export function Provers(props: ProverSelection): JSX.Element {
   const { node, selected, setSelected } = props;
-  const { results=[] } = States.useRequest(
-    TIP.getNodeInfos, node, { pending: null, onError: null }
-  ) ?? {};
+  const { results=[] } = States.useRequestStable(TIP.getNodeInfos, node);
   const [ provers=[], setProvers ] = States.useSyncState(WP.provers);
   const setItems = (prvs: string[]): void => setProvers(prvs.map(WP.jProver));
   const children = [...provers].sort().map((prover) => {
@@ -380,9 +378,7 @@ function Parameter(props: ParameterProps): JSX.Element | null
 export function ConfigureProver(props: ProverSelection): JSX.Element {
   const { node, selected: prover, setSelected } = props;
   const { descr } = States.useSyncArrayElt(WP.ProverInfos, prover) ?? {};
-  const result = States.useRequest(
-    TIP.getResult, { node, prover }, { pending: null, onError: null }
-  ) ?? WP.resultDefault;
+  const result = States.useRequestStable(TIP.getResult, { node, prover });
   const [process = 1, setProcess] = States.useSyncState(WP.process);
   const [timeout = 1, setTimeout] = States.useSyncState(WP.timeout);
   const { icon, kind, clear=true, running=false, play=false, forward=0 } =
@@ -466,7 +462,7 @@ export function ConfigureProver(props: ProverSelection): JSX.Element {
         />
         <IconButton
           key='play'
-          icon={running ? 'MEDIA.PAUSE' : 'MEDIA.PLAY'}
+          icon={running ? 'MEDIA.STOP' : 'MEDIA.PLAY'}
           kind={running ? 'warning' : 'positive'}
           title={running ? 'Interrupt Prover' : 'Run Prover'}
           enabled={enabled}
@@ -530,7 +526,7 @@ function getStatusDescription(tactical: TAC.tacticalData): StatusDescr {
 export function ConfigureTactic(props: TacticSelection): JSX.Element {
   const { node, locked, selected: tactic, setSelected } = props;
   const tactical = useTactic(tactic);
-  States.useRequest(TAC.configureTactics, node, { onError: null });
+  const { pending } = States.useRequestStatus(TAC.configureTactics, node);
   const { status, label, title, params } = tactical;
   const isReady = !locked && status==='Applicable';
   const display = !!tactic && (locked || status !== 'NotApplicable');
@@ -558,7 +554,7 @@ export function ConfigureTactic(props: TacticSelection): JSX.Element {
     >
       <Item
         key='tactic'
-        icon='TUNINGS'
+        icon={ pending ? 'EXECUTE' : 'TUNINGS' }
         title='Selected Tactic Configuration'
         className="wp-config-tactic"
         label={label} />
diff --git a/ivette/src/frama-c/plugins/wp/tip.tsx b/ivette/src/frama-c/plugins/wp/tip.tsx
index e128cc03f03f9415200db3e0457f5166d401622d..3fe0bd22009cc9402ea3ff33e6c80c700e2a4375 100644
--- a/ivette/src/frama-c/plugins/wp/tip.tsx
+++ b/ivette/src/frama-c/plugins/wp/tip.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -130,13 +130,10 @@ function Node(props: NodeProps): JSX.Element {
     child = false,
     hasChildren = false,
   } = props;
-  const debug = `#${node}`;
   const {
-    title = debug, childLabel = 'Script', header,
+    title, childLabel = 'Script', header,
     proved = false, pending = 0, size = 0
-  } = States.useRequest(
-    TIP.getNodeInfos, node, { pending: null, onError: null }
-  ) ?? {};
+  } = States.useRequestStable(TIP.getNodeInfos, node);
   const elt = cellRef.current;
   const current = !child && !parent;
   React.useEffect(() => {
@@ -225,6 +222,29 @@ export function popupProvers(config: ProverConfig): void {
   );
 }
 
+/* -------------------------------------------------------------------------- */
+/* --- Active Tasks                                                       --- */
+/* -------------------------------------------------------------------------- */
+
+export interface ServerActivity {
+  procs: number,
+  active: number,
+  done: number,
+  todo: number,
+  running: boolean,
+}
+
+export function useServerActivity(): ServerActivity {
+  const { procs, active, done, todo } =
+    States.useRequestStable(WP.getScheduledTasks, null);
+  const running = active + todo > 0;
+  return { procs, active, done, todo, running };
+}
+
+export function cancelProofTasks(): void {
+  Server.send(WP.cancelProofTasks, null);
+}
+
 /* -------------------------------------------------------------------------- */
 /* --- TIP View                                                           --- */
 /* -------------------------------------------------------------------------- */
@@ -245,17 +265,19 @@ export function TIPView(props: TIPProps): JSX.Element {
     States.useSyncArrayElt(WP.goals, goal) ?? WP.goalsDataDefault;
   // --- proof status
   const {
-    current, index = -1, pending = 0, size = 0,
+    current, index, pending, size,
     tactic: nodeTactic, parents = [], children = [],
-  } = States.useRequest(TIP.getProofStatus, goal ? {
-    main: goal, unproved, subtree,
-  } : undefined, { pending: null }) ?? {};
+  } = States.useRequestStable(
+    TIP.getProofStatus,
+    goal ? { main: goal, unproved, subtree } : undefined,
+  );
   // --- script status
-  const { saved = false, proof = false, script } =
-    States.useRequest(TIP.getScriptStatus, goal, { pending: null }) ?? {};
+  const { saved, proof, script } =
+    States.useRequestStable(TIP.getScriptStatus, goal);
   // --- provers
   const available = States.useSyncArrayData(WP.ProverInfos);
   const [provers = [], setProvers] = States.useSyncState(WP.provers);
+  const server = useServerActivity();
   // --- sidebar & toolbar states
   const [copied, setCopied] = React.useState(false);
   const [tactic, setTactic] = React.useState<Tactic>();
@@ -410,6 +432,13 @@ export function TIPView(props: TIPProps): JSX.Element {
           icon='SETTINGS'
           title='Active Provers Selection'
           onClick={onProverSelection} />
+        <Button
+          icon='MEDIA.HALT'
+          kind='negative'
+          enabled={server.running}
+          title={`Interrrupt (${server.todo}/${server.todo + server.done})`}
+          onClick={cancelProofTasks}
+        />
       </ToolBar>
       <Hfill>
         <NavBar
diff --git a/ivette/src/frama-c/react-pivottable.d.ts b/ivette/src/frama-c/react-pivottable.d.ts
index 7060487ae84672a2332ed2e21eb0c03ea9004ab5..fb9030bdf0eaea0c08a022de8cfb790bb02cbd6c 100644
--- a/ivette/src/frama-c/react-pivottable.d.ts
+++ b/ivette/src/frama-c/react-pivottable.d.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/richtext.tsx b/ivette/src/frama-c/richtext.tsx
index 2fd37ff7ce138fda8ae9c13e454d90af87d7b65b..a86076673aff7c7711366364c7ac9af3246e6976 100644
--- a/ivette/src/frama-c/richtext.tsx
+++ b/ivette/src/frama-c/richtext.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/frama-c/server.ts b/ivette/src/frama-c/server.ts
index d98b4554dfbc31d6e96f9bda875889ddf4271884..4fd36323ec416eafd9e2bc3fbf0cf186de54e9b9 100644
--- a/ivette/src/frama-c/server.ts
+++ b/ivette/src/frama-c/server.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -158,7 +158,7 @@ export function useStatus(): Status {
   return status;
 }
 
-const running = (st: Status): boolean =>
+export const isRunningStatus = (st: Status): boolean =>
   (st === Status.ON || st === Status.CMD);
 
 /**
@@ -167,7 +167,7 @@ const running = (st: Status): boolean =>
  *  defined by status `ON` or `CMD`.
  */
 export function isRunning(): boolean {
-  return running(status);
+  return isRunningStatus(status);
 }
 
 /**
@@ -229,8 +229,8 @@ function _status(newStatus: Status): void {
     const oldStatus = status;
     status = newStatus;
     STATUS.emit(newStatus);
-    const oldRun = running(oldStatus);
-    const newRun = running(newStatus);
+    const oldRun = isRunningStatus(oldStatus);
+    const newRun = isRunningStatus(newStatus);
     if (oldRun && !newRun) SHUTDOWN.emit();
     if (!oldRun && newRun) READY.emit();
   }
@@ -775,6 +775,8 @@ export interface Request<Kd extends RqKind, In, Out> {
   input: Json.Decoder<In>;
   /** Decoder of output parameters. */
   output: Json.Decoder<Out>;
+  /** Fallback output value */
+  fallback: Out;
   /** Signals the request depends on */
   signals: Array<Signal>;
 }
@@ -783,7 +785,7 @@ export type GetRequest<In, Out> = Request<RqKind.GET, In, Out>;
 export type SetRequest<In, Out> = Request<RqKind.SET, In, Out>;
 export type ExecRequest<In, Out> = Request<RqKind.EXEC, In, Out>;
 
-export interface Response<Data> extends Promise<Data> {
+export interface ServerTask<Data> extends Promise<Data> {
   kill?: () => void;
 }
 
@@ -796,22 +798,18 @@ export interface Response<Data> extends Promise<Data> {
 export function send<In, Out>(
   request: Request<RqKind, In, Out>,
   param: In,
-): Response<Out> {
+): ServerTask<Out> {
   if (!isRunning()) return Promise.reject('Server not running');
   if (!request.name) return Promise.reject('Undefined request');
   const rid = `RQ.${rqCount}`;
   rqCount += 1;
   const { kind, name } = request;
-  logModel.registerRequest(
-    {
-      rid,
-      kind,
-      name,
-      param: param as unknown as Json.json,
-      statut: statutLog.PENDING
-    }
-  );
-  const response: Response<Out> = new Promise<Out>((resolve, reject) => {
+  logModel.registerRequest({
+    rid, kind, name,
+    param: param as unknown as Json.json,
+    statut: statutLog.PENDING
+  });
+  const response: ServerTask<Out> = new Promise<Out>((resolve, reject) => {
     const unwrap = (js: Json.json): void => {
       try {
         resolve(request.output(js));
diff --git a/ivette/src/frama-c/states.ts b/ivette/src/frama-c/states.ts
index 1c03a088b5872accc61750647e1d41e36b3027bc..ba94955be54c5bcec75a19311ffe66763eff6e14 100644
--- a/ivette/src/frama-c/states.ts
+++ b/ivette/src/frama-c/states.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -50,87 +50,135 @@ const D = new Dome.Debug('States');
 // --- Cached GET Requests
 // --------------------------------------------------------------------------
 
-/** Options to tweak the behavior of `useRequest()`. Null values means
-    keeping the last result. */
-export interface UseRequestOptions<A> {
-  /** Returned value in case where the server goes offline. */
-  offline?: A | null;
-  /** Temporary returned value when the request is pending. */
-  pending?: A | null;
-  /** Returned value when the request fails. */
-  onError?: A | null;
-  /** Re-send the request when any of the signals are sent. */
-  onSignals?: Server.Signal[];
+/** Response of `useRequestStatus()` */
+export interface RequestStatus<Out> {
+  /** Response of the current request, when available. */
+  response: Out | undefined;
+  /** Current response, or default value when undefined. */
+  value: Out;
+  /** Last returned value, until no more request or server goes offline. */
+  stable: Out;
+  /** Current request is still pending. */
+  pending: boolean;
+  /** Current request error, if any. */
+  error: string | undefined;
+  /** Interrupt currently processed request, if any. */
+  kill: () => void;
 }
 
 /**
-  Cached GET request (Custom React Hook).
+  Cached requests (Custom React Hook).
 
-  Sends the specified GET request and returns its result. The request is send
+  Sends the specified request and returns its result. The request is send
   asynchronously and cached until any change in the request parameters or server
   state. The change in the server state are tracked by the signals specified
   when registering the request or by the one in options.onSignals if specified.
-
-  Options can be used to tune more precisely the behavior of the hook.
  */
-export function useRequest<Kd extends Server.RqKind, In, Out>(
+export function useRequestStatus<Kd extends Server.RqKind, In, Out>(
   rq: Server.Request<Kd, In, Out>,
-  params: In | undefined,
-  options: UseRequestOptions<Out> = {},
-): Out | undefined {
-  const initial = options.offline ?? undefined;
-  const [response, setResponse] = React.useState<Out | undefined>(initial);
-  const updateResponse = Dome.useProtected(
-    (opt: Out | undefined | null): void => {
-      if (opt !== null) setResponse(opt);
-    }
-  );
+  prm: In | undefined,
+  ...signals: Server.Signal[]
+): RequestStatus<Out> {
+
+  // Request Status Management
+  const NOP = (): void => { };
+  const killer = React.useRef(NOP);
+  const [response, setResponse] = React.useState<Out>();
+  const [stable, setStable] = React.useState<Out>(rq.fallback);
+  const [error, setError] = React.useState<string>();
+  const updateStable = Dome.useProtected(setStable);
+  const updateResponse = Dome.useProtected(setResponse);
+  const updateError = Dome.useProtected(setError);
+
   // Fetch Request
-  async function trigger(): Promise<void> {
-    if (Server.isRunning() && params !== undefined) {
-      try {
-        updateResponse(options.pending);
-        const r = await Server.send(rq, params);
-        updateResponse(r);
-      } catch (error) {
-        if (options.onError === undefined) {
-          D.error(`Fail in useRequest '${rq.name}'. ${error}`);
+  const trigger: () => void =
+    React.useCallback(
+      async function (): Promise<void> {
+        updateError(undefined);
+        updateResponse(undefined);
+        try {
+          if (Server.isRunning() && prm !== undefined) {
+            const task = Server.send(rq, prm);
+            killer.current = task.kill ?? NOP;
+            const result = await task;
+            updateResponse(result);
+            updateStable(result);
+          } else {
+            updateStable(rq.fallback);
+          }
+        } catch (err) {
+          updateError(`${err}`);
+          updateStable(rq.fallback);
+        } finally {
+          killer.current = NOP;
         }
-        updateResponse(options.onError);
-      }
-    } else {
-      updateResponse(options.offline);
-    }
-  }
+      }, [ rq, prm, updateStable, updateResponse, updateError ]);
 
   // Server & Cache Management
-  Server.useStatus();
-  const cached = React.useRef('');
+  const running = Server.isRunningStatus(Server.useStatus());
+  const cached = running ? JSON.stringify([rq.name, prm]) : null;
   React.useEffect(() => {
-    if (Server.isRunning()) {
-      const footprint = JSON.stringify([rq.name, params]);
-      if (cached.current !== footprint) {
-        cached.current = footprint;
-        trigger();
-      }
+    if (cached !== null) {
+      trigger();
     } else {
-      if (cached.current !== '') {
-        cached.current = '';
-        updateResponse(options.offline);
-      }
+      setResponse(undefined);
+      setStable(rq.fallback);
+      setError(undefined);
+      killer.current = NOP;
     }
-  });
+  }, [rq, trigger, cached] );
 
   // Signal Management
-  const signals = rq.signals.concat(options.onSignals ?? []);
+  const rqsignals = rq.signals.concat(signals);
   React.useEffect(() => {
-    signals.forEach((s) => Server.onSignal(s, trigger));
+    rqsignals.forEach((s) => Server.onSignal(s, trigger));
     return () => {
-      signals.forEach((s) => Server.offSignal(s, trigger));
+      rqsignals.forEach((s) => Server.offSignal(s, trigger));
     };
   });
 
-  return response;
+  // Full Response
+  const pending =
+    running &&
+    prm !== undefined &&
+    response === undefined &&
+    error === undefined;
+  const value = response ?? rq.fallback;
+  return {
+    response, value, stable, error, pending,
+    kill: killer.current,
+  };
+}
+
+// --------------------------------------------------------------------------
+// --- useRequest shortcurs
+// --------------------------------------------------------------------------
+
+/** Shortcut to `useRequestStatus().response */
+export function useRequestResponse<Kd extends Server.RqKind, In, Out>(
+  rq: Server.Request<Kd, In, Out>,
+  prm: In | undefined,
+  ...signals: Server.Signal[]
+): Out | undefined {
+  return useRequestStatus(rq, prm, ...signals).response;
+}
+
+/** Shortcut to `useRequestStatus().value */
+export function useRequestValue<Kd extends Server.RqKind, In, Out>(
+  rq: Server.Request<Kd, In, Out>,
+  prm: In | undefined,
+  ...signals: Server.Signal[]
+): Out {
+  return useRequestStatus(rq, prm, ...signals).value;
+}
+
+/** Shortcut to `useRequestStatus().stable */
+export function useRequestStable<Kd extends Server.RqKind, In, Out>(
+  rq: Server.Request<Kd, In, Out>,
+  prm: In | undefined,
+  ...signals: Server.Signal[]
+): Out {
+  return useRequestStatus(rq, prm, ...signals).stable;
 }
 
 // --------------------------------------------------------------------------
@@ -143,12 +191,10 @@ export type Tag = {
   descr?: string;
 };
 
-const holdCurrent = { offline: null, pending: null, onError: null };
-
 export type GetTags = Server.GetRequest<null, Tag[]>;
 
 export function useTags(rq: GetTags): Map<string, Tag> {
-  const tags = useRequest(rq, null, holdCurrent);
+  const tags = useRequestStable(rq, null);
   return React.useMemo(() => {
     const m = new Map<string, Tag>();
     if (tags !== undefined)
diff --git a/ivette/src/ivette/display.tsx b/ivette/src/ivette/display.tsx
index 962c21ad5b410684ed37ef245f78443900d9f732..af1bdad3bd5bdcc017b609a56550e7d7129599bf 100644
--- a/ivette/src/ivette/display.tsx
+++ b/ivette/src/ivette/display.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -124,14 +124,15 @@ export function useComponentStatus(
   return Laboratory.getComponentStatus(state, id ?? '');
 }
 
-export type ShortMessage = undefined | null | string;
-export type Message = ShortMessage | Laboratory.Notification;
-export type Warning = ShortMessage | { label: string, title: string };
+export type Message = string | { label: string, title: string };
 
 /** Message notification */
 export function showMessage(msg: Message): void {
   if (!msg) return;
-  Laboratory.showMessage(typeof msg === 'string' ? { label: msg } : msg);
+  const short = typeof msg === 'string';
+  const label = short ? msg : msg.label;
+  const title = short ? msg : msg.title;
+  Laboratory.showMessage({ kind: "message", label, title });
 }
 
 /** Warning notification. */
@@ -139,7 +140,7 @@ export function showWarning(msg: Message): void {
   if (!msg) return;
   const short = typeof msg === 'string';
   const label = short ? msg : msg.label;
-  const title = short ? msg : undefined;
+  const title = short ? msg : msg.title;
   Laboratory.showMessage({ kind: 'warning', label, title });
 }
 
@@ -148,7 +149,7 @@ export function showError(msg: Message): void {
   if (!msg) return;
   const short = typeof msg === 'string';
   const label = short ? msg : msg.label;
-  const title = short ? msg : undefined;
+  const title = short ? msg : msg.title;
   Laboratory.showMessage({ kind: 'error', label, title });
 }
 
diff --git a/ivette/src/ivette/index.tsx b/ivette/src/ivette/index.tsx
index df62fe3ffa9956bbcaa17e35994b828759ecbb81..7eefab232b3beaee2f6d3608d2f004bf6599c299 100644
--- a/ivette/src/ivette/index.tsx
+++ b/ivette/src/ivette/index.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -33,6 +33,7 @@ import React from 'react';
 import { DEVEL } from 'dome';
 import { Label } from 'dome/controls/labels';
 import { DefineElement } from 'dome/layout/dispatch';
+import { Inset } from 'dome/frame/toolbars';
 import * as State from './state';
 import * as Search from './search';
 
@@ -191,6 +192,7 @@ export function TitleBar(props: TitleBarProps): JSX.Element | null {
         title={title || context.title}
       />
       {children}
+      <Inset />
     </DefineElement>
   );
 }
@@ -200,7 +202,7 @@ export function TitleBar(props: TitleBarProps): JSX.Element | null {
 /* -------------------------------------------------------------------------- */
 
 export interface SidebarProps extends ContentProps {
-  iconPath?: string;
+  icon?: string;
 }
 
 export interface ToolProps {
diff --git a/ivette/src/ivette/laboratory.tsx b/ivette/src/ivette/laboratory.tsx
index c0c9d3afc3d92717d2b0103a9823135a007de53c..ff26adc019275bd62339f2240297aaac49b8de38 100644
--- a/ivette/src/ivette/laboratory.tsx
+++ b/ivette/src/ivette/laboratory.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -21,6 +21,7 @@
 /* ************************************************************************ */
 
 import React from 'react';
+import equal from 'react-fast-compare';
 import * as Dome from 'dome';
 import * as Json from 'dome/data/json';
 import * as States from 'dome/data/states';
@@ -53,7 +54,7 @@ interface Layout { A: compId, B: compId, C: compId, D: compId }
 interface TabViewState {
   key: tabKey, /* viewId@custom for custom, or viewId */
   viewId: viewId,
-  custom: number, /* -1: transient, 0: favorite, n: custom */
+  custom: number, /* 0: normal, n>0: custom */
   split: Split,
   stack: Layout[], /* current at index 0 */
 }
@@ -91,7 +92,9 @@ const LAB = new States.GlobalState<LabViewState>({
 
 interface TabSettings {
   view: viewId,
+  custom: number,
   split: Split,
+  layout: Layout,
 }
 
 interface DockSettings {
@@ -105,6 +108,14 @@ interface LabSettings {
   dock: DockSettings[];
 }
 
+const jLayout: Json.Decoder<Layout> =
+  Json.jObject({
+    A: Json.jString,
+    B: Json.jString,
+    C: Json.jString,
+    D: Json.jString,
+  });
+
 const jSplit: Json.Decoder<Split> =
   Json.jObject({
     H: Json.jRange(0, 1, 0.5),
@@ -126,7 +137,9 @@ const jPosition: Json.Decoder<Ivette.LayoutPosition> =
 const jTabSettings: Json.Decoder<TabSettings> =
   Json.jObject({
     view: Json.jString,
+    custom: Json.jNumber,
     split: jSplit,
+    layout: jLayout,
   });
 
 const jDockSettings: Json.Decoder<DockSettings> =
@@ -149,26 +162,21 @@ function labSettings(state: LabViewState): LabSettings {
   const tabs: TabSettings[] = [];
   let tabIndex = -1;
   state.tabs.forEach((tab: TabViewState) => {
-    if (tab.custom === 0) {
-      if (tab.key === state.tabKey)
-        tabIndex = tabs.length;
-      tabs.push({
-        view: tab.viewId,
-        split: tab.split,
-      });
-    }
+    const current = tab.key === state.tabKey;
+    if (current) tabIndex = tabs.length;
+    tabs.push({
+      view: tab.viewId,
+      custom: tab.custom,
+      split: current ? state.split : tab.split,
+      layout: current ? state.stack[0] : tab.stack[0],
+    });
   });
   const dock: DockSettings[] = [];
-  state.docked.forEach((position, compId) => dock.push({
-    comp: compId,
-    position,
-  }));
+  state.docked.forEach((position, comp) => dock.push({ comp, position }));
   return { tabIndex, tabs, dock };
 }
 
-const defaultSettings: LabSettings = {
-  tabIndex: 0, tabs: [], dock: [],
-};
+const defaultSettings: LabSettings = { tabIndex: 0, tabs: [], dock: [] };
 
 /* -------------------------------------------------------------------------- */
 /* --- Layout Utilities                                                   --- */
@@ -323,13 +331,16 @@ function newCustom(tabs: Map<tabKey, TabViewState>, viewId: viewId): number {
   return custom + 1;
 }
 
+const tabKeyOf = (viewId: viewId, custom: number): tabKey =>
+  custom > 0 ? `${viewId}@${custom}` : viewId;
+
 function newTab(
   tabs: Map<tabKey, TabViewState>,
   view: Ivette.ViewLayoutProps,
   custom: number,
 ): TabViewState {
   const { id: viewId } = view;
-  const key = custom > 0 ? `${viewId}@${custom}` : viewId;
+  const key = tabKeyOf(viewId, custom);
   const tab = {
     key, viewId, custom,
     split: defaultSplit,
@@ -476,7 +487,7 @@ function applyView(view: Ivette.ViewLayoutProps): void {
     const panels = addPanels(state.panels, layout);
     const alerts = removeAlerts(state.alerts, layout);
     const tabs = copyMap(state.tabs);
-    const tab = newTab(tabs, view, -1);
+    const tab = newTab(tabs, view, 0);
     saveTab(tabs, state);
     LAB.setValue({
       ...state,
@@ -497,25 +508,6 @@ function duplicateView(view: Ivette.ViewLayoutProps): void {
   LAB.setValue({ ...state, tabs });
 }
 
-function applyFavorite(
-  view: Ivette.ViewLayoutProps,
-  favorite: boolean
-): void {
-  const state = LAB.getValue();
-  const tab = state.tabs.get(view.id);
-  if (tab) {
-    const custom = favorite ? 0 : -1;
-    if (tab.custom !== custom) {
-      const tabs = copyMap(state.tabs).set(tab.key, { ...tab, custom });
-      LAB.setValue({ ...state, tabs });
-    }
-  } else if (favorite) {
-    const tabs = copyMap(state.tabs);
-    newTab(tabs, view, 0);
-    LAB.setValue({ ...state, tabs });
-  }
-}
-
 function applyComponent(
   comp: Ivette.ComponentProps,
   at?: LayoutPosition
@@ -567,6 +559,73 @@ function closeComponent(compId: compId): void {
   LAB.setValue({ ...state, panels, docked, stack });
 }
 
+/* -------------------------------------------------------------------------- */
+/* --- Update from Settings                                               --- */
+/* -------------------------------------------------------------------------- */
+
+const filterComponent = (id: compId): compId =>
+  COMPONENT.getElement(id) !== undefined ? id : '';
+
+const filterLayout = (w: Layout): Layout => ({
+  A: filterComponent(w.A),
+  B: filterComponent(w.B),
+  C: filterComponent(w.C),
+  D: filterComponent(w.D),
+});
+
+function updateTab(
+  newTabs: Map<tabKey, TabViewState>,
+  tab: TabSettings
+): boolean {
+  const { custom, view: viewId } = tab;
+  const view = VIEW.getElement(viewId);
+  if (!view) return false;
+  const tabKey = tabKeyOf(viewId, custom);
+  const tabState = newTabs.get(tabKey);
+  const oldStack =
+    tabState !== undefined ? tabState.stack : [
+      defaultLayout, makeViewLayout(view.layout)
+    ]; // unstack starts at depth 1
+  const stack = unstackLayout(filterLayout(tab.layout), oldStack);
+  if (
+    tabState === undefined ||
+    tabState.custom !== tab.custom ||
+    !equal(tabState.stack[0], stack[0]) ||
+    !equal(tabState.split, tab.split)
+  ) {
+    newTabs.set(tabKey, {
+      key: tabKey, viewId, custom: tab.custom, stack, split: tab.split,
+    });
+    return true;
+  } else
+    return false;
+}
+
+function updateDock(
+  newDock: Map<compId, LayoutPosition>,
+  dock: DockSettings,
+): boolean {
+  const { comp, position } = dock;
+  if (COMPONENT.getElement(comp) === undefined) return false;
+  const current = newDock.get(comp);
+  if (current !== position) {
+    newDock.set(comp, position);
+    return true;
+  } else
+    return false;
+}
+
+function updateIndex(settings: LabSettings): void {
+  const theTab = settings.tabs[settings.tabIndex];
+  if (theTab) {
+    applyTab(tabKeyOf(theTab.view, theTab.custom));
+  } else {
+    const console = VIEW.getElement('fc.kernel.console');
+    if (console !== undefined) applyView(console);
+  }
+  setCurrentNone();
+}
+
 /* -------------------------------------------------------------------------- */
 /* --- Settings Update                                                    --- */
 /* -------------------------------------------------------------------------- */
@@ -589,33 +648,22 @@ Settings.onWindowSettings(() => {
   if (synchronize) {
     try {
       synchronize = false;
-      const state = LAB.getValue();
       const settings = Settings.getWindowSettings(
         'ivette.laboratory', jLabSettings, defaultSettings
       );
-      let selectTab: viewId = '';
-      settings.tabs.forEach((tab, index) => {
-        const view = VIEW.getElement(tab.view);
-        if (view !== undefined) {
-          applyFavorite(view, true);
-          if (index === settings.tabIndex)
-            selectTab = tab.view;
-        }
+      let modified = false;
+      const state = LAB.getValue();
+      const newTabs = copyMap(state.tabs);
+      saveTab(newTabs, state);
+      settings.tabs.forEach(tab => {
+        if (updateTab(newTabs, tab)) modified = true;
       });
+      const newDock = copyMap(state.docked);
       settings.dock.forEach(dock => {
-        const comp = COMPONENT.getElement(dock.comp);
-        if (comp !== undefined && !state.docked.has(comp.id))
-          applyDock(comp, dock.position);
+        if (updateDock(newDock, dock)) modified = true;
       });
-      if (!state.tabKey) {
-        if (selectTab)
-          applyTab(selectTab);
-        else {
-          const console = VIEW.getElement('ivette.console');
-          if (console !== undefined) applyView(console);
-        }
-        setCurrentNone();
-      }
+      if (modified) LAB.setValue({ ...state, tabs: newTabs, docked: newDock });
+      if (!state.tabKey) updateIndex( settings );
     } finally {
       synchronize = true;
     }
@@ -632,7 +680,6 @@ export function useState(): LabViewState {
 }
 
 export interface ViewStatus {
-  favorite: boolean;
   displayed: boolean;
   layout: Layout;
 }
@@ -642,10 +689,9 @@ export function getViewStatus(
   viewId: viewId
 ): ViewStatus {
   const tab = state.tabs.get(viewId);
-  const favorite = tab ? tab.custom === 0 : false;
   const displayed = tab ? tab.key === state.tabKey : false;
   const layout = displayed ? state.stack[0] : tab?.stack[0];
-  return { favorite, displayed, layout: layout ?? defaultLayout };
+  return { displayed, layout: layout ?? defaultLayout };
 }
 
 export interface ComponentStatus {
@@ -846,7 +892,7 @@ function LayoutMenu(): JSX.Element | null {
 type NotificationKind = 'message' | 'warning' | 'error';
 
 export interface Notification {
-  kind?: NotificationKind;
+  kind: NotificationKind;
   label: string;
   title?: string;
 }
@@ -986,14 +1032,13 @@ export function LabView(): JSX.Element {
 
 interface ViewItemProps {
   view: Ivette.ViewLayoutProps;
-  favorite: boolean;
   selected: boolean;
   displayed: boolean;
   layout: Layout | undefined;
 }
 
 export function ViewItem(props: ViewItemProps): JSX.Element {
-  const { view, favorite, displayed, selected, layout } = props;
+  const { view, displayed, selected, layout } = props;
   const { id, label: vname, title: vtitle } = view;
 
   const onSelection = (_evt: React.MouseEvent): void => {
@@ -1001,7 +1046,7 @@ export function ViewItem(props: ViewItemProps): JSX.Element {
     applyView(view);
   };
 
-  const icon = favorite ? 'FAVORITE' : 'DISPLAY';
+  const icon = 'DISPLAY';
   const modified =
     (layout !== undefined &&
       !compareLayout(layout, makeViewLayout(view.layout)));
@@ -1013,13 +1058,10 @@ export function ViewItem(props: ViewItemProps): JSX.Element {
   const onContextMenu = (): void => {
     setCurrentView(id);
     const onDisplay = (): void => applyView(view);
-    const onFavorite = (): void => applyFavorite(view, !favorite);
     const onRestore = (): void => restoreDefault(view.id);
     const onDuplicate = (): void => duplicateView(view);
-    const favAction = !favorite ? 'Add to Favorite' : 'Remove from Favorite';
     Dome.popupMenu([
       { label: 'Display View', enabled: !displayed, onClick: onDisplay },
-      { label: favAction, onClick: onFavorite },
       { label: 'Duplicate View', onClick: onDuplicate },
       { label: 'Restore Default', enabled: modified, onClick: onRestore },
     ]);
@@ -1044,14 +1086,12 @@ function ViewSection(): JSX.Element {
   const items = views.map((view) => {
     const { id } = view;
     const tab = tabs.get(id);
-    const favorite = tab ? tab.custom === 0 : false;
     const displayed = tab ? tab.key === tabKey : false;
     const layout = displayed ? stack[0] : tab?.stack[0];
     return (
       <ViewItem
         key={id}
         view={view}
-        favorite={favorite}
         layout={layout}
         displayed={displayed}
         selected={id === sideView} />
@@ -1199,9 +1239,10 @@ function ViewBar(): JSX.Element {
 }
 
 Ivette.registerSidebar({
-  id: "ivette.views",
-  label: "Views",
-  title: "View Selector",
+  id: 'ivette.views',
+  label: 'Views',
+  icon: 'DISPLAY',
+  title: 'Views & Components Selector',
   children: <ViewBar />,
 });
 
@@ -1295,7 +1336,6 @@ function TabView(props: TabViewProps): JSX.Element | null {
   const layout = selected ? props.layout : top;
   const modified = !compareLayout(layout, makeViewLayout(view.layout));
   const vname = view.label;
-  const favorite = custom === 0;
   const tname = custom > 0 ? `${vname} ~ ${custom}` : vname;
   const label = modified ? `${tname}*` : tname;
   const tdup = custom > 0 ? 'Custom ' : '';
@@ -1306,19 +1346,15 @@ function TabView(props: TabViewProps): JSX.Element | null {
   const onClose = (): void => closeTab(key);
   const onContextMenu = (): void => {
     const onDisplay = (): void => applyTab(key);
-    const onFavorite = (): void => applyFavorite(view, !favorite);
     const onRestore = (): void => restoreDefault(key);
-    const favAction = !favorite ? 'Add to Favorite' : 'Remove from Favorite';
     Dome.popupMenu([
       { label: 'Display View', enabled: !selected, onClick: onDisplay },
-      { label: favAction, display: custom <= 0, onClick: onFavorite },
       { label: 'Restore Default', enabled: modified, onClick: onRestore },
-      { label: 'Close Tab', display: custom < 0, onClick: onClose },
+      { label: 'Close Tab', display: custom <= 0, onClick: onClose },
     ]);
   };
 
-  const icon =
-    favorite ? (selected ? 'FAVORITE' : 'STAR') : 'DISPLAY';
+  const icon = 'DISPLAY';
 
   return (
     <Toolbar.Button
@@ -1333,8 +1369,6 @@ function TabView(props: TabViewProps): JSX.Element | null {
       <IconButton
         className='labview-tab-closing'
         icon='CIRC.CLOSE'
-        visible={!favorite}
-        enabled={!favorite}
         onClick={onClose}
       />
     </Toolbar.Button>
diff --git a/ivette/src/ivette/prefs.tsx b/ivette/src/ivette/prefs.tsx
index dd7d28a72637e6c1ddca913f6d2e3b8aae14ea8a..6ccba652084432a65c1c306b87ead31d30237cac 100644
--- a/ivette/src/ivette/prefs.tsx
+++ b/ivette/src/ivette/prefs.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/ivette/search.tsx b/ivette/src/ivette/search.tsx
index 4a9fdc377fabfba4298a2bd69bd5143da7dc40f9..ea24e454b388a9714e02c68a8466c40c44c366f7 100644
--- a/ivette/src/ivette/search.tsx
+++ b/ivette/src/ivette/search.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/ivette/state.tsx b/ivette/src/ivette/state.tsx
index a2a171553ba9e61257a9fd316cecc6740e0ea07c..45eb093c0e5593752641e422efe14b5cf82fe07f 100644
--- a/ivette/src/ivette/state.tsx
+++ b/ivette/src/ivette/state.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/main/index.ts b/ivette/src/main/index.ts
index 4173f0a50ebd3a5c2414378ccc512906faaa4fd8..39f811160dd2ab6449636b55b75a62b586188f85 100644
--- a/ivette/src/main/index.ts
+++ b/ivette/src/main/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/preload/index.d.ts b/ivette/src/preload/index.d.ts
index a65d8dd5880700ae59e70dd064be1d67773b6282..2182a87cf5773645f49e8ec93e9a3f6551860616 100644
--- a/ivette/src/preload/index.d.ts
+++ b/ivette/src/preload/index.d.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/preload/index.ts b/ivette/src/preload/index.ts
index e9f829edb0acf1f6cfe8b3c3f536989979efcbf2..961a9f630469e198c6c8981ba0ea97ba7cedb75e 100644
--- a/ivette/src/preload/index.ts
+++ b/ivette/src/preload/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/renderer/Application.tsx b/ivette/src/renderer/Application.tsx
index a83da17f7b9ef2631873221f82f922946df5f7ba..fb0bee104ec6596110aa80c6db45ff981ea57b9b 100644
--- a/ivette/src/renderer/Application.tsx
+++ b/ivette/src/renderer/Application.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/renderer/Controller.tsx b/ivette/src/renderer/Controller.tsx
index 27a1688bb04ebca4c1c034c654523cc32c8e33b4..6a9cfe884082257f5064a19845cd02224dea0ff3 100644
--- a/ivette/src/renderer/Controller.tsx
+++ b/ivette/src/renderer/Controller.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -416,7 +416,7 @@ Server.onStatus((s: Server.Status) => {
       return;
     case Server.Status.FAILURE:
       Display.showError('Frama-C Server Failure');
-      Display.alertComponent('ivette.console');
+      Display.alertComponent('fc.kernel.console');
       return;
   }
 });
@@ -443,7 +443,9 @@ export const Status = (): JSX.Element => {
       led = 'active';
       blink = pending > 0;
       running = 'ON';
-      title = 'Server is running';
+      title = pending > 0
+        ? `Server running (${pending} pending requests)`
+        : 'Server running (idle)';
       break;
     case Server.Status.CMD:
       led = 'positive';
@@ -473,7 +475,7 @@ export const Status = (): JSX.Element => {
 
   return (
     <>
-      <LED status={led} blink={blink} />
+      <LED status={led} title={title} blink={blink} />
       <Code label={running} title={title} />
     </>
   );
diff --git a/ivette/src/renderer/Messages.tsx b/ivette/src/renderer/Messages.tsx
index bb7ccfb467d4892493236569dc04d93b03cd6e57..7d306012b9a0c1b5740cf094a6d48b3f81f80d68 100644
--- a/ivette/src/renderer/Messages.tsx
+++ b/ivette/src/renderer/Messages.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -203,7 +203,7 @@ function filterMessage(
 // --------------------------------------------------------------------------
 
 function Section(p: Forms.SectionProps): JSX.Element {
-  const settings = `ivette.messages.filter.${p.label}`;
+  const settings = `fc.kernel.messages.filter.${p.label}`;
   return (
     <Forms.Section label={p.label} unfold settings={settings}>
       {p.children}
@@ -469,7 +469,7 @@ export function RenderMessages(): JSX.Element {
   );
 
   const [showFilter, flipFilter] =
-    Dome.useFlipSettings('ivette.messages.showFilter', true);
+    Dome.useFlipSettings('fc.kernel.messages.showFilter', true);
 
   const MessagePanel = (
     <Vbox style={{ height: '100%' }}>
@@ -497,12 +497,12 @@ export function RenderMessages(): JSX.Element {
         />
       </TitleBar>
       <RSplit
-        settings="ivette.messages.filterSplit"
+        settings="fc.kernel.messages.filterSplit"
         defaultPosition={225}
         unfold={showFilter}
       >
         <BSplit
-          settings="ivette.messages.messageSplit"
+          settings="fc.kernel.messages.messageSplit"
           defaultPosition={90}
           unfold={text !== ''}
         >
@@ -511,7 +511,7 @@ export function RenderMessages(): JSX.Element {
             sorting={model}
             selection={selectedMsg?.key}
             onSelection={onMessageSelection}
-            settings="ivette.messages.table"
+            settings="fc.kernel.messages.table"
           >
             <MessageColumns />
           </Table>
@@ -551,7 +551,7 @@ States.onSyncArray(Kernel.message, () => {
   const many = errors > 0 ? 's' : '';
   if (errors) {
     Display.showError(`Frama-C/${from} Error${many}`);
-    Display.alertComponent('ivette.messages');
+    Display.alertComponent('fc.kernel.messages');
   }
 });
 
diff --git a/ivette/src/renderer/Preferences.tsx b/ivette/src/renderer/Preferences.tsx
index f524262984eefe9f21981a3d7f71725b14351bd5..d8b6a5649ec0f5980f8fbaa4a81d18f592e13722 100644
--- a/ivette/src/renderer/Preferences.tsx
+++ b/ivette/src/renderer/Preferences.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/renderer/Sidebar.tsx b/ivette/src/renderer/Sidebar.tsx
index f2da4a6c3fe0342f06f634e9e85632e46b02a0c0..b9c6b5d71b47a17618d93fb2044c229b3b9727ae 100644
--- a/ivette/src/renderer/Sidebar.tsx
+++ b/ivette/src/renderer/Sidebar.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -26,6 +26,7 @@
 
 import React from 'react';
 import * as Dome from 'dome';
+import { Icon } from 'dome/controls/icons';
 import { SideBar } from 'dome/frame/sidebars';
 import { Catch } from 'dome/errors';
 import { classes } from 'dome/misc/utils';
@@ -42,16 +43,17 @@ interface SelectorProps extends SidebarProps {
 }
 
 function Selector(props: SelectorProps): JSX.Element {
-  const { id, iconPath, selected, setSelected, label, title } = props;
+  const { id, icon, selected, setSelected, label } = props;
   const className = classes(
     'sidebar-selector',
     'dome-color-frame',
     selected === id && 'sidebar-selector-selected',
   );
   const onClick = React.useCallback(() => setSelected(id), [setSelected, id]);
+  const title = props.title ?? `${label} Sidebar`;
   const component =
-    iconPath
-    ? <img className="sidebar-selector-icon" src={iconPath} alt={label} />
+    icon
+    ? <Icon size={20} className="sidebar-selector-icon" id={icon}/>
     : <label className="sidebar-selector-label">{label}</label>;
   return (
     <div className={className} title={title} onClick={onClick}>
diff --git a/ivette/src/renderer/command.tsx b/ivette/src/renderer/command.tsx
index 02771be72ecfc77a8b04db37cc9ba686d196bb01..5258e78e3ef5343ab1b8ead4a2996e9a613c18a7 100644
--- a/ivette/src/renderer/command.tsx
+++ b/ivette/src/renderer/command.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -26,7 +26,7 @@ import * as Messages from './Messages';
 import * as Ivette from 'ivette';
 
 Ivette.registerComponent({
-    id: 'ivette.console',
+    id: 'fc.kernel.console',
     label: 'Console',
     title: 'Frama-C Command Line',
     preferredPosition: 'AB',
@@ -34,7 +34,7 @@ Ivette.registerComponent({
 });
 
 Ivette.registerComponent({
-    id: 'ivette.messages',
+    id: 'fc.kernel.messages',
     label: 'Messages',
     title: 'Frama-C Messages',
     preferredPosition: 'CD',
@@ -43,7 +43,7 @@ Ivette.registerComponent({
 
 Ivette.registerView({
     id: 'ivette.console',
-    label: 'Frama-C',
+    label: 'Console',
     title: 'Frama-C Console & Messages',
-    layout: { AB: 'ivette.console', CD: 'ivette.messages' },
+    layout: { AB: 'fc.kernel.console', CD: 'fc.kernel.messages' },
 });
diff --git a/ivette/src/renderer/index.ts b/ivette/src/renderer/index.ts
index c10e89652077d05d791aed5f9f512b387ff4b9d6..7f65fc7be6a729692695ad5d972a8ca16dcd6fa3 100644
--- a/ivette/src/renderer/index.ts
+++ b/ivette/src/renderer/index.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/renderer/style.css b/ivette/src/renderer/style.css
index c922803099d4e662c55eaf6f9b2011d8d93dbe59..45bf4b36ca7ab6efc186b6f0f62173c7216652af 100644
--- a/ivette/src/renderer/style.css
+++ b/ivette/src/renderer/style.css
@@ -19,34 +19,36 @@
 }
 
 .sidebar-selector {
+    margin: 0px;
+    min-height: 40px;
     min-width: 35px;
     text-align: center;
+    border-left: solid 3px transparent;
 }
 
 .sidebar-selector-icon {
-    margin-top: 5px;
-    margin-left: 25%;
-    margin-right: 25%;
-    width: 25px;
-    height: 25px;
+    position: relative;
+    top: 6px;
 }
 
-.sidebar-selector-icon:hover {
-    background-color: var(--background-profound-hover);
+.sidebar-selector-label {
+    padding-top: 6px;
 }
 
 .sidebar-selector-label {
     display: inline-block;
     margin: 5px;
     font-weight: bold;
+    cursor: pointer;
 }
 
 .sidebar-selector:hover {
-    background-color: var(--background-profound-hover);
+    background-color: var(--default-button-hover);
 }
 
 .sidebar-selector-selected {
     background-color: var(--background-profound);
+    border-color: var(--selected-button-img);
 }
 
 .component-info {
@@ -69,20 +71,6 @@
     left: -8px;
 }
 
-.labview-stock:hover {
-    background: var(--background-profound);
-}
-
-.labview-stock:hover * {
-    cursor: move;
-}
-
-.labview-stock.dome-dragging {
-    border-radius: 4px;
-    background: var(--background-profound);
-    border: thin solid black;
-}
-
 .labview-content {
     height: 100%;
     background: var(--background);
@@ -93,9 +81,12 @@
     height: 24px
 }
 
+.labview-titlebar .dome-xIcon {
+    cursor: pointer;
+}
+
 .labview-handle {
     flex: 1 1 auto;
-    cursor: move;
 }
 
 .labview-close:hover {
@@ -124,12 +115,11 @@
 
 .labview-notification-item {
     flex: 1 1 auto;
-    max-width: 200px;
+    max-width: 400px;
     border: thin solid var(--border);
     border-radius: 8px;
     margin: 2px 1px 2px 0px;
-    padding: 2px 10px 3px 2px;
-    font-size: smaller;
+    padding: 3px 15px 1px 4px;
 }
 
 .labview-notification-message {
@@ -214,8 +204,6 @@
     fill: var(--info-text);
     color: var(--info-text);
     font-size: smaller;
-    background: var(--background);
-    background-image: none;
     border-radius: 8px;
     padding-left: 10px;
 }
@@ -233,16 +221,6 @@
     color: var(--text);
 }
 
-.labview-tab.dome-selected:hover {
-    background: var(--default-button-hover);
-}
-
-.labview-tab.dome-selected {
-    background: var(--background-softer);
-    padding-right: 0px;
-    min-width: 200px;
-}
-
 .labview-docked {
     font-size: smaller;
     background: var(--background-softer);
diff --git a/ivette/src/sandbox/dotdiagram.tsx b/ivette/src/sandbox/dotdiagram.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..191617f28bc1a6299abcf24c7ad53caf922ebd39
--- /dev/null
+++ b/ivette/src/sandbox/dotdiagram.tsx
@@ -0,0 +1,130 @@
+/* ************************************************************************ */
+/*                                                                          */
+/*   This file is part of Frama-C.                                          */
+/*                                                                          */
+/*   Copyright (C) 2007-2024                                                */
+/*     CEA (Commissariat à l'énergie atomique et aux énergies               */
+/*          alternatives)                                                   */
+/*                                                                          */
+/*   you can redistribute it and/or modify it under the terms of the GNU    */
+/*   Lesser General Public License as published by the Free Software        */
+/*   Foundation, version 2.1.                                               */
+/*                                                                          */
+/*   It is distributed in the hope that it will be useful,                  */
+/*   but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
+/*   GNU Lesser General Public License for more details.                    */
+/*                                                                          */
+/*   See the GNU Lesser General Public License version 2.1                  */
+/*   for more details (enclosed in the file licenses/LGPLv2.1).             */
+/*                                                                          */
+/* ************************************************************************ */
+
+/* -------------------------------------------------------------------------- */
+/* --- Sandbox Testing for Diagram component                              --- */
+/* -------------------------------------------------------------------------- */
+
+import React from 'react';
+import { Scroll } from 'dome/layout/boxes';
+import { HSplit } from 'dome/layout/splitters';
+import { Diagram, Node, Edge, Cluster } from 'dome/graph/diagram';
+import { registerSandbox } from 'ivette';
+
+// --------------------------------------------------------------------------
+// --- Init functions for nodes and edges
+// --------------------------------------------------------------------------
+
+const nodes: Node[] = [
+  { id: 'A' },
+  { id: 'B', shape: 'diamond' },
+  {
+    id: 'R',
+    shape: [
+      { label: 'Dotted "c"', port: 'c' },
+      ['D1', 'D2'],
+      { label: 'Dashed "e"', port: 'e' },
+    ]
+  },
+  { id: 'white', color: 'white', cluster: 'BG' },
+  { id: 'grey', color: 'grey', cluster: 'BG' },
+  { id: 'dark', color: 'dark', cluster: 'BG' },
+  { id: 'primary', color: 'primary', cluster: 'BG' },
+  { id: 'selected', color: 'selected', cluster: 'BG' },
+  { id: 'green', color: 'green', cluster: 'BG' },
+  { id: 'orange', color: 'orange', cluster: 'BG' },
+  { id: 'red', color: 'red', cluster: 'BG' },
+  { id: 'yellow', color: 'yellow', cluster: 'BG' },
+  { id: 'blue', color: 'blue', cluster: 'BG' },
+  { id: 'pink', color: 'pink', cluster: 'BG' },
+  { id: 'X' }, { id: 'Y' }
+];
+
+const edges: Edge[] = [
+  { source: 'A', target: 'R', targetPort: 'c', headLabel: 'c', line: 'dotted' },
+  { source: 'R', target: 'B', sourcePort: 'e', tailLabel: 'e', line: 'dashed' },
+  { source: 'primary', target: 'selected' },
+  { source: 'white', target: 'grey' },
+  { source: 'grey', target: 'dark' },
+  { source: 'green', target: 'orange' },
+  { source: 'orange', target: 'red' },
+  { source: 'yellow', target: 'pink' },
+  { source: 'pink', target: 'blue' },
+  { source: 'white', target: 'white', color: 'white' },
+  { source: 'grey', target: 'grey', color: 'grey' },
+  { source: 'dark', target: 'dark', color: 'dark' },
+  { source: 'primary', target: 'primary', color: 'primary' },
+  { source: 'selected', target: 'selected', color: 'selected' },
+  { source: 'green', target: 'green', color: 'green' },
+  { source: 'orange', target: 'orange', color: 'orange' },
+  { source: 'red', target: 'red', color: 'red' },
+  { source: 'yellow', target: 'yellow', color: 'yellow' },
+  { source: 'blue', target: 'blue', color: 'blue' },
+  { source: 'pink', target: 'pink', color: 'pink' },
+  {
+    source: 'X', target: 'Y',
+    tail: 'box', head: 'dot',
+    label: '*', title: 'box to dot'
+  },
+];
+
+function makeCluster(s: string | undefined): Cluster {
+  const color = nodes.find(n => n.id === s)?.color;
+  return { id: 'BG', title: 'Background Cluster', color };
+}
+
+function DiagramSample(): JSX.Element {
+  const [model, setModel] = React.useState('');
+  const [selected, setSelected] = React.useState<string>();
+  const clusters = React.useMemo(() => [makeCluster(selected)], [selected]);
+  return (
+    <HSplit settings='sandbox.diagram.split'>
+      <Scroll>
+        <pre>Selected: {selected}</pre>
+        <pre>
+          {model}
+        </pre>
+      </Scroll>
+      <Diagram
+        nodes={nodes}
+        edges={edges}
+        clusters={clusters}
+        selected={selected}
+        onModelChanged={setModel}
+        onSelection={setSelected}
+      />
+    </HSplit >
+  );
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Sandbox                                                            --- */
+/* -------------------------------------------------------------------------- */
+
+registerSandbox({
+  id: 'sandbox.diagram',
+  label: 'Diagram',
+  preferredPosition: 'ABCD',
+  children: <DiagramSample />,
+});
+
+// --------------------------------------------------------------------------
diff --git a/ivette/src/sandbox/forcegraph.tsx b/ivette/src/sandbox/forcegraph.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..6b0bc9c16d8d4fb2e325a24654fd09384bcbdb26
--- /dev/null
+++ b/ivette/src/sandbox/forcegraph.tsx
@@ -0,0 +1,125 @@
+/* ************************************************************************ */
+/*                                                                          */
+/*   This file is part of Frama-C.                                          */
+/*                                                                          */
+/*   Copyright (C) 2007-2024                                                */
+/*     CEA (Commissariat à l'énergie atomique et aux énergies               */
+/*          alternatives)                                                   */
+/*                                                                          */
+/*   you can redistribute it and/or modify it under the terms of the GNU    */
+/*   Lesser General Public License as published by the Free Software        */
+/*   Foundation, version 2.1.                                               */
+/*                                                                          */
+/*   It is distributed in the hope that it will be useful,                  */
+/*   but WITHOUT ANY WARRANTY; without even the implied warranty of         */
+/*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          */
+/*   GNU Lesser General Public License for more details.                    */
+/*                                                                          */
+/*   See the GNU Lesser General Public License version 2.1                  */
+/*   for more details (enclosed in the file licenses/LGPLv2.1).             */
+/*                                                                          */
+/* ************************************************************************ */
+
+/* -------------------------------------------------------------------------- */
+/* --- Sandbox Testing for Force Graph component                          --- */
+/* -------------------------------------------------------------------------- */
+
+import React from 'react';
+import { Code } from 'dome/controls/labels';
+import { ToolBar, ButtonGroup, Button, Filler } from 'dome/frame/toolbars';
+import { Graph, Node, Edge, Layout } from 'dome/graph/graph';
+import { registerSandbox } from 'ivette';
+
+// --------------------------------------------------------------------------
+// --- Init functions for nodes and edges
+// --------------------------------------------------------------------------
+
+let Kid = 0;
+const random = (n: number): number => Math.floor(Math.random() * n);
+
+function addNode(nodes: readonly Node[]): readonly Node[] {
+  const k = Kid++;
+  return nodes.concat({ id: `N${k}`, label: `Node #${k}` });
+}
+
+function addEdge(
+  nodes: readonly Node[],
+  edges: readonly Edge[]
+): readonly Edge[] {
+  const n = nodes.length;
+  if (n <= 2) return edges;
+  const source = nodes[random(n)].id;
+  const target = nodes[random(n)].id;
+  return edges.concat({ source, target });
+}
+
+// --------------------------------------------------------------------------
+// --- Main force graph component
+// --------------------------------------------------------------------------
+
+function GraphSample(): JSX.Element {
+  // Set initial configs
+  const [nodes, setNodes] = React.useState<readonly Node[]>([]);
+  const [edges, setEdges] = React.useState<readonly Edge[]>([]);
+  const [layout, setLayout] = React.useState<Layout>('2D');
+  const [selected, setSelected] = React.useState<string>();
+
+  return (
+    <>
+      <ToolBar>
+        <ButtonGroup>
+          <Button
+            label='2D'
+            selected={layout === '2D'}
+            onClick={() => setLayout('2D')} />
+          <Button
+            label='3D'
+            selected={layout === '3D'}
+            onClick={() => setLayout('3D')} />
+        </ButtonGroup>
+        <Code>Selected: {selected ?? '-'}</Code>
+        <Filler/>
+        <Code>Nodes: {nodes.length} Edges: {edges.length}</Code>
+        <Button
+          icon='CIRC.PLUS'
+          label='Node'
+          onClick={() => setNodes(addNode(nodes))}
+        />
+        <Button
+          icon='CIRC.PLUS'
+          label='Edge'
+          onClick={() => setEdges(addEdge(nodes, edges))}
+        />
+        <Button
+          icon='CIRC.CLOSE' kind='negative'
+          label='Clear'
+          onClick={() => {
+            setEdges([]);
+            setNodes([]);
+            setSelected(undefined);
+          }}
+        />
+      </ToolBar>
+      <Graph
+        nodes={nodes}
+        edges={edges}
+        layout={layout}
+        selected={selected}
+        onSelection={setSelected}
+      />
+    </>
+  );
+}
+
+/* -------------------------------------------------------------------------- */
+/* --- Sandbox                                                            --- */
+/* -------------------------------------------------------------------------- */
+
+registerSandbox({
+  id: 'sandbox.graph',
+  label: 'Graph 2D/3D',
+  preferredPosition: 'ABCD',
+  children: <GraphSample />,
+});
+
+// --------------------------------------------------------------------------
diff --git a/ivette/src/sandbox/icons.tsx b/ivette/src/sandbox/icons.tsx
index 9cf1b1153066f79a45469a020841d4ac6fd3f72c..cc58a734cebb0c791c1d6e54aa9dc5f6251ef696 100644
--- a/ivette/src/sandbox/icons.tsx
+++ b/ivette/src/sandbox/icons.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/sandbox/qsplit.tsx b/ivette/src/sandbox/qsplit.tsx
index b4e75051a2e6f826ba996c649e0aa740b0e62ad5..bf6e17598efcac7d38b3217fe9e9cf11fc66a0f4 100644
--- a/ivette/src/sandbox/qsplit.tsx
+++ b/ivette/src/sandbox/qsplit.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/sandbox/text.tsx b/ivette/src/sandbox/text.tsx
index e1e9bf2c6aebc63248b5884af63513bc13746ac8..c5ed2b1faf10f8e6416d543a977114d9383fda7b 100644
--- a/ivette/src/sandbox/text.tsx
+++ b/ivette/src/sandbox/text.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/src/sandbox/usednd.tsx b/ivette/src/sandbox/usednd.tsx
index 1eac43ab14f0b516573700eba9ba1aa275c8433b..459278bceb254e07b34b0f69101f87a244a36f74 100644
--- a/ivette/src/sandbox/usednd.tsx
+++ b/ivette/src/sandbox/usednd.tsx
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/static/icon.png b/ivette/static/icon.png
index a200eb26e9168a19b724a8c1339766f9390480ae..dbc7315198e801ac8f789afeef53d9d6508794e6 100644
Binary files a/ivette/static/icon.png and b/ivette/static/icon.png differ
diff --git a/ivette/static/icon256.png b/ivette/static/icon256.png
deleted file mode 100644
index 3aa5392eb49f9f04f91b746c95f9461c9d25a5ca..0000000000000000000000000000000000000000
Binary files a/ivette/static/icon256.png and /dev/null differ
diff --git a/ivette/static/icon512.png b/ivette/static/icon512.png
deleted file mode 100644
index b2f56ed23cf18218bbe37ddc9215b235bd74ccc4..0000000000000000000000000000000000000000
Binary files a/ivette/static/icon512.png and /dev/null differ
diff --git a/ivette/tests/libs/e2eService.ts b/ivette/tests/libs/e2eService.ts
index 6b7c6dfe21818c2f76941a6b29700dae30f96146..52a67c7f899262754e0359fde52ae87ba79d25c3 100644
--- a/ivette/tests/libs/e2eService.ts
+++ b/ivette/tests/libs/e2eService.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -83,6 +83,6 @@ export async function testFileIsLoaded(window: Page, file: string):
   ).toBeVisible();
 
   // Check if the main function is visible in the functions view
-  await locs.getFunctionsSideBar(window).click();
-  await expect(locs.getMainFunction(window)).toBeVisible();
+  // does not work: need to click on AST view...
+  // await expect(locs.getMainFunction(window)).toBeVisible();
 }
diff --git a/ivette/tests/libs/locatorsUtil.ts b/ivette/tests/libs/locatorsUtil.ts
index 552f469314525de83b86a097fbe3a02a2541aa4a..7637a7ed6155ecb3aa8289dfaf4d8f6384bdc54e 100644
--- a/ivette/tests/libs/locatorsUtil.ts
+++ b/ivette/tests/libs/locatorsUtil.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
@@ -55,13 +55,6 @@ export function getConsoleComponent(window: Page): Locator {
   return window.locator(".cm-global-box");
 }
 
-/**
- * Locator to select the Functions side bar when loading a file
- */
-export function getFunctionsSideBar(window: Page): Locator {
-  return window.getByText("AST").first();
-}
-
 export function getMainFunction(window: Page): Locator {
   return window.getByText("main", { exact: true });
 }
diff --git a/ivette/tests/src/server-connection-file.spec.ts b/ivette/tests/src/server-connection-file.spec.ts
index cd59d88d2455f4ca8f3318e3f590eed245d52656..0a3920e2f9c2218eaf6c6fcedac4b0f8ffe221a5 100644
--- a/ivette/tests/src/server-connection-file.spec.ts
+++ b/ivette/tests/src/server-connection-file.spec.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/tests/src/server-connection.spec.ts b/ivette/tests/src/server-connection.spec.ts
index 474137284531328684ad2fdcb5703e50a9dd2942..9fcb82d27e3411a8cd1e24df0260161a9b91346a 100644
--- a/ivette/tests/src/server-connection.spec.ts
+++ b/ivette/tests/src/server-connection.spec.ts
@@ -2,7 +2,7 @@
 /*                                                                          */
 /*   This file is part of Frama-C.                                          */
 /*                                                                          */
-/*   Copyright (C) 2007-2023                                                */
+/*   Copyright (C) 2007-2024                                                */
 /*     CEA (Commissariat à l'énergie atomique et aux énergies               */
 /*          alternatives)                                                   */
 /*                                                                          */
diff --git a/ivette/yarn.lock b/ivette/yarn.lock
index 3637da3ac4476d9cf8d32b7b114fbd1da752c629..573ecf8a41acd737c6ebc929ed39fee2dce137db 100644
--- a/ivette/yarn.lock
+++ b/ivette/yarn.lock
@@ -2,6 +2,17 @@
 # yarn lockfile v1
 
 
+"3d-force-graph@^1.73":
+  version "1.73.3"
+  resolved "https://registry.yarnpkg.com/3d-force-graph/-/3d-force-graph-1.73.3.tgz#72c4c2dce7a40aae1e3de0cf4582abb330352e5f"
+  integrity sha512-azb65Lwn2yr/fJ4+qrxjmstVxogjzwJIZL/fdboCKBg6ph/FLW+xdvYFEBZW92XxBn1C8yRKS3d2VkVT3BzLSw==
+  dependencies:
+    accessor-fn "1"
+    kapsule "1"
+    three ">=0.118 <1"
+    three-forcegraph "1"
+    three-render-objects "^1.29"
+
 "7zip-bin@~5.2.0":
   version "5.2.0"
   resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz"
@@ -204,6 +215,13 @@
   dependencies:
     "@babel/helper-plugin-utils" "^7.22.5"
 
+"@babel/runtime@^7.17.8":
+  version "7.24.1"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.1.tgz#431f9a794d173b53720e69a6464abc6f0e2a5c57"
+  integrity sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==
+  dependencies:
+    regenerator-runtime "^0.14.0"
+
 "@babel/runtime@^7.23.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7":
   version "7.23.9"
   resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz"
@@ -595,6 +613,13 @@
   resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
   integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
 
+"@hpcc-js/wasm@^2.16.2":
+  version "2.16.2"
+  resolved "https://registry.yarnpkg.com/@hpcc-js/wasm/-/wasm-2.16.2.tgz#20a086356b9b0e3c5035bdc3c68eb04b3c0b43a6"
+  integrity sha512-THiidUMYR8/cIfFT3MVcWuRE7bQKh295nrFBxGvUNc4Nq8e2uU1LtiplHs7AUkJ0GxgvZoR+8TQ1/E3Qb/uE2g==
+  dependencies:
+    yargs "17.7.2"
+
 "@humanwhocodes/config-array@^0.11.14":
   version "0.11.14"
   resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
@@ -839,6 +864,11 @@
   resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz"
   integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
 
+"@tweenjs/tween.js@18 - 23":
+  version "23.1.1"
+  resolved "https://registry.yarnpkg.com/@tweenjs/tween.js/-/tween.js-23.1.1.tgz#0ae28ed9c635805557f78c2626464018d5f1b5e2"
+  integrity sha512-ZpboH7pCPPeyBWKf8c7TJswtCEQObFo3bOBYalm99NzZarATALYCo5OhbCa/n4RQyJyHfhkdx+hNrdL5ByFYDw==
+
 "@types/babel__core@^7.20.5":
   version "7.20.5"
   resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz"
@@ -887,6 +917,52 @@
   resolved "https://registry.yarnpkg.com/@types/cytoscape/-/cytoscape-3.19.16.tgz#c54ad4ff5c53a0046f42d1b08a11e730ad83dcc1"
   integrity sha512-A3zkjaZ6cOGyqEvrVuC1YUgiRSJhDZOj8Qhd1ALH2/+YxH2za1BOmR4RWQsKYHsc+aMP/IWoqg1COuUbZ39t/g==
 
+"@types/d3-color@^1":
+  version "1.4.5"
+  resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-1.4.5.tgz#23bb1afda325549c6314ab60aa2aa28c4c6b1c37"
+  integrity sha512-5sNP3DmtSnSozxcjqmzQKsDOuVJXZkceo1KJScDc1982kk/TS9mTPc6lpli1gTu1MIBF1YWutpHpjucNWcIj5g==
+
+"@types/d3-graphviz@^2.6.10":
+  version "2.6.10"
+  resolved "https://registry.yarnpkg.com/@types/d3-graphviz/-/d3-graphviz-2.6.10.tgz#eb2c8284db768c6880ff9bb13db81689121dcece"
+  integrity sha512-YsCRqNqS8QLlsKtF0FGIz42Z47B0sBIxMMn7L4ZdqZcrdk4foJOEPwwMH50Qe2PuZmSSZcWbdgUnj5W68xK0Qw==
+  dependencies:
+    "@types/d3-selection" "^1"
+    "@types/d3-transition" "^1"
+    "@types/d3-zoom" "^1"
+
+"@types/d3-interpolate@^1":
+  version "1.4.5"
+  resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-1.4.5.tgz#7964699575ec9c594a9a7aaea411a812ce6cd674"
+  integrity sha512-k9L18hXXv7OvK4PqW1kSFYIzasGOvfhPUWmHFkoZ8/ci99EAmY4HoF6zMefrHl0SGV7XYc7Qq2MNh8dK3edg5A==
+  dependencies:
+    "@types/d3-color" "^1"
+
+"@types/d3-selection@^1":
+  version "1.4.6"
+  resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-1.4.6.tgz#3e6056117b19d8bb6c729c872ca7234622099fb6"
+  integrity sha512-0MhJ/LzJe6/vQVxiYJnvNq5CD/MF6Qy0dLp4BEQ6Dz8oOaB0EMXfx1GGeBFSW+3VzgjaUrxK6uECDQj9VLa/Mg==
+
+"@types/d3-selection@^3.0.10":
+  version "3.0.10"
+  resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.10.tgz#98cdcf986d0986de6912b5892e7c015a95ca27fe"
+  integrity sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==
+
+"@types/d3-transition@^1":
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-1.3.5.tgz#5ef69ea917d6935b0a1db895a7e5698ba7a08af1"
+  integrity sha512-gVj9AXXkoj0yKr1jsPJFkKoYTEmSdaYh8W7XBeRIhcspFX9b3MSwLxTerVHeEPXer9kYLvZfAINk8HcjWhwZSQ==
+  dependencies:
+    "@types/d3-selection" "^1"
+
+"@types/d3-zoom@^1":
+  version "1.8.7"
+  resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-1.8.7.tgz#0afdcf771e6ea518f3a4b634bbb4c8e8979c65b1"
+  integrity sha512-HJWci3jXwFIuFKDqGn5PmuwrhZvuFdrnUmtSKCLXFAWyf2lAIUKMKh1/lHOkWBl/f4KVupGricJiqkQy+cVTog==
+  dependencies:
+    "@types/d3-interpolate" "^1"
+    "@types/d3-selection" "^1"
+
 "@types/debug@^4.1.6":
   version "4.1.7"
   resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz"
@@ -894,10 +970,10 @@
   dependencies:
     "@types/ms" "*"
 
-"@types/diff@^5.0.9":
-  version "5.0.9"
-  resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.0.9.tgz#31977962175079c2048315febeb8fd5f520192c6"
-  integrity sha512-RWVEhh/zGXpAVF/ZChwNnv7r4rvqzJ7lYNSmZSVTxjV0PBLf6Qu7RNg+SUtkpzxmiNkjCx0Xn2tPp7FIkshJwQ==
+"@types/diff@^5":
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/@types/diff/-/diff-5.2.1.tgz#cceae9c4b2dae5c6b8ab1ce1263601c255d87fb3"
+  integrity sha512-uxpcuwWJGhe2AR1g8hD9F5OYGCqjqWnBUQFD8gMZsDbv8oPHzxJF6iMO6n8Tk0AdzlxoaaoQhOYlIg/PukVU8g==
 
 "@types/estree@1.0.5":
   version "1.0.5"
@@ -933,10 +1009,10 @@
   dependencies:
     "@types/node" "*"
 
-"@types/lodash@^4.17.0":
-  version "4.17.0"
-  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3"
-  integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==
+"@types/lodash@^4":
+  version "4.17.4"
+  resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.4.tgz#0303b64958ee070059e3a7184048a55159fe20b7"
+  integrity sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==
 
 "@types/ms@*":
   version "0.7.31"
@@ -950,6 +1026,13 @@
   dependencies:
     undici-types "~5.26.4"
 
+"@types/node@^18":
+  version "18.19.33"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.33.tgz#98cd286a1b8a5e11aa06623210240bcc28e95c48"
+  integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==
+  dependencies:
+    undici-types "~5.26.4"
+
 "@types/node@^18.11.18":
   version "18.18.13"
   resolved "https://registry.npmjs.org/@types/node/-/node-18.18.13.tgz"
@@ -957,13 +1040,6 @@
   dependencies:
     undici-types "~5.26.4"
 
-"@types/node@^18.19.9":
-  version "18.19.26"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.26.tgz#18991279d0a0e53675285e8cf4a0823766349729"
-  integrity sha512-+wiMJsIwLOYCvUqSdKTrfkS8mpTp+MPINe6+Np4TAGFWWRWiBQ5kSq9nZGCSPkzx9mvT+uEukzpX4MOSCydcvw==
-  dependencies:
-    undici-types "~5.26.4"
-
 "@types/plist@^3.0.1":
   version "3.0.5"
   resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.5.tgz#9a0c49c0f9886c8c8696a7904dd703f6284036e0"
@@ -984,6 +1060,13 @@
   dependencies:
     "@types/react" "*"
 
+"@types/react-infinite-scroller@^1.2.5":
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/@types/react-infinite-scroller/-/react-infinite-scroller-1.2.5.tgz#7c770be59465f3aaa1b86377d792d52de5e74047"
+  integrity sha512-fJU1jhMgoL6NJFrqTM0Ob7tnd2sQWGxe2ESwiU6FZWbJK/VO/Er5+AOhc+e2zbT0dk5pLygqctsulOLJ8xnSzw==
+  dependencies:
+    "@types/react" "*"
+
 "@types/react-virtualized@^9.21.8":
   version "9.21.29"
   resolved "https://registry.yarnpkg.com/@types/react-virtualized/-/react-virtualized-9.21.29.tgz#480b647f43a42f8e414d1af49a0ccd9b16537655"
@@ -1237,6 +1320,11 @@ abbrev@^1.0.0:
   resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
   integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
 
+accessor-fn@1:
+  version "1.5.0"
+  resolved "https://registry.yarnpkg.com/accessor-fn/-/accessor-fn-1.5.0.tgz#9353e10194da404366657f47177cd9bcb4463ee7"
+  integrity sha512-dml7D96DY/K5lt4Ra2jMnpL9Bhw5HEGws4p1OAIxFFj9Utd/RxNfEO3T3f0QIWFNwQU7gNxH9snUfqF/zNkP/w==
+
 acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
@@ -1609,6 +1697,11 @@ base64-js@^1.3.1, base64-js@^1.5.1:
   resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
   integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
 
+"bezier-js@3 - 6":
+  version "6.1.4"
+  resolved "https://registry.yarnpkg.com/bezier-js/-/bezier-js-6.1.4.tgz#c7828f6c8900562b69d5040afb881bcbdad82001"
+  integrity sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==
+
 bl@^4.0.3, bl@^4.1.0:
   version "4.1.0"
   resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
@@ -1824,6 +1917,13 @@ caniuse-lite@^1.0.30001541:
   resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz"
   integrity sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==
 
+canvas-color-tracker@1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/canvas-color-tracker/-/canvas-color-tracker-1.2.1.tgz#c552872f8f254bac3e74ea4cc7fed3bb19859bf1"
+  integrity sha512-i5clg2pEdaWqHuEM/B74NZNLkHh5+OkXbA/T4iaBiaNDagkOCXkLNrhqUfdUugsRwuaNRU20e/OygzxWRor3yg==
+  dependencies:
+    tinycolor2 "^1.6.0"
+
 chalk@^2.4.2:
   version "2.4.2"
   resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
@@ -2112,11 +2212,41 @@ cytoscape@:
     heap "^0.2.6"
     lodash "^4.17.21"
 
+"d3-array@1 - 3", "d3-array@2 - 3", "d3-array@2.10.0 - 3":
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5"
+  integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==
+  dependencies:
+    internmap "1 - 2"
+
+d3-binarytree@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/d3-binarytree/-/d3-binarytree-1.0.2.tgz#ed43ebc13c70fbabfdd62df17480bc5a425753cc"
+  integrity sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==
+
+"d3-color@1 - 3":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2"
+  integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==
+
 d3-dispatch@1, d3-dispatch@^1.0.3:
   version "1.0.6"
   resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz"
   integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==
 
+"d3-dispatch@1 - 3", d3-dispatch@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz"
+  integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==
+
+"d3-drag@2 - 3":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz"
+  integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-selection "3"
+
 d3-drag@^1.0.4:
   version "1.2.5"
   resolved "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz"
@@ -2125,16 +2255,97 @@ d3-drag@^1.0.4:
     d3-dispatch "1"
     d3-selection "1"
 
+"d3-ease@1 - 3":
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz"
+  integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==
+
+"d3-force-3d@2 - 3":
+  version "3.0.5"
+  resolved "https://registry.npmjs.org/d3-force-3d/-/d3-force-3d-3.0.5.tgz"
+  integrity sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==
+  dependencies:
+    d3-binarytree "1"
+    d3-dispatch "1 - 3"
+    d3-octree "1"
+    d3-quadtree "1 - 3"
+    d3-timer "1 - 3"
+
+"d3-format@1 - 3", d3-format@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz"
+  integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==
+
+d3-graphviz@^5:
+  version "5.4.0"
+  resolved "https://registry.yarnpkg.com/d3-graphviz/-/d3-graphviz-5.4.0.tgz#a63ecb4345ff31aacb8813c74533fdd1ec4304ed"
+  integrity sha512-e/kvvdfIfARiB4bF9/vDgY6WwvLxGCny2tS6ozUaOwgbL/CfaBWT7EwvCH5PiDQuvdx+xscnxjCsoUjw2CR86A==
+  dependencies:
+    "@hpcc-js/wasm" "^2.16.2"
+    d3-dispatch "^3.0.1"
+    d3-format "^3.1.0"
+    d3-interpolate "^3.0.1"
+    d3-path "^3.1.0"
+    d3-timer "^3.0.1"
+    d3-transition "^3.0.1"
+    d3-zoom "^3.0.0"
+
+"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz"
+  integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==
+  dependencies:
+    d3-color "1 - 3"
+
+d3-octree@1:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/d3-octree/-/d3-octree-1.0.2.tgz"
+  integrity sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==
+
 d3-path@1:
   version "1.0.9"
   resolved "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz"
   integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==
 
+d3-path@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526"
+  integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==
+
+"d3-quadtree@1 - 3":
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz"
+  integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==
+
+"d3-scale-chromatic@1 - 3":
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz"
+  integrity sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==
+  dependencies:
+    d3-color "1 - 3"
+    d3-interpolate "1 - 3"
+
+"d3-scale@1 - 4":
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz"
+  integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==
+  dependencies:
+    d3-array "2.10.0 - 3"
+    d3-format "1 - 3"
+    d3-interpolate "1.2.0 - 3"
+    d3-time "2.1.1 - 3"
+    d3-time-format "2 - 4"
+
 d3-selection@1:
   version "1.4.2"
   resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz"
   integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==
 
+"d3-selection@2 - 3", d3-selection@3, d3-selection@^3:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz"
+  integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==
+
 d3-shape@^1.3.5:
   version "1.3.7"
   resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz"
@@ -2142,11 +2353,52 @@ d3-shape@^1.3.5:
   dependencies:
     d3-path "1"
 
+"d3-time-format@2 - 4":
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz"
+  integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==
+  dependencies:
+    d3-time "1 - 3"
+
+"d3-time@1 - 3", "d3-time@2.1.1 - 3":
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz"
+  integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==
+  dependencies:
+    d3-array "2 - 3"
+
+"d3-timer@1 - 3", d3-timer@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz"
+  integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
+
 d3-timer@^1.0.5:
   version "1.0.10"
   resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz"
   integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==
 
+"d3-transition@2 - 3", d3-transition@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz"
+  integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==
+  dependencies:
+    d3-color "1 - 3"
+    d3-dispatch "1 - 3"
+    d3-ease "1 - 3"
+    d3-interpolate "1 - 3"
+    d3-timer "1 - 3"
+
+"d3-zoom@2 - 3", d3-zoom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz"
+  integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-drag "2 - 3"
+    d3-interpolate "1 - 3"
+    d3-selection "2 - 3"
+    d3-transition "2 - 3"
+
 dagre@^0.8.5:
   version "0.8.5"
   resolved "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz"
@@ -2160,6 +2412,13 @@ damerau-levenshtein@^1.0.8:
   resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz"
   integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
 
+data-joint@1:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/data-joint/-/data-joint-1.3.1.tgz#d134950322c90f531e81bbbe8454277549031466"
+  integrity sha512-tMK0m4OVGqiA3zkn8JmO6YAqD8UwJqIAx4AAwFl1SKTtKAqcXePuT+n2aayiX9uITtlN3DFtKKTOxJRUc2+HvQ==
+  dependencies:
+    index-array-by "^1.4.0"
+
 debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2:
   version "4.3.3"
   resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz"
@@ -2971,6 +3230,26 @@ for-each@^0.3.3:
   dependencies:
     is-callable "^1.1.3"
 
+force-graph@1:
+  version "1.43.5"
+  resolved "https://registry.yarnpkg.com/force-graph/-/force-graph-1.43.5.tgz#f1b1c1c014a01d435c48b8618d4d54c194fcbd8f"
+  integrity sha512-HveLELh9yhZXO/QOfaFS38vlwJZ/3sKu+jarfXzRmbmihSOH/BbRWnUvmg8wLFiYy6h4HlH4lkRfZRccHYmXgA==
+  dependencies:
+    "@tweenjs/tween.js" "18 - 23"
+    accessor-fn "1"
+    bezier-js "3 - 6"
+    canvas-color-tracker "1"
+    d3-array "1 - 3"
+    d3-drag "2 - 3"
+    d3-force-3d "2 - 3"
+    d3-scale "1 - 4"
+    d3-scale-chromatic "1 - 3"
+    d3-selection "2 - 3"
+    d3-zoom "2 - 3"
+    index-array-by "1"
+    kapsule "^1.14"
+    lodash-es "4"
+
 form-data@^4.0.0:
   version "4.0.0"
   resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
@@ -2980,6 +3259,11 @@ form-data@^4.0.0:
     combined-stream "^1.0.8"
     mime-types "^2.1.12"
 
+fromentries@^1.3.2:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a"
+  integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==
+
 fs-constants@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
@@ -3420,7 +3704,7 @@ iconv-lite@^0.6.2:
 
 ieee754@^1.1.13:
   version "1.2.1"
-  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
   integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
 
 ignore@^5.2.0, ignore@^5.2.4:
@@ -3458,6 +3742,11 @@ indent-string@^4.0.0:
   resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
   integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
 
+index-array-by@1, index-array-by@^1.4.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/index-array-by/-/index-array-by-1.4.1.tgz#425f26cf0c744a47ebadf47366692e52043cf17b"
+  integrity sha512-Zu6THdrxQdyTuT2uA5FjUoBEsFHPzHcPIj18FszN6yXKHxSfGcR4TPLabfuT//E25q1Igyx9xta2WMvD/x9P/g==
+
 infer-owner@^1.0.4:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
@@ -3494,6 +3783,11 @@ internal-slot@^1.0.5:
     hasown "^2.0.0"
     side-channel "^1.0.4"
 
+"internmap@1 - 2":
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
+  integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
+
 invariant@^2.2.0:
   version "2.2.4"
   resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz"
@@ -3756,6 +4050,11 @@ jake@^10.8.5:
     filelist "^1.0.4"
     minimatch "^3.1.2"
 
+jerrypick@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/jerrypick/-/jerrypick-1.1.1.tgz#db0b15841a53cfe492de2db9544eecf8de73203c"
+  integrity sha512-XTtedPYEyVp4t6hJrXuRKr/jHj8SC4z+4K0b396PMkov6muL+i8IIamJIvZWe3jUspgIJak0P+BaWKawMYNBLg==
+
 "jquery@^1.4 || ^2.0 || ^3.0":
   version "3.7.1"
   resolved "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz"
@@ -3866,6 +4165,13 @@ jszip@^3.1.0:
     readable-stream "~2.3.6"
     setimmediate "^1.0.5"
 
+kapsule@1, kapsule@^1.14:
+  version "1.14.5"
+  resolved "https://registry.yarnpkg.com/kapsule/-/kapsule-1.14.5.tgz#c0bc7c1d4c693ee2647182e5b4ffbf95a4d65f72"
+  integrity sha512-H0iSpTynUzZw3tgraDmReprpFRmH5oP5GPmaNsurSwLx2H5iCpOMIkp5q+sfhB4Tz/UJd1E1IbEE9Z6ksnJ6RA==
+  dependencies:
+    lodash-es "4"
+
 keyv@^4.0.0:
   version "4.5.4"
   resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz"
@@ -3929,6 +4235,11 @@ locate-path@^6.0.0:
   dependencies:
     p-locate "^5.0.0"
 
+lodash-es@4:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
+  integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+
 lodash.defaults@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
@@ -4225,6 +4536,37 @@ negotiator@^0.6.3:
   resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
   integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
 
+ngraph.events@^1.0.0, ngraph.events@^1.2.1:
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/ngraph.events/-/ngraph.events-1.2.2.tgz#3ceb92d676a04a4e7ce60a09fa8e17a4f0346d7f"
+  integrity sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==
+
+ngraph.forcelayout@3:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/ngraph.forcelayout/-/ngraph.forcelayout-3.3.1.tgz#981e1baee5e0593c490bc27219169f9cedfa4f8b"
+  integrity sha512-MKBuEh1wujyQHFTW57y5vd/uuEOK0XfXYxm3lC7kktjJLRdt/KEKEknyOlc6tjXflqBKEuYBBcu7Ax5VY+S6aw==
+  dependencies:
+    ngraph.events "^1.0.0"
+    ngraph.merge "^1.0.0"
+    ngraph.random "^1.0.0"
+
+ngraph.graph@20:
+  version "20.0.1"
+  resolved "https://registry.yarnpkg.com/ngraph.graph/-/ngraph.graph-20.0.1.tgz#579470d1d805583239704dc913e2095540aaf371"
+  integrity sha512-VFsQ+EMkT+7lcJO1QP8Ik3w64WbHJl27Q53EO9hiFU9CRyxJ8HfcXtfWz/U8okuoYKDctbciL6pX3vG5dt1rYA==
+  dependencies:
+    ngraph.events "^1.2.1"
+
+ngraph.merge@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/ngraph.merge/-/ngraph.merge-1.0.0.tgz#d763cdfa48b1bbd4270ea246f06c9c8ff5d3477c"
+  integrity sha512-5J8YjGITUJeapsomtTALYsw7rFveYkM+lBj3QiYZ79EymQcuri65Nw3knQtFxQBU1r5iOaVRXrSwMENUPK62Vg==
+
+ngraph.random@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/ngraph.random/-/ngraph.random-1.1.0.tgz#5345c4bb63865c85d98ee6f13eab1395d8545a90"
+  integrity sha512-h25UdUN/g8U7y29TzQtRm/GvGr70lK37yQPvPKXXuVfs7gCm82WipYFZcksQfeKumtOemAzBIcT7lzzyK/edLw==
+
 node-abi@^3.45.0:
   version "3.56.0"
   resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.56.0.tgz#ca807d5ff735ac6bbbd684ae3ff2debc1c2a40a7"
@@ -4528,6 +4870,13 @@ plist@^3.0.5, plist@^3.1.0:
     base64-js "^1.5.1"
     xmlbuilder "^15.1.1"
 
+polished@4:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548"
+  integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==
+  dependencies:
+    "@babel/runtime" "^7.17.8"
+
 postcss@^8.4.32:
   version "8.4.33"
   resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz"
@@ -4577,7 +4926,7 @@ promise-retry@^2.0.1:
     err-code "^2.0.2"
     retry "^0.12.0"
 
-prop-types@>=15.0.0, prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1:
+prop-types@15, prop-types@>=15.0.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1:
   version "15.8.1"
   resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
   integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -4645,11 +4994,44 @@ react-fast-compare@^3.2.2:
   resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49"
   integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==
 
+react-force-graph-2d@^1.25.4:
+  version "1.25.4"
+  resolved "https://registry.yarnpkg.com/react-force-graph-2d/-/react-force-graph-2d-1.25.4.tgz#91f9e8169d0eeb6a7e36c36dd99da5128702b776"
+  integrity sha512-Y1xwa79PHVZUedfa/TO+Cboq2hIc1flA1z4o1oraOu6qMS0r421vNpfjWhJPR6qJonNme3tzeVt5boEA7Ue8sg==
+  dependencies:
+    force-graph "1"
+    prop-types "15"
+    react-kapsule "2"
+
+react-force-graph-3d@^1.24.2:
+  version "1.24.2"
+  resolved "https://registry.yarnpkg.com/react-force-graph-3d/-/react-force-graph-3d-1.24.2.tgz#e94d14981e06f3a0b5b4a5f5d69888a2ff88ee35"
+  integrity sha512-/tZ0BywYuj35Q84AH2WN+Cx0RIygnN5F1+EvsdAqsAMoIJ0xl4L/9aD/pwjCoWfFqi3w5wR2DQuitDXeTayZnQ==
+  dependencies:
+    "3d-force-graph" "^1.73"
+    prop-types "15"
+    react-kapsule "2"
+
+react-infinite-scroller@^1.2.6:
+  version "1.2.6"
+  resolved "https://registry.yarnpkg.com/react-infinite-scroller/-/react-infinite-scroller-1.2.6.tgz#8b80233226dc753a597a0eb52621247f49b15f18"
+  integrity sha512-mGdMyOD00YArJ1S1F3TVU9y4fGSfVVl6p5gh/Vt4u99CJOptfVu/q5V/Wlle72TMgYlBwIhbxK5wF0C/R33PXQ==
+  dependencies:
+    prop-types "^15.5.8"
+
 react-is@^16.13.1:
   version "16.13.1"
   resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
   integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
 
+react-kapsule@2:
+  version "2.4.0"
+  resolved "https://registry.npmjs.org/react-kapsule/-/react-kapsule-2.4.0.tgz"
+  integrity sha512-w4Yv9CgWdj8kWGQEPNWFGJJ08dYEZHZpiaFR/DgZjCMBNqv9wus2Gy1qvHVJmJbzvAZbq6jdvFC+NYzEqAlNhQ==
+  dependencies:
+    fromentries "^1.3.2"
+    jerrypick "^1.1.1"
+
 react-lifecycles-compat@^3.0.4:
   version "3.0.4"
   resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz"
@@ -5306,6 +5688,42 @@ text-table@^0.2.0:
   resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
   integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
 
+three-forcegraph@1:
+  version "1.41.13"
+  resolved "https://registry.yarnpkg.com/three-forcegraph/-/three-forcegraph-1.41.13.tgz#30108eea95d424ac3012650166c8e9a7b60a5bfa"
+  integrity sha512-tVBEnGSf0H5bL5dnebANFsjgLUDrwXXfYRXv3RfPgzuymDoo7sJRPdWIPyrkEgN0e09Hzvr4RLXkQ5FUlWpUzw==
+  dependencies:
+    accessor-fn "1"
+    d3-array "1 - 3"
+    d3-force-3d "2 - 3"
+    d3-scale "1 - 4"
+    d3-scale-chromatic "1 - 3"
+    data-joint "1"
+    kapsule "1"
+    ngraph.forcelayout "3"
+    ngraph.graph "20"
+    tinycolor2 "1"
+
+three-render-objects@^1.29:
+  version "1.29.3"
+  resolved "https://registry.yarnpkg.com/three-render-objects/-/three-render-objects-1.29.3.tgz#8dabe33a87f43772588214af33c99e587c3eba80"
+  integrity sha512-CVE1w0ZvEyW3eMskmcdvZrTiCJZWeZv1BlZQ1X/FIRm0dGLfY/flzg+VH3vPYDXQQdumzj5nSqj5cSQuH4Y39g==
+  dependencies:
+    "@tweenjs/tween.js" "18 - 23"
+    accessor-fn "1"
+    kapsule "1"
+    polished "4"
+
+"three@>=0.118 <1":
+  version "0.163.0"
+  resolved "https://registry.yarnpkg.com/three/-/three-0.163.0.tgz#cbfefbfd64a1353ab7cc8bf0fc396ddca1875a49"
+  integrity sha512-HlMgCb2TF/dTLRtknBnjUTsR8FsDqBY43itYop2+Zg822I+Kd0Ua2vs8CvfBVefXkBdNDrLMoRTGCIIpfCuDew==
+
+tinycolor2@1, tinycolor2@^1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e"
+  integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==
+
 tippy.js@6.3.7:
   version "6.3.7"
   resolved "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz"
@@ -5427,10 +5845,10 @@ typescript@^4.0.2:
   resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz"
   integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
 
-typescript@^5.3.3:
-  version "5.4.3"
-  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff"
-  integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==
+typescript@^5:
+  version "5.4.5"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611"
+  integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==
 
 unbox-primitive@^1.0.1:
   version "1.0.1"
@@ -5679,7 +6097,7 @@ yargs-parser@^21.1.1:
   resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
   integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
 
-yargs@^17.0.1, yargs@^17.6.2:
+yargs@17.7.2, yargs@^17.0.1, yargs@^17.6.2:
   version "17.7.2"
   resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
   integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
diff --git a/man/dune b/man/dune
index a206909451450f13b2fd54a547133a6b4e357764..d616d95ac4c9b3c588fb5ce63b9776f610a25429 100644
--- a/man/dune
+++ b/man/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/man/frama-c.1 b/man/frama-c.1
index f292872c684f83a7cfd0df6236afdbf948968043..d73aecf02e488b60f421d871cca4c9b868ec905b 100644
--- a/man/frama-c.1
+++ b/man/frama-c.1
@@ -1,12 +1,12 @@
 .\" Automatically generated by Pandoc 2.14.0.3
 .\"
-.TH "FRAMA-C" "1" "" "2023-05-12" ""
+.TH "FRAMA-C" "1" "" "2024-04-24" ""
 .hy
 .\"------------------------------------------------------------------------
 .\"                                                                        
 .\"  This file is part of Frama-C documentation                            
 .\"                                                                        
-.\"  Copyright (C) 2007-2023                                               
+.\"  Copyright (C) 2007-2024                                               
 .\"    CEA (Commissariat à l'énergie atomique et aux énergies              
 .\"         alternatives)                                                  
 .\"                                                                        
diff --git a/man/frama-c.1.md b/man/frama-c.1.md
index 8bcfe47eb5b13d7196178e2a48fd76101ec94467..b793a002f499dcc035e0388103b471c23b88d6fa 100644
--- a/man/frama-c.1.md
+++ b/man/frama-c.1.md
@@ -1,16 +1,16 @@
 ---
-title: 'FRAMA-C(1) 2023-05-12'
+title: 'FRAMA-C(1) 2024-04-24'
 header-includes:
 - |
   ```{=man}
   .\"------------------------------------------------------------------------
-  .\"
-  .\"  This file is part of Frama-C documentation
-  .\"
-  .\"  Copyright (C) 2007-2023
-  .\"    CEA (Commissariat à l'énergie atomique et aux énergies
-  .\"         alternatives)
-  .\"
+  .\"                                                                        
+  .\"  This file is part of Frama-C documentation                            
+  .\"                                                                        
+  .\"  Copyright (C) 2007-2024                                               
+  .\"    CEA (Commissariat à l'énergie atomique et aux énergies              
+  .\"         alternatives)                                                  
+  .\"                                                                        
   .\"  you can redistribute it and/or modify it under the terms of the
   .\"  CC-BY-SA 4.0 license
 
diff --git a/nix/build-proxy.sh b/nix/build-proxy.sh
index 97a48a671dc04b51e54b193053d58cd3e5cddf49..56b550741e68f5b3c27ad2337ae6acb3ab1db394 100755
--- a/nix/build-proxy.sh
+++ b/nix/build-proxy.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/coverage.sh b/nix/coverage.sh
index f1d8a3ea400516ee284b211301544814cc141ee7..0dbedf3f02a6ab4fce2215b8d2bf0cbf44dfb031 100755
--- a/nix/coverage.sh
+++ b/nix/coverage.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/e-acsl-tests.nix b/nix/e-acsl-tests.nix
index 03e5cf1998b039f38b3b1e524252b0ea288ea66a..315808eef5a5c7d1a32091eff635f9f09283e872 100644
--- a/nix/e-acsl-tests.nix
+++ b/nix/e-acsl-tests.nix
@@ -1,12 +1,9 @@
-{ mk_tests, config } :
-
-let e-acsl-tests = "e-acsl-tests" + (if config == "" then "" else "-" + config); in
-let ptests = "ptests_config" + (if config == "" then "" else "_" + config) ; in
-let tests = " @src/plugins/e-acsl/tests/" + ptests ; in
+{ mk_tests } :
 
 mk_tests {
-  tests-name = e-acsl-tests ;
+  tests-name = "e-acsl-tests" ;
   tests-command = ''
     dune exec -- frama-c-ptests -never-disabled tests src/plugins/e-acsl/tests
-    dune build -j1 --display short'' + tests + "\n" ;
+    dune build -j1 --display short @src/plugins/e-acsl/tests/ptests
+  '';
 }
diff --git a/nix/external-plugin-ci.sh b/nix/external-plugin-ci.sh
index fc1bc18392745742b4e9b3ff94e8955d9de7aa75..0e190466a4cf102388f592f0a98d42e4fd319bc6 100755
--- a/nix/external-plugin-ci.sh
+++ b/nix/external-plugin-ci.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c-public/check-release.sh b/nix/frama-c-public/check-release.sh
index 14cdcaacaafe38b7d898919fee51412857d64d15..4d8f22a4d0096c71a752835ead2d7d23bf9c96a2 100755
--- a/nix/frama-c-public/check-release.sh
+++ b/nix/frama-c-public/check-release.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c-public/publish-api.sh b/nix/frama-c-public/publish-api.sh
index 3ea670424604fbbfd3ee534375d87ae7115e0e8d..53bf8d1a421325d0a5183a6abae7e54e737a4a30 100755
--- a/nix/frama-c-public/publish-api.sh
+++ b/nix/frama-c-public/publish-api.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c-public/publish-branch.sh b/nix/frama-c-public/publish-branch.sh
index 7291522fa56ba06e1c906fccdb1b8f6e8e4e2529..2dc355bd93ad0a281f597679119a042695f59b90 100755
--- a/nix/frama-c-public/publish-branch.sh
+++ b/nix/frama-c-public/publish-branch.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c-public/publish-opam.sh b/nix/frama-c-public/publish-opam.sh
index 98130c620b8e78606ce37979f4f310f5cec8e6fe..250a4d3fcc665e78ad5c29413601c75314d3d31c 100755
--- a/nix/frama-c-public/publish-opam.sh
+++ b/nix/frama-c-public/publish-opam.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c-public/publish-release.sh b/nix/frama-c-public/publish-release.sh
index f12ab08990d6b27d23fd6f9d8ce50fe5328a33c2..b6ab7033db2c32fbba172fdf85f35b4215d1eb22 100755
--- a/nix/frama-c-public/publish-release.sh
+++ b/nix/frama-c-public/publish-release.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c-public/publish-website.sh b/nix/frama-c-public/publish-website.sh
index 57c5d2a1014bec5b6cb67bec48a0480bbcea3c0d..87f424356c3f7daa6144576ed33a46839cb7d645 100755
--- a/nix/frama-c-public/publish-website.sh
+++ b/nix/frama-c-public/publish-website.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c-public/publish-wiki.sh b/nix/frama-c-public/publish-wiki.sh
index 73e6505a6a86c84cc0ec364b3791f625a060cdb0..a25431c0cabd6ff54f8fe47a0ef1b037875f18f5 100755
--- a/nix/frama-c-public/publish-wiki.sh
+++ b/nix/frama-c-public/publish-wiki.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c-public/ssh.sh b/nix/frama-c-public/ssh.sh
index 8e436c1ccf7c865ac0d5ab6d6f5294605f464cb8..504b93ac2ea8c517129bfb23074d102d74e840e7 100755
--- a/nix/frama-c-public/ssh.sh
+++ b/nix/frama-c-public/ssh.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/frama-c.nix b/nix/frama-c.nix
index bdf835c48ff6e431cbdbcad714d56606ac53be05..cb25fea5c8e83100d1a2b7523451ea588a81247d 100644
--- a/nix/frama-c.nix
+++ b/nix/frama-c.nix
@@ -116,8 +116,6 @@ stdenvNoCC.mkDerivation rec {
   outputs = [ "out" "build_dir" ];
 
   preConfigure = ''
-    patchShebangs src/plugins/eva/gen-api.sh
-    chmod +x src/plugins/eva/gen-api.sh
     dune build @frama-c-configure
   '';
 
diff --git a/nix/internal-tests.nix b/nix/internal-tests.nix
index 67fae7c79d84c1327fb351366f0fad4a67d92d95..5ad5c381a4e2ce4d3ad73a893d55db4fe763dada 100644
--- a/nix/internal-tests.nix
+++ b/nix/internal-tests.nix
@@ -118,8 +118,6 @@ stdenvNoCC.mkDerivation rec {
   outputs = [ "out" ];
 
   preConfigure = ''
-    patchShebangs src/plugins/eva/gen-api.sh
-    chmod +x src/plugins/eva/gen-api.sh
     dune build @frama-c-configure
   '';
 
diff --git a/nix/internal-tests.sh b/nix/internal-tests.sh
index d9dab79d7ebef11709bf75bc93a641518d4e7435..c81aad94eb31f245033ab5a1c56934742f8c9ba8 100755
--- a/nix/internal-tests.sh
+++ b/nix/internal-tests.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/pkgs.nix b/nix/pkgs.nix
index 93b33856899aad5efc13e1cdffac5d1357932c00..977fcbd283bc3a0ca1ba4335057263a593613931 100644
--- a/nix/pkgs.nix
+++ b/nix/pkgs.nix
@@ -34,8 +34,7 @@ let
         cover = false ;
       } ;
     };
-    e-acsl-tests = oself.callPackage ./e-acsl-tests.nix { config = ""; };
-    e-acsl-dev-tests = oself.callPackage ./e-acsl-tests.nix { config = "dev"; };
+    e-acsl-tests = oself.callPackage ./e-acsl-tests.nix {};
     eva-default-tests = oself.callPackage ./eva-tests.nix { config = ""; };
     eva-apron-tests = oself.callPackage ./eva-tests.nix { config = "apron" ; };
     eva-bitwise-tests = oself.callPackage ./eva-tests.nix { config = "bitwise" ; };
diff --git a/nix/plugins-tests.nix b/nix/plugins-tests.nix
index a500d6d0ce11b44a18ed1f1690bd1ae250eb011a..b6a83abadd16fc420eb532347994f0e9646909e9 100644
--- a/nix/plugins-tests.nix
+++ b/nix/plugins-tests.nix
@@ -24,6 +24,7 @@ mk_tests {
       @src/plugins/markdown-report/tests/ptests \
       @src/plugins/nonterm/tests/ptests \
       @src/plugins/report/tests/ptests \
+      @src/plugins/region/tests/ptests \
       @src/plugins/server/tests/ptests \
       @src/plugins/variadic/tests/ptests
   '';
diff --git a/nix/shell-checkers.sh b/nix/shell-checkers.sh
index ae842b349f564089bd5efd48136aab98d3a44367..de70349b7831e29c16c20a740b3cf7fdfe9d5348 100755
--- a/nix/shell-checkers.sh
+++ b/nix/shell-checkers.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/nix/wp-cache.nix.sh b/nix/wp-cache.nix.sh
index 0130917c1d86739e019ffd66683a9ecbcdb5d634..c2d075d1fef53995fc1f048838a8dce4cbb38029 100755
--- a/nix/wp-cache.nix.sh
+++ b/nix/wp-cache.nix.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/opam b/opam
index 15be71d45c22841d2227ce18fb765fdbaba30749..41a6d62294c5f4f4477826a838817b71ad41c7dd 100644
--- a/opam
+++ b/opam
@@ -1,7 +1,7 @@
 opam-version: "2.0"
 name: "frama-c"
 synopsis: "Platform dedicated to the analysis of source code written in C"
-version: "28.1+dev"
+version: "29.0+dev"
 description:"""
 Frama-C gathers several analysis techniques in a single collaborative
 framework, based on analyzers (called "plug-ins") that can build upon the
@@ -23,11 +23,13 @@ authors: [
   "Thibaud Antignac"
   "Gergö Barany"
   "Patrick Baudin"
+  "Nicolas Bellec"
   "Thibaut Benjamin"
   "Allan Blanchard"
   "Lionel Blatter"
   "François Bobot"
   "Richard Bonichon"
+  "Vincent Botbol"
   "Quentin Bouillaguet"
   "David Bühler"
   "Zakaria Chihani"
@@ -41,6 +43,7 @@ authors: [
   "Maxime Jacquemin"
   "Florent Kirchner"
   "Alexander Kogtenkov"
+  "Remi Lazarini"
   "Tristan Le Gall"
   "Jean-Christophe Léchenet"
   "Matthieu Lemerre"
@@ -72,7 +75,7 @@ authors: [
 homepage: "https://frama-c.com/"
 license: "LGPL-2.1-only"
 dev-repo: "git+https://git.frama-c.com/pub/frama-c.git"
-doc: "http://frama-c.com/download/user-manual-28.1-Nickel.pdf"
+doc: "http://frama-c.com/download/user-manual-29.0-Copper.pdf"
 bug-reports: "https://git.frama-c.com/pub/frama-c/issues"
 tags: [
   "deductive"
diff --git a/reference-configuration.md b/reference-configuration.md
index f66b07a9bee6e76466d0a59c2a1b82a644c18b69..3facc53b6bf61a6fda46b603fd64b6c877705336 100644
--- a/reference-configuration.md
+++ b/reference-configuration.md
@@ -1,5 +1,5 @@
 The following set of packages is known to be a working configuration for
-compiling Frama-C 28.1.
+compiling Frama-C 29.0.
 
 - OCaml 4.13.1
 - alt-ergo.2.5.3 (for wp, optional)
@@ -8,7 +8,7 @@ compiling Frama-C 28.1.
 - dune-site.3.7.1
 - lablgtk3.3.1.3
 - lablgtk3-sourceview3.3.1.3
-- menhir.20211128
+- menhir.20211230
 - ocamlfind.1.9.6
 - ocamlgraph.2.1.0
 - ppx_deriving_yaml.0.2.1
diff --git a/releases/29.0.md b/releases/29.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..5207c9a8e39a34c997d7ebc8a360a172a6a6f21d
--- /dev/null
+++ b/releases/29.0.md
@@ -0,0 +1,30 @@
+# Kernel
+- Introduce \plugin:: prefix for ACSL extensions
+- Refactor current location handling mechanism
+- Removal of Db (Db.Main.extend is deprecated). Features related to asynchronous
+  interactions are now handled in module Async
+- Various fixes and improvements
+
+# Alias
+- Better analysis results in the presence of structures
+- Rework the API and improved the documentation
+
+# Eva
+- Better reporting for garbled mix
+- Improved handling of \valid and \valid_read
+
+# E-ACSL
+- Fix TLS segment start address and size
+- Remove option -e-acsl-version
+
+# WP
+- Generation of counter examples, see option -wp-counter-examples
+- Upgrade to Why3 1.7.x and improved prover selection
+- Extended support for Ivette
+
+# Ivette
+- Revamped workspace (tabs, views, dock, alerts, notifications, …)
+- Types and Globals navigation
+- Better feedback on Eva values evaluation
+- Extended support for WP
+- Improve performances
diff --git a/share/Makefile.common b/share/Makefile.common
index ae9d02f9d7e0696f0d75f9ac783aba62f24de892..d6837e261716f2567fe0c8f2a3ada3640b295a92 100644
--- a/share/Makefile.common
+++ b/share/Makefile.common
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/Makefile.documentation b/share/Makefile.documentation
index 817de5190cb5f9692038652bbb5aa5bfadc48659..bbcdf0b82420f5ec846277583ed6008f641bbba8 100644
--- a/share/Makefile.documentation
+++ b/share/Makefile.documentation
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/Makefile.headers b/share/Makefile.headers
index 50ea67a57569b2d4edf8a72f67915057cc067b58..50f88a7e922de6a021af7fd211bccca882eac1c2 100644
--- a/share/Makefile.headers
+++ b/share/Makefile.headers
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/Makefile.installation b/share/Makefile.installation
index d3ed2da27b24f06953bb69f65742a1c01355b82b..95115b1eb173aa05eaf69d276b0392cff439402f 100644
--- a/share/Makefile.installation
+++ b/share/Makefile.installation
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/Makefile.linting b/share/Makefile.linting
index ea8d7b2f5c3d147e7c62259ef25316e5f264e20c..61f3b4d69dfabacbe5ddb244a27869473701e979 100644
--- a/share/Makefile.linting
+++ b/share/Makefile.linting
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/Makefile.testing b/share/Makefile.testing
index 1856b10afb4a28141ac4db5ae0ba114b1835043d..d16855ae91a40dc054adbee691e6b7c9f756cacb 100644
--- a/share/Makefile.testing
+++ b/share/Makefile.testing
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/_frama-c b/share/_frama-c
index 09b922b8d9888ea94f776aa903e954426e0c6bf8..798a023ad3d447bd3bb848aadfb3fbe1e6acb77e 100644
--- a/share/_frama-c
+++ b/share/_frama-c
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -50,7 +50,7 @@
 #typeset -A opt_args
 
 # filter_load takes a command line calling frama-c and
-# removes everything not a -load-module or -load-script
+# removes everything not a -load-module
 # argument 1 is the variable name of the input
 # argument 2 is the variable name of the output
 function filter_load () {
@@ -64,7 +64,7 @@ function filter_load () {
     else
       # very strange behaviour when ' is used instead of " around -load-*
       # actually not related to this
-      if [[ $w = '-load-module' ]] || [[ $w = '-load-script' ]]; then
+      if [[ $w = '-load-module' ]]; then
         my_args+=("$w")
         next=1
       fi
@@ -86,7 +86,7 @@ function _frama_c () {
     if $my_words[1] 2>/dev/null; then
       local -a the_args
       local -a the_previous_args
-      # we keep only parts of the command line relevant to -load-module/-load-script
+      # we keep only parts of the command line relevant to -load-module
       filter_load my_words the_args
       # we load the previous filtered command from cache if available
       _retrieve_cache frama-c_previous_command # can overwrite the_previous_args
diff --git a/share/_frama-c.zsh b/share/_frama-c.zsh
index df0556e10bbc66c3f2ca79e102bcab7005485ce2..2e972ef6b1e26a9155c16fa41dcf430dcd055dac 100644
--- a/share/_frama-c.zsh
+++ b/share/_frama-c.zsh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/analysis.mk b/share/analysis-scripts/analysis.mk
index dc9e7e41e9c6d3a108c5a10e99352c74dffca705..efd490547fd5d2a845e32509a9fdcb200058a2b7 100644
--- a/share/analysis-scripts/analysis.mk
+++ b/share/analysis-scripts/analysis.mk
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/bench-sqlite.sh b/share/analysis-scripts/bench-sqlite.sh
index bccea15e0f71b82582c7295474896aa0f5e295a6..258d073a999ed0a5cb4fde29133fd87a62503c18 100755
--- a/share/analysis-scripts/bench-sqlite.sh
+++ b/share/analysis-scripts/bench-sqlite.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/benchmark_database.py b/share/analysis-scripts/benchmark_database.py
index 7c789268359c40d02221bd97d7726a086df607f7..37136e2033bb605b1a8e189a294dd0a547d7bfef 100644
--- a/share/analysis-scripts/benchmark_database.py
+++ b/share/analysis-scripts/benchmark_database.py
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/build.py b/share/analysis-scripts/build.py
index bdbaff3b61d3dde37f772f5842620982c02aa20d..d912dc3d824540513fcf1003da6be14dba7251e4 100755
--- a/share/analysis-scripts/build.py
+++ b/share/analysis-scripts/build.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -52,6 +52,13 @@ parser = argparse.ArgumentParser(
 for analysis with Frama-C. Tries to use a build_commands.json file if
 available."""
 )
+parser.add_argument(
+    "--base",
+    metavar="DIR",
+    default=".",
+    help="base directory to use when pretty-printing relative paths (default: PWD)",
+    type=Path,
+)
 parser.add_argument(
     "--debug",
     metavar="FILE",
@@ -91,11 +98,12 @@ parser.add_argument(
     "--targets",
     metavar="FILE",
     nargs="+",
-    help="targets to build. When using --sources, " + "only a single target is allowed.",
+    help="targets to build. When using --sources, only a single target is allowed.",
     type=Path,
 )
 
 args = parser.parse_args()
+base = args.base
 force = args.force
 jbdb_path = args.jbdb
 machdep = args.machdep
@@ -125,21 +133,20 @@ dot_framac_dir = Path(".frama-c")
 
 # Check required environment variables and commands in the PATH ###############
 
-framac_bin_str = os.getenv("FRAMAC_BIN")
-if not framac_bin_str:
-    sys.exit("error: FRAMAC_BIN not in environment (set by frama-c-script)")
-framac_bin = Path(framac_bin_str)
+framac_bin = Path(
+    os.getenv("FRAMAC_BIN")
+    or sys.exit("error: FRAMAC_BIN not in environment (set by frama-c-script)")
+)
 
 under_test = os.getenv("PTESTS_TESTING")
 
 # Prepare blug-related variables and functions ################################
 
-blug_str = os.getenv("BLUG")
-if not blug_str:
-    blug_str = shutil.which("blug")
-    if not blug_str:
-        sys.exit("error: path to 'blug' binary must be in PATH or variable BLUG")
-blug = Path(blug_str)
+blug = Path(
+    os.getenv("BLUG")
+    or shutil.which("blug")
+    or sys.exit("error: path to 'blug' binary must be in PATH or variable BLUG")
+)
 blug_dir = blug.resolve().parent
 # to import blug_jbdb
 sys.path.insert(0, blug_dir.as_posix())
@@ -202,20 +209,18 @@ def make_target_name(target: Path) -> str:
     return prettify(str(target)).replace("/", "_").replace(".", "_")
 
 
-# sources are pretty-printed relatively to the .frama-c directory, where the
-# GNUmakefile will reside
-def rel_prefix(path: Path) -> str:
-    # heuristics: try a relative path, but if too many ".."'s, then give up
-    # and use an absolute one.
-    relp = os.path.relpath(path, start=dot_framac_dir)
-    if relp.startswith(os.path.join("..", "..")):
-        return str(path)
-    else:
-        return relp
+def rel_path(path: Path, base: Path) -> str:
+    """Return a relative path to the .frama-c directory, if path is relative to base.
+    Otherwise, return an absolute path. Typically, base is the parent of the .frama-c directory."""
+    try:
+        path.resolve().relative_to(base.resolve())  # Fails if path is not inside base
+        return os.path.relpath(path, start=dot_framac_dir)
+    except ValueError:
+        return str(path.resolve())
 
 
-def pretty_sources(sources: list[Path]) -> list[str]:
-    return [f"  {rel_prefix(source)} \\" for source in sorted(sources)]
+def pretty_sources(sources: list[Path], base: Path) -> list[str]:
+    return [f"  {rel_path(source, base)} \\" for source in sorted(sources)]
 
 
 def lines_of_file(path: Path) -> list[str]:
@@ -248,7 +253,9 @@ def copy_fc_stubs() -> Path:
 # [funcname] in [filename].
 # [has_args] is used to distinguish between main(void) and main(int, char**).
 def find_definitions(funcname: str, filename: str) -> list[tuple[str, bool]]:
-    file_content = source_filter.open_and_filter(filename, not under_test and do_filter_source)
+    file_content = source_filter.open_and_filter(
+        Path(filename), not under_test and do_filter_source
+    )
     file_lines = file_content.splitlines(keepends=True)
     newlines = function_finder.compute_newline_offsets(file_lines)
     defs = function_finder.find_definitions_and_declarations(
@@ -425,7 +432,7 @@ if jbdb_path:
     insert_lines_after(
         template,
         "^FCFLAGS",
-        [f"  -json-compilation-database {rel_prefix(jbdb_path)} \\"],
+        [f"  -json-compilation-database {rel_path(jbdb_path, base)} \\"],
     )
 
 targets_eva = [f"  {make_target_name(target)}.eva \\" for target in sorted(targets)]
@@ -436,7 +443,7 @@ delete_line(template, r"^main.parse: \\")
 delete_line(template, r"^  main.c \\")
 for target, sources in sorted(sources_map.items(), reverse=True):
     pp_target = make_target_name(target)
-    new_lines = [f"{pp_target}.parse: \\"] + pretty_sources(sources) + [""]
+    new_lines = [f"{pp_target}.parse: \\"] + pretty_sources(sources, base) + [""]
     if any(d[2] for d in main_definitions[target]):
         logging.debug(
             "target %s has main with args, adding -main eva_main to its FCFLAGS",
diff --git a/share/analysis-scripts/build_callgraph.py b/share/analysis-scripts/build_callgraph.py
index d0b796e20dd2ee7ca7bc5b5c39455128e366f5e6..0f790b0545eb5f6b99d881d8c62982bdcf466426 100755
--- a/share/analysis-scripts/build_callgraph.py
+++ b/share/analysis-scripts/build_callgraph.py
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -24,8 +24,8 @@
 """This script finds files containing likely declarations and definitions
 for a given function name, via heuristic syntactic matching."""
 
-from __future__ import annotations
 import os
+from pathlib import Path
 import sys
 
 import function_finder
@@ -70,7 +70,7 @@ class Callgraph:
         return f"Callgraph({self.succs}, {self.edges})"
 
 
-def compute(files):
+def compute(files: set[Path]):
     cg = Callgraph()
     for f in files:
         file_content = source_filter.open_and_filter(f, not under_test)
diff --git a/share/analysis-scripts/clone.sh b/share/analysis-scripts/clone.sh
index 1c5abe563fd6ec5f8796bdfa8c49e7a882dc343f..2274f1263905a97425afd97ef67ab6abacf55ed1 100755
--- a/share/analysis-scripts/clone.sh
+++ b/share/analysis-scripts/clone.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/cmd-dep.sh b/share/analysis-scripts/cmd-dep.sh
index ab7b771fdd4bc1749c331b8d2e9a8b2d32616c5c..9475a3e6863b3f6710ca120cb3fa1302d79eaa15 100755
--- a/share/analysis-scripts/cmd-dep.sh
+++ b/share/analysis-scripts/cmd-dep.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/concat-csv.sh b/share/analysis-scripts/concat-csv.sh
index 42108ebb54d0742a0709ba568a0c9066d9b6c62c..b83ffae3d7262ca760ac51d7edce75f83c59e70c 100755
--- a/share/analysis-scripts/concat-csv.sh
+++ b/share/analysis-scripts/concat-csv.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/creduce.sh b/share/analysis-scripts/creduce.sh
index 35a718f1e946bf373cb11342b1b7bae717d3e797..1e506e8aab2062e521ace0f7dffef116f5a4144e 100755
--- a/share/analysis-scripts/creduce.sh
+++ b/share/analysis-scripts/creduce.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/detect_recursion.py b/share/analysis-scripts/detect_recursion.py
index dff9de12ac324252f7a14b15828f908247cc7fa5..a25078aae0bfc9fab749668c44d20971420e068d 100755
--- a/share/analysis-scripts/detect_recursion.py
+++ b/share/analysis-scripts/detect_recursion.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/dune b/share/analysis-scripts/dune
index 24f1da0963db68ebbc43eb17ae8aa6e36ace7f99..5a35857a23383ca8d283dea8af23d3984004d51e 100644
--- a/share/analysis-scripts/dune
+++ b/share/analysis-scripts/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/share/analysis-scripts/epilogue.mk b/share/analysis-scripts/epilogue.mk
index 7a2a542ee40ae718c6016deac7249efa49eca5b8..10a538d76dd6b2749cd28440ac24f6b053458eae 100644
--- a/share/analysis-scripts/epilogue.mk
+++ b/share/analysis-scripts/epilogue.mk
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/estimate_difficulty.py b/share/analysis-scripts/estimate_difficulty.py
index f0d29811a64f3ab90b63471a750be84fb5a11a1e..47437f56cbddd472930d3481a9ebd786e024bc1d 100755
--- a/share/analysis-scripts/estimate_difficulty.py
+++ b/share/analysis-scripts/estimate_difficulty.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -25,20 +25,24 @@
 """This script uses several heuristics to try and estimate the difficulty
 of analyzing a new code base with Frama-C."""
 
-from __future__ import annotations
 import argparse
+import glob
 import json
+import logging
 import os
 from pathlib import Path
 import re
 import subprocess
+import sys
 import tempfile
+from typing import Iterable
 
 import build_callgraph
+import external_tool
+import fclog
 import source_filter
 
 # TODO : avoid relativizing paths when introducing too many ".." ;
-# TODO : accept directory as argument (--full-tree), and then do glob **/*.{c,i} inside
 # TODO : try to check the presence of compiler builtins
 # TODO : try to check for pragmas
 # TODO : detect absence of 'main' function (library)
@@ -48,34 +52,81 @@ parser = argparse.ArgumentParser(
 Estimates the difficulty of analyzing a given code base"""
 )
 parser.add_argument(
-    "--header-dirs",
-    "-d",
-    metavar="DIR",
+    "paths",
     nargs="+",
-    help="directories containing headers (default: .frama-c)",
+    help="source files and directories. \
+If a directory <dir> is specified, it is recursively explored, as if '<dir>/**/*.[ci]' \
+had been specified.",
+    type=Path,
 )
-parser.add_argument("files", nargs="+", help="source files")
-args = vars(parser.parse_args())
-
-header_dirs = args["header_dirs"]
-if not header_dirs:
-    header_dirs = []
-files = args["files"]
+parser.add_argument(
+    "--debug",
+    metavar="FILE",
+    help="enable debug mode and redirect output to the specified file",
+)
+parser.add_argument(
+    "--verbose",
+    action="store_true",
+    help="enable verbose output; if --debug is set, output is redirected to the same file.",
+)
+parser.add_argument(
+    "--no-cloc",
+    action="store_true",
+    help="disable usage of external tool 'cloc', even if available.",
+)
+args = parser.parse_args()
+paths = args.paths
+debug = args.debug
+no_cloc = args.no_cloc
+verbose = args.verbose
 
 under_test = os.getenv("PTESTS_TESTING")
 
-# gather information from several sources
+fclog.init(debug, verbose)
+
+### Auxiliary functions #######################################################
+
+
+def get_dir(path):
+    """Similar to dirname, but returns the path itself if it refers to a directory"""
+    if path.is_dir():
+        return path
+    else:
+        return path.parent
+
+
+def collect_files_and_local_dirs(paths) -> tuple[set[Path], set[Path]]:
+    """Returns the list of files and directories (and their subdirectories) containing
+    the specified paths. Note that this also includes subdirectories which do not
+    themselves contain any .c files, but which may contain .h files."""
+    dirs: set[Path] = set()
+    files: set[Path] = set()
+    for p in paths:
+        if p.is_dir():
+            files = files.union([Path(p) for p in glob.glob(f"{p}/**/*.[chi]", recursive=True)])
+            dirs.add(p)
+        else:
+            files.add(p)
+            dirs.add(p.parent)
+    local_dirs = {Path(s[0]) for d in dirs for s in os.walk(d)}
+    if not files:
+        sys.exit(
+            "error: no source files (.c/.i) found in provided paths: "
+            + " ".join([str(p) for p in paths])
+        )
+    return files, local_dirs
 
 
 def extract_keys(l):
     return [list(key.keys())[0] for key in l]
 
 
-def get_framac_libc_function_statuses(framac, framac_share):
+def get_framac_libc_function_statuses(
+    framac: Path | None, framac_share: Path
+) -> tuple[list[str], list[str]]:
     if framac:
         (_handler, metrics_tmpfile) = tempfile.mkstemp(prefix="fc_script_est_diff", suffix=".json")
-        if debug:
-            print("metrics_tmpfile: %s", metrics_tmpfile)
+        logging.debug("metrics_tmpfile: %s", metrics_tmpfile)
         fc_runtime = framac_share / "libc" / "__fc_runtime.c"
         fc_libc_headers = framac_share / "libc" / "__fc_libc.h"
         subprocess.run(
@@ -105,10 +156,8 @@ def get_framac_libc_function_statuses(framac, framac_share):
     return (defined, spec_only)
 
 
-re_include = re.compile(r'\s*#\s*include\s*("|<)([^">]+)("|>)')
-
-
-def grep_includes_in_file(filename):
+def grep_includes_in_file(filename: Path):
+    re_include = re.compile(r'\s*#\s*include\s*("|<)([^">]+)("|>)')
     file_content = source_filter.open_and_filter(filename, not under_test)
     i = 0
     for line in file_content.splitlines():
@@ -120,9 +169,9 @@ def grep_includes_in_file(filename):
             yield (i, kind, header)
 
 
-def get_includes(files):
-    quote_includes = {}
-    chevron_includes = {}
+def get_includes(files: set[Path]):
+    quote_includes: dict[Path, list[tuple[Path, int]]] = {}
+    chevron_includes: dict[Path, list[tuple[Path, int]]] = {}
     for filename in files:
         for line, kind, header in grep_includes_in_file(filename):
             if kind == "<":
@@ -137,13 +186,64 @@ def get_includes(files):
     return chevron_includes, quote_includes
 
 
+def is_local_header(local_dirs, header):
+    for d in local_dirs:
+        path = Path(d)
+        if Path(path / header).exists():
+            return True
+    return False
+
+
+def grep_keywords(keywords: Iterable[str], filename: Path) -> dict[str, int]:
+    with open(filename, "r") as f:
+        found: dict[str, int] = {}
+        for line in f:
+            if any(x in line for x in keywords):
+                # found one or more keywords; count them
+                for kw in keywords:
+                    if kw in line:
+                        if kw in found:
+                            found[kw] += 1
+                        else:
+                            found[kw] = 1
+        return found
+
+
+def pretty_unsupported_keywords(
+    file: Path, unsupported_keywords: dict[str, str], found: dict[str, int]
+) -> str:
+    res = f"unsupported keyword(s) in {file}: "
+    descriptions: list[str] = []
+    for kw, count in sorted(found.items()):
+        if descriptions:  # not first occurrence
+            res += ", "
+        res += f" {kw} ({count} line{'s' if count > 1 else ''})"
+        descriptions.append(f"{kw} is a {unsupported_keywords[kw]}")
+    res += "\n - " + "\n - ".join(descriptions)
+    return res
+
+
+### End of auxiliary functions ################################################
+
 debug = os.getenv("DEBUG")
 verbose = False
 
+files, local_dirs = collect_files_and_local_dirs(paths)
+
+score = {
+    "recursion": 0,
+    "libc": 0,
+    "includes": 0,
+    "malloc": 0,
+    "keywords": 0,
+    "asm": 0,
+}
+
 framac_bin = os.getenv("FRAMAC_BIN")
 if not framac_bin:
-    print(
-        "Running script in no-Frama-C mode (set FRAMAC_BIN to the directory containing frama-c if you want to use it)."
+    logging.info(
+        "Running script in no-Frama-C mode (set FRAMAC_BIN to the directory"
+        + " containing frama-c if you want to use it)."
     )
     framac = None
     script_dir = os.path.dirname(os.path.realpath(__file__))
@@ -154,10 +254,27 @@ else:
         subprocess.check_output([framac, "-no-autoload-plugins", "-print-share-path"]).decode()
     )
 
-print("Building callgraph...")
+
+if not no_cloc:
+    cloc = external_tool.get_command("cloc", "CLOC")
+    if cloc:
+        data = external_tool.run_and_check(
+            [cloc, "--hide-rate", "--progress-rate=0", "--csv"] + list(str(f) for f in files), ""
+        )
+        data = data.splitlines()
+        [nfiles, _sum, nblank, ncomment, ncode] = data[-1].split(",")
+        nlines = int(nblank) + int(ncomment) + int(ncode)
+        logging.info(
+            "Processing %d file(s), approx. %d lines of code (out of %d lines)",
+            int(nfiles),
+            int(ncode),
+            nlines,
+        )
+
+logging.info("Building callgraph...")
 cg = build_callgraph.compute(files)
 
-print("Computing data about libc/POSIX functions...")
+logging.info("Computing data about libc/POSIX functions...")
 libc_defined_functions, libc_specified_functions = get_framac_libc_function_statuses(
     framac, framac_share
 )
@@ -186,16 +303,23 @@ for cycle_start_loc, cycle in recursive_cycles:
         continue
     reported_recursive_pairs.add(cycle[-1])
     (filename, line) = cycle_start_loc
-    (x, y) = cycle[0]
-    pretty_cycle = f"{x} -> {y}"
-    for x, y in cycle[1:]:
-        pretty_cycle += f" -> {y}"
-    print(f"[recursion] found recursive cycle near {filename}:{line}: {pretty_cycle}")
+
+    def pretty_cycle(cycle):
+        (x, y) = cycle[0]
+        res = f"{x} -> {y}"
+        for x, y in cycle[1:]:
+            res += f" -> {y}"
+        return res
+
+    logging.info(
+        "[recursion] found recursive cycle near %s:%d: %s", filename, line, pretty_cycle(cycle)
+    )
+    score["recursion"] += 1
 
 callees_list = [callee for (_, callee) in list(cg.edges.keys())]
 callees = set(callees_list)
 used_headers = set()
-print(f"Estimating difficulty for {len(callees)} function calls...")
+logging.info("Estimating difficulty for %d function calls...", len(callees))
 warnings = 0
 
 for callee in sorted(callees):
@@ -204,8 +328,10 @@ for callee in sorted(callees):
         global warnings
         if status == "warning":
             warnings += 1
-        if verbose or debug or status == "warning":
-            print(f"- {status}: {callee} ({standard}) {reason}")
+        if status == "warning":
+            logging.warning("%s (%s) %s", callee, standard, reason)
+        else:
+            logging.log(fclog.VERBOSE, "%s: %s (%s) %s", status, callee, standard, reason)
 
     try:
         is_problematic = posix_identifiers[callee]["notes"]["fc-support"] == "problematic"
@@ -259,84 +385,83 @@ for callee in sorted(callees):
             if not status_emitted:
                 callee_status("warning", standard, "has neither code nor spec in Frama-C's libc")
 
-print(f"Function-related warnings: {warnings}")
+logging.info("Function-related warnings: %d", warnings)
+score["libc"] = warnings
 
-if (verbose or debug) and used_headers:
-    print("used headers:")
-    for header in sorted(used_headers):
-        print(f"  <{header}>")
+logging.log(
+    fclog.VERBOSE,
+    "Used POSIX headers:\n%s",
+    "\n".join([f"  <{header}>" for header in sorted(used_headers)]),
+)
 
 (chevron_includes, quote_includes) = get_includes(files)
 
-
-def is_local_header(header_dirs, header):
-    for d in header_dirs:
-        path = Path(d)
-        if Path(path / header).exists():
-            return True
-    return False
-
-
-print(f"Estimating difficulty for {len(chevron_includes)} '#include <header>' directives...")
+logging.info(
+    "Estimating difficulty for %d '#include <header>' directives...", len(chevron_includes)
+)
 non_posix_headers = []
 header_warnings = 0
 for header in sorted(chevron_includes, key=str.casefold):
+    if not header.lower().endswith(".h"):
+        continue  # ignore included non-header files
     if header in posix_headers:
         fc_support = posix_headers[header]["fc-support"]
         if fc_support == "unsupported":
             header_warnings += 1
-            print(f"- WARNING: included header <{header}> is explicitly unsupported by Frama-C")
+            logging.warning("included header <%s> is explicitly unsupported by Frama-C", header)
         else:
-            if verbose or debug:
-                c11_or_posix = "C11" if header in c11_headers else "POSIX"
-                print(f"- note: included {c11_or_posix} header ")
+            logging.log(
+                fclog.VERBOSE,
+                "included %s header %s",
+                "C11" if header in c11_headers else "POSIX",
+                header,
+            )
     else:
-        if is_local_header(header_dirs, header):
-            if verbose or debug:
-                print(f"- ok: included header <{header}> seems to be available locally")
+        if is_local_header(local_dirs, header):
+            logging.log(
+                fclog.VERBOSE, "ok: included header <%s> seems to be available locally", header
+            )
         else:
             non_posix_headers.append(header)
             header_warnings += 1
-            print(f"- warning: included non-POSIX header <{header}>")
-print(f"Header-related warnings: {header_warnings}")
-
+            logging.warning("included non-POSIX header <%s>", header)
+logging.info("Header-related warnings: %d", header_warnings)
+score["includes"] = header_warnings
 
 # dynamic allocation
 
 dynalloc_functions = set(["malloc", "calloc", "free", "realloc", "alloca", "mmap"])
 dyncallees = dynalloc_functions.intersection(callees)
 if dyncallees:
-    print(f"- note: calls to dynamic allocation functions: {', '.join(sorted(dyncallees))}")
-
+    logging.info("Calls to dynamic allocation functions: %s", ", ".join(sorted(dyncallees)))
+    score["malloc"] = len(dyncallees)
 
 # unsupported C11 or non-standard specific features
 
-unsupported_keywords = [
-    ("_Alignas", "C11 construct"),
-    ("_Alignof", "C11 construct"),
-    ("_Complex", "C11 construct"),
-    ("_Imaginary", "C11 construct"),
-    ("alignas", "C11 construct"),
-    ("alignof", "C11 construct"),  # stdalign.h may use these symbols
-    ("__int128", "non-standard construct (GNU extension)"),
-    ("__uint128_t", "non-standard construct (GNU extension)"),
-]
-
-for keyword, message in unsupported_keywords:
-    out = subprocess.Popen(
-        ["grep", "-n", "\\b" + keyword + "\\b"] + files + ["/dev/null"],
-        stdout=subprocess.PIPE,
-        stderr=subprocess.STDOUT,
-    )
-    lines = out.communicate()[0].decode("utf-8").splitlines()
-    if lines:
-        n = len(lines)
-        print(
-            f"- warning: found {n} line{'s' if n > 1 else ''} with occurrences of "
-            f"unsupported {message} '{keyword}'"
-        )
+unsupported_keywords = {
+    "_Alignas": "C11 construct",
+    "_Alignof": "C11 construct",
+    "_Complex": "C11 construct",
+    "_Imaginary": "C11 construct",
+    "alignas": "C11 construct",
+    "alignof": "C11 construct",  # stdalign.h may use these symbols
+    "__int128": "non-standard construct (GNU extension)",
+    "__uint128_t": "non-standard construct (GNU extension)",
+}
+
+for ff in files:
+    found = grep_keywords(unsupported_keywords.keys(), ff)
+    if found:
+        logging.warning(pretty_unsupported_keywords(ff, unsupported_keywords, found))
+    score["keywords"] += len(found)
 
 # assembly code
 
 if "asm" in callees or "__asm" in callees or "__asm__" in callees:
-    print("- warning: code seems to contain inline assembly ('asm(...)')")
+    logging.warning("code seems to contain inline assembly ('asm(...)')")
+    score["asm"] = 1
+
+logging.info(
+    "Overall difficulty score:\n%s",
+    "\n".join([k + ": " + str(v) for (k, v) in sorted(score.items())]),
+)
diff --git a/share/analysis-scripts/external_tool.py b/share/analysis-scripts/external_tool.py
new file mode 100644
index 0000000000000000000000000000000000000000..d1a1b3584e024d81bf9c81d626c9775bb64b2598
--- /dev/null
+++ b/share/analysis-scripts/external_tool.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+##########################################################################
+#                                                                        #
+#  This file is part of Frama-C.                                         #
+#                                                                        #
+#  Copyright (C) 2007-2024                                               #
+#    CEA (Commissariat à l'énergie atomique et aux énergies              #
+#         alternatives)                                                  #
+#                                                                        #
+#  you can redistribute it and/or modify it under the terms of the GNU   #
+#  Lesser General Public License as published by the Free Software       #
+#  Foundation, version 2.1.                                              #
+#                                                                        #
+#  It is distributed in the hope that it will be useful,                 #
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
+#  GNU Lesser General Public License for more details.                   #
+#                                                                        #
+#  See the GNU Lesser General Public License version 2.1                 #
+#  for more details (enclosed in the file licenses/LGPLv2.1).            #
+#                                                                        #
+##########################################################################
+
+"""This file provides utility functions to use external tools, either
+available in the PATH or via PyInstaller."""
+
+import os
+from pathlib import Path
+import shutil
+import subprocess
+import sys
+
+# warnings about missing commands are disabled during testing
+emit_warns = os.getenv("PTESTS_TESTING") is None
+
+# Cache for get_command
+cached_commands: dict[str, Path | None] = {}
+
+
+def resource_path(relative_path):
+    """Get absolute path to resource; only used by the pyinstaller standalone distribution"""
+    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
+    return os.path.join(base_path, relative_path)
+
+
+def get_command(command, env_var_name):
+    """Returns a Path to the command; priority goes to the environment variable,
+    then in the PATH, then in the resource directory (for a pyinstaller binary)."""
+    if command in cached_commands:
+        return cached_commands[command]
+    p = os.getenv(env_var_name)
+    if p:
+        p = Path(p)
+    else:
+        p = shutil.which(command)
+        if p:
+            p = Path(p)
+        else:
+            p = Path(resource_path(command))
+            if not p.exists():
+                if emit_warns:
+                    print(
+                        f"info: optional external command '{command}' not found in PATH;",
+                        f"consider installing it or setting environment variable {env_var_name}",
+                    )
+                p = None
+    cached_commands[command] = p
+    return p
+
+
+def run_and_check(command_and_args, input_data):
+    try:
+        return subprocess.check_output(
+            command_and_args,
+            input=input_data,
+            stderr=None,
+            encoding="ascii",
+            errors="ignore",
+        )
+    except subprocess.CalledProcessError as e:
+        sys.exit(f"error running command: {command_and_args}\n{e}")
diff --git a/share/analysis-scripts/fc-estimate-difficulty.mk b/share/analysis-scripts/fc-estimate-difficulty.mk
new file mode 100644
index 0000000000000000000000000000000000000000..ff5b71731aa251c7bb2569028f5048db3f9e473a
--- /dev/null
+++ b/share/analysis-scripts/fc-estimate-difficulty.mk
@@ -0,0 +1,151 @@
+# Produces a self-contained binary for 'frama-c-script estimate-difficulty'
+# on a machine without Frama-C.
+
+# Example usage:
+# export FRAMAC=$(which frama-c) && make -f fc-estimate-difficulty.mk fc-estimate-difficulty
+# export FRAMAC=$(which frama-c) && make -f fc-estimate-difficulty.mk fc-estimate-difficulty.exe
+
+# Works on Linux and macOS. The Windows binary is compiled and tested using
+# a Docker image with wine and pyinstaller (usage of Docker avoids issues with
+# staging versions in e.g. Fedora, which may cause weird error messages when
+# running in Windows). The Linux binary is tested on a bare-bones Alpine Linux,
+# to ensure it does not depend on dynamic libraries.
+# The macOS version needs to be tested by hand.
+
+# Notes:
+# pip install "staticx==0.14.1"
+# pip install "patchelf==0.17.0.0" # seems to work; version 0.17.2.1 did not work when tried
+
+help:
+	@echo "targets:"
+	@echo "fc-estimate-difficulty           : Linux/macOS version (depending on host system)"
+	@echo "fc-estimate-difficulty.exe       : Windows cross-compiled version (from Linux)"
+	@echo "clean                            : Erase working directory"
+	@echo "distclean                        : Clean and erase generated files"
+	@echo "test-fc-estimate-difficulty      : Test Linux/macOS version"
+	@echo "test-fc-estimate-difficulty.exe  : Test Windows version"
+
+os := $(shell uname -s)
+
+workdir = fced-dist-prepare
+distdir = fced-dist
+
+# if 'podman' is installed, we assume it is preferred over Docker;
+# otherwise, try using 'docker'
+ifneq (, $(shell which podman))
+DOCKER:=podman
+else
+DOCKER:=docker
+endif
+
+libc_metrics.json: ../libc/__fc_libc.h ../libc/__fc_runtime.c
+ifeq ($(wildcard $(FRAMAC)),)
+	$(error FRAMAC must be set to the path of the 'frama-c' binary)
+endif
+	FRAMAC_SHARE="$(shell $(FRAMAC) -no-autoload-plugins -print-share-path)"
+	rm -f $@
+	$(FRAMAC) \
+	  $^ \
+	  -no-autoload-plugins -load-module metrics \
+	  -metrics -metrics-libc -metrics-output $@
+	chmod -w $@ # generated file: prevent accidental overwriting
+
+PY_DEPS := \
+  build_callgraph.py \
+  estimate_difficulty.py \
+  external_tool.py \
+  fclog.py \
+  function_finder.py \
+  source_filter.py \
+
+COMPLIANCE := $(wildcard ../compliance/*.json)
+TOOLS := $(workdir)/scc $(workdir)/astyle
+COMMON_DEPS := $(PY_DEPS) $(COMPLIANCE) libc_metrics.json
+
+fc-estimate-difficulty: $(COMMON_DEPS) $(TOOLS)
+fc-estimate-difficulty.exe: \
+  $(COMMON_DEPS) $(addsuffix .exe,$(TOOLS)) fced-win.Dockerfile
+
+fc-estimate-difficulty:
+	pyinstaller estimate_difficulty.py \
+	  -F \
+	  -n $@ \
+	  --distpath $(distdir) \
+	  --noconfirm \
+	  --add-data "libc_metrics.json:share" \
+	  --add-data "../compliance/*.json:share/compliance" \
+	  --add-binary "$(workdir)/scc:." \
+	  --add-binary "$(workdir)/astyle:."
+ifeq ($(os),Linux)
+	@echo "Linux: running staticx"
+	staticx "$(distdir)/$@" $@
+else
+	@echo "NOT running staticx (macOS?)"
+	mv "$(distdir)/$@" $@
+endif
+
+fc-estimate-difficulty.exe:
+	mkdir -p $(workdir)/compliance
+	cp ../compliance/*.json $(workdir)/compliance
+	$(DOCKER) build . -f fced-win.Dockerfile -t fced-win
+	$(DOCKER) cp $$($(DOCKER) create --rm fced-win):/fced/$@ $@
+
+$(workdir)/scc: $(workdir)/scc-snapshots-fc-1.1.0
+	make -C $< clean
+	make -C $< scc $(if $(findstring Linux,$(os)),CFLAGS="-static") -j
+	cp $(workdir)/scc-snapshots-fc-1.1.0/scc $@
+
+$(workdir)/scc.exe: $(workdir)/scc-snapshots-fc-1.1.0
+	make -C $< clean
+	make -C $< scc CC=x86_64-w64-mingw32-gcc -j
+	cp $(workdir)/scc-snapshots-fc-1.1.0/scc.exe $@
+
+$(workdir)/scc-snapshots-fc-1.1.0:
+	mkdir -p $(workdir)
+	wget 'https://github.com/Frama-C/scc-snapshots/archive/refs/tags/fc-1.1.0.tar.gz' -O $(workdir)/fc-1.1.0.tar.gz
+	cd $(workdir) && tar xvf fc-1.1.0.tar.gz
+	touch $@
+
+$(workdir)/astyle: $(workdir)/astyle_3.1
+	make -C $(workdir)/astyle_3.1/build/gcc clean
+	make -C $(workdir)/astyle_3.1/build/gcc \
+	  $(if $(findstring Linux,$(os)),LDFLAGS="-static" CFLAGS="-static -static-libgcc -static-libstdc++") -j
+	cp $(workdir)/astyle_3.1/build/gcc/bin/astyle $@
+
+$(workdir)/astyle.exe: $(workdir)/astyle_3.1
+	make -C $(workdir)/astyle_3.1/build/gcc clean
+	make -C $(workdir)/astyle_3.1/build/gcc LDFLAGS="-static" CFLAGS="-static -static-libgcc -static-libstdc++" CXX=x86_64-w64-mingw32-g++ -j
+	cp $(workdir)/astyle_3.1/build/gcc/bin/astyle.exe $@
+
+$(workdir)/astyle_3.1:
+	mkdir -p $(workdir)
+	wget 'https://downloads.sourceforge.net/project/astyle/astyle/astyle%203.1/astyle_3.1_linux.tar.gz' -O $(workdir)/astyle_3.1_linux.tar.gz
+	cd $(workdir) && tar xvf astyle_3.1_linux.tar.gz
+	rm -rf $(workdir)/astyle_3.1
+	mv $(workdir)/astyle $(workdir)/astyle_3.1
+	sed -i.bak 's/^CXX = g++/CXX ?= g++/' $(workdir)/astyle_3.1/build/gcc/Makefile
+	sed -i.bak 's/^CXX = g++/CXX ?= g++/' $(workdir)/astyle_3.1/build/gcc/Makefile
+	touch $@
+
+clean:
+	rm -rf build $(workdir) $(distdir) fc-estimate-difficulty.spec fc-estimate-difficulty.exe.spec
+
+distclean: clean
+	rm -f fc-estimate-difficulty fc-estimate-difficulty.exe libc_metrics.json
+
+test-fc-estimate-difficulty: fc-estimate-difficulty
+ifeq ($(os),Linux)
+	$(DOCKER) build . -f fced-lin.Dockerfile -t fced-lin
+else
+	./$< fced-test | \
+	  grep -A9 "Overall difficulty score" | \
+	  grep -v 0 | \
+	  grep -q ': '
+endif
+	@echo "Done testing $^."
+
+test-fc-estimate-difficulty.exe: fc-estimate-difficulty.exe
+	@file $< | grep -q "MS Windows"
+	@echo "Done testing $< (actual testing done inside Docker image)"
+
+.PHONY: clean distclean test-fc-estimate-difficulty test-fc-estimate-difficulty.exe
diff --git a/share/analysis-scripts/fc_stubs.c b/share/analysis-scripts/fc_stubs.c
index 265e37b822f3ca6689f4b4bf56a1b3f78a745826..d78a498fd5fea23ebdb0aeb5a257032b97d5d9ed 100644
--- a/share/analysis-scripts/fc_stubs.c
+++ b/share/analysis-scripts/fc_stubs.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/analysis-scripts/fced-lin.Dockerfile b/share/analysis-scripts/fced-lin.Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..9bf2aeed8b47f5c490cd3cf2ed8560e13e839506
--- /dev/null
+++ b/share/analysis-scripts/fced-lin.Dockerfile
@@ -0,0 +1,8 @@
+FROM alpine:3.15
+COPY fc-estimate-difficulty /
+RUN mkdir /fced-test
+COPY fced-test fced-test/
+RUN ./fc-estimate-difficulty fced-test | \
+    grep -A9 "Overall difficulty score" | \
+    grep -v 0 | \
+    grep -q ': '
diff --git a/share/analysis-scripts/fced-test/a.c b/share/analysis-scripts/fced-test/a.c
new file mode 100644
index 0000000000000000000000000000000000000000..9e3b8f5980c5180127180e585cbdecaa2d7f1d90
--- /dev/null
+++ b/share/analysis-scripts/fced-test/a.c
@@ -0,0 +1,11 @@
+#include <stdlib.h>
+#include <X>
+
+volatile int v;
+
+int main() {
+  asm("mov ax, ax");
+  if (v) return main();
+  malloc(42);
+  return 0;
+}
diff --git a/share/analysis-scripts/fced-test/a.h b/share/analysis-scripts/fced-test/a.h
new file mode 100644
index 0000000000000000000000000000000000000000..5e1d66f91d23143601cf71bfc6bd47adff296ffa
--- /dev/null
+++ b/share/analysis-scripts/fced-test/a.h
@@ -0,0 +1 @@
+#include <a.h>
diff --git a/share/analysis-scripts/fced-win.Dockerfile b/share/analysis-scripts/fced-win.Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..1ae0faf9d29a083de5abbb267facb0ac4df6f67e
--- /dev/null
+++ b/share/analysis-scripts/fced-win.Dockerfile
@@ -0,0 +1,21 @@
+FROM tobix/pywine:3.10
+RUN mkdir /fced
+COPY *.py /fced/
+RUN mkdir /fced/dist-prepare
+COPY fced-dist-prepare /fced/dist-prepare/
+COPY fced-test /fced/fced-test/
+COPY libc_metrics.json /fced/
+WORKDIR /fced
+RUN wine pyinstaller estimate_difficulty.py \
+	  -F \
+	  -n fc-estimate-difficulty.exe \
+	  --distpath . \
+	  --noconfirm \
+	  --add-data "libc_metrics.json;share" \
+	  --add-data "dist-prepare/compliance/*.json;share/compliance" \
+	  --add-binary "dist-prepare/scc.exe;." \
+	  --add-binary "dist-prepare/astyle.exe;."
+RUN wine fc-estimate-difficulty.exe fced-test | \
+    grep -A9 "Overall difficulty score" | \
+    grep -v 0 | \
+    grep -q ': '
diff --git a/share/analysis-scripts/fclog.py b/share/analysis-scripts/fclog.py
new file mode 100644
index 0000000000000000000000000000000000000000..909c9392c2e3d684e4049831caafa582f50ca82d
--- /dev/null
+++ b/share/analysis-scripts/fclog.py
@@ -0,0 +1,77 @@
+# -*- coding: utf-8 -*-
+##########################################################################
+#                                                                        #
+#  This file is part of Frama-C.                                         #
+#                                                                        #
+#  Copyright (C) 2007-2024                                               #
+#    CEA (Commissariat à l'énergie atomique et aux énergies              #
+#         alternatives)                                                  #
+#                                                                        #
+#  you can redistribute it and/or modify it under the terms of the GNU   #
+#  Lesser General Public License as published by the Free Software       #
+#  Foundation, version 2.1.                                              #
+#                                                                        #
+#  It is distributed in the hope that it will be useful,                 #
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
+#  GNU Lesser General Public License for more details.                   #
+#                                                                        #
+#  See the GNU Lesser General Public License version 2.1                 #
+#  for more details (enclosed in the file licenses/LGPLv2.1).            #
+#                                                                        #
+##########################################################################
+
+"""Contains functions to perform logging-related configuration common to
+   several scripts."""
+
+import logging
+import sys
+
+# extra log level used in messages
+VERBOSE = 15
+
+
+def init(debug, verbose):
+    """Initializes the logging mechanism. 'debug' is the filename to redirect to
+    (or special values 'stdout'/'stderr'). If None, disable debug.
+    If 'verbose' is true, output VERBOSE messages. If both are set, the level
+    is 'debug'."""
+
+    logging.addLevelName(VERBOSE, "")
+    logging.addLevelName(logging.ERROR, "ERROR: ")
+    logging.addLevelName(logging.WARN, "WARNING: ")
+    logging.addLevelName(logging.INFO, "")
+    log_level = logging.DEBUG if debug else VERBOSE if verbose else logging.INFO
+    log_format = "%(levelname)s%(message)s"
+
+    # special values for debug filename
+    if debug == "stdout" or not debug:
+        logging.basicConfig(stream=sys.stdout, level=log_level, format=log_format)
+        # This very ugly hack seems necessary to avoid BrokenPipeErrors when the
+        # output of the calling script is truncated (via head, grep -q, etc).
+        # Note that, on Windows, there is an OSError with "22 Invalid argument"
+        # instead of a BrokenPipeError.
+        original_flush = sys.stdout.flush
+
+        def new_flush():
+            try:
+                original_flush()
+            except BrokenPipeError:
+                sys.stdout = None
+                sys.exit(0)
+            except OSError as e:
+                if sys.platform == "win32" and e.errno == 22:
+                    sys.stdout = None
+                    sys.exit(0)
+                raise e
+
+        sys.stdout.flush = new_flush
+    elif debug == "stderr":
+        logging.basicConfig(stream=sys.stderr, level=log_level, format=log_format)
+    else:
+        logging.basicConfig(
+            filename=debug,
+            level=log_level,
+            filemode="w",
+            format=log_format,
+        )
diff --git a/share/analysis-scripts/find_fun.py b/share/analysis-scripts/find_fun.py
index cd78f87e219f14888454bd96e54b819c48911941..e6f72074122e0c12c7ad669550224bf259f14ca9 100755
--- a/share/analysis-scripts/find_fun.py
+++ b/share/analysis-scripts/find_fun.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/frama_c_results.py b/share/analysis-scripts/frama_c_results.py
index e5d807b9805291086b394e459bdbb7bfeff09118..2e3a07db6d020f84e138ed086167fd915a278720 100644
--- a/share/analysis-scripts/frama_c_results.py
+++ b/share/analysis-scripts/frama_c_results.py
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/function_finder.py b/share/analysis-scripts/function_finder.py
index 0ee97baef6321fcfb2e0b254933c40f2b6e37a08..e6410a688bde901e3e980a61f7b56952351d29be 100644
--- a/share/analysis-scripts/function_finder.py
+++ b/share/analysis-scripts/function_finder.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/git_utils.py b/share/analysis-scripts/git_utils.py
index 4ab2a50c6f1c66e64dc34fc5b4871f6479422fe5..40cc1cf9df064ee661947e1b0a261136071a1443 100644
--- a/share/analysis-scripts/git_utils.py
+++ b/share/analysis-scripts/git_utils.py
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/heuristic_list_functions.py b/share/analysis-scripts/heuristic_list_functions.py
index 2778f5b2111b7008f88a015ed185ebaf31b41c7a..0528bd5e7c06fbe384e5a57f059279ac37fca2fd 100755
--- a/share/analysis-scripts/heuristic_list_functions.py
+++ b/share/analysis-scripts/heuristic_list_functions.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/list_files.py b/share/analysis-scripts/list_files.py
index 20727d9d98f51f5361c06c4f0bf5b38a3cc2754b..0780b569549e700aacd3669c988dc573ad730c21 100755
--- a/share/analysis-scripts/list_files.py
+++ b/share/analysis-scripts/list_files.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/list_functions.ml b/share/analysis-scripts/list_functions.ml
index 843e8bfd9d228db5e290a16d877b5eb6a2ae0b3c..38de36d9b3a15198a18f4caf26ef234c0dbde20e 100644
--- a/share/analysis-scripts/list_functions.ml
+++ b/share/analysis-scripts/list_functions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/share/analysis-scripts/make_wrapper.py b/share/analysis-scripts/make_wrapper.py
index ea16b33e603bee20eff8b8959c6b41cf275ff52a..495e2a7b2f643734415ba2919fded2ffe9be045b 100755
--- a/share/analysis-scripts/make_wrapper.py
+++ b/share/analysis-scripts/make_wrapper.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/normalize_jcdb.py b/share/analysis-scripts/normalize_jcdb.py
index e1f79aa2d5562843e70f4afb2a349a16ebe159d7..6e9e629d4f3e09be7ab669b47cffd36df016af8b 100755
--- a/share/analysis-scripts/normalize_jcdb.py
+++ b/share/analysis-scripts/normalize_jcdb.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/parse-coverage.sh b/share/analysis-scripts/parse-coverage.sh
index e2b01ef2725147dcab276ce90ca62facf523c345..37e9a30f584cfba372afa4fe66d46a6888c5422a 100755
--- a/share/analysis-scripts/parse-coverage.sh
+++ b/share/analysis-scripts/parse-coverage.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/plot.sh b/share/analysis-scripts/plot.sh
index c1130fc8a4a98e6a49a477bfeb2036e3bf43d6c0..7cf582c6e3b234572babcb1ee6370f1faba28529 100755
--- a/share/analysis-scripts/plot.sh
+++ b/share/analysis-scripts/plot.sh
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/print_callgraph.py b/share/analysis-scripts/print_callgraph.py
index 30315cc2764a8029091f1af08fb5c293959acd08..e54754174bd9cbe9294c3717cb21b53553a606ec 100755
--- a/share/analysis-scripts/print_callgraph.py
+++ b/share/analysis-scripts/print_callgraph.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -25,6 +25,7 @@
 """This script finds files containing likely declarations and definitions
 for a given function name, via heuristic syntactic matching."""
 
+from pathlib import Path
 import sys
 import build_callgraph
 
@@ -45,7 +46,7 @@ If --dot is specified, print in DOT (Graphviz) format
 to file outfile, or to stdout if outfile is '-'."""
     )
 
-cg = build_callgraph.compute(args)
+cg = build_callgraph.compute(set([Path(a) for a in args]))
 if dotfile:
     if dotfile == "-":
         out = sys.stdout
diff --git a/share/analysis-scripts/prologue.mk b/share/analysis-scripts/prologue.mk
index d68c5a8abdf08523c72ac74c5610cb8d3a395c3b..281e789e3a3913db53669e8bb3aa716b57ada651 100644
--- a/share/analysis-scripts/prologue.mk
+++ b/share/analysis-scripts/prologue.mk
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/results_display.py b/share/analysis-scripts/results_display.py
index b54fbbe91ebb6427f2d88146130ba6b74e3af5cf..f39783379a86d2d21e27731862cae2bfabdd092e 100644
--- a/share/analysis-scripts/results_display.py
+++ b/share/analysis-scripts/results_display.py
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/script_for_creduce_fatal.sh b/share/analysis-scripts/script_for_creduce_fatal.sh
index 0e539d913bd411f84b9701694aa91e17ab55116f..8757dfc58b5e48117c3f8b36f8e36e00d0a7b48a 100644
--- a/share/analysis-scripts/script_for_creduce_fatal.sh
+++ b/share/analysis-scripts/script_for_creduce_fatal.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/script_for_creduce_non_fatal.sh b/share/analysis-scripts/script_for_creduce_non_fatal.sh
index 3d980d0372def0c990c95758fd65314d4ec947de..f9d9bf48c00391b4094c6c48ed4bc2c858d0ca3d 100644
--- a/share/analysis-scripts/script_for_creduce_non_fatal.sh
+++ b/share/analysis-scripts/script_for_creduce_non_fatal.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/analysis-scripts/source_filter.py b/share/analysis-scripts/source_filter.py
index f2e1eb39889541cdb85913cfb09865c51c650859..872bf47ac8fa35d5eb9cf95e15adb809811b03bf 100644
--- a/share/analysis-scripts/source_filter.py
+++ b/share/analysis-scripts/source_filter.py
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -37,84 +37,32 @@ the efficiency of regex-based heuristics."""
 # of errors when running the filters. Note that an absent tool
 # does _not_ lead to an error.
 
-from __future__ import annotations
-import os
+import external_tool
 from pathlib import Path
-import shutil
-import subprocess
 import sys
-from typing import Optional
-
-# warnings about missing commands are disabled during testing
-emit_warns = os.getenv("PTESTS_TESTING") is None
-
-# Cache for get_command.
-cached_commands: dict[str, Optional[Path]] = {}
-
-
-def resource_path(relative_path: str) -> str:
-    """Get absolute path to resource; only used by the pyinstaller standalone distribution"""
-    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))
-    return os.path.join(base_path, relative_path)
-
-
-def get_command(command: str, env_var_name: str) -> Optional[Path]:
-    """Returns a Path to the command; priority goes to the environment variable,
-    then in the PATH, then in the resource directory (for a pyinstaller binary)."""
-    if command in cached_commands:
-        return cached_commands[command]
-    cmd = os.getenv(env_var_name)
-    if cmd:
-        p = Path(cmd)
-    else:
-        cmd = shutil.which(command)
-        if cmd:
-            p = Path(cmd)
-        else:
-            p = Path(resource_path(command))
-            if not p.exists():
-                if emit_warns:
-                    print(
-                        f"info: optional external command '{command}' not found in PATH; "
-                        f"consider installing it or setting environment variable {env_var_name}"
-                    )
-                p = None
-    cached_commands[command] = p
-    return p
-
-
-def run_and_check(command_and_args: list[str], input_data: str) -> str:
-    try:
-        return subprocess.check_output(
-            command_and_args,
-            input=input_data,
-            stderr=None,
-            encoding="ascii",
-            errors="ignore",
-        )
-    except subprocess.CalledProcessError as e:
-        sys.exit(f"error running command: {command_and_args}\n{e}")
 
 
 def filter_with_scc(input_data: str) -> str:
-    scc = get_command("scc", "SCC")
+    scc_bin = "scc" if sys.platform != "win32" else "scc.exe"
+    scc = external_tool.get_command(scc_bin, "SCC")
     if scc:
-        return run_and_check([str(scc), "-k"], input_data)
+        return external_tool.run_and_check([scc, "-k", "-b"], input_data)
     else:
         return input_data
 
 
 def filter_with_astyle(input_data: str) -> str:
-    astyle = get_command("astyle", "ASTYLE")
+    astyle_bin = "astyle" if sys.platform != "win32" else "astyle.exe"
+    astyle = external_tool.get_command(astyle_bin, "ASTYLE")
     if astyle:
-        return run_and_check(
-            [str(astyle), "--keep-one-line-blocks", "--keep-one-line-statements"], input_data
+        return external_tool.run_and_check(
+            [astyle, "--keep-one-line-blocks", "--keep-one-line-statements"], input_data
         )
     else:
         return input_data
 
 
-def open_and_filter(filename: str, apply_filters: bool) -> str:
+def open_and_filter(filename: Path, apply_filters: bool) -> str:
     # we ignore encoding errors and use ASCII to avoid issues when
     # opening files with different encodings (UTF-8, ISO-8859, etc)
     with open(filename, "r", encoding="ascii", errors="ignore") as f:
diff --git a/share/analysis-scripts/summary.py b/share/analysis-scripts/summary.py
index 20e5fdeb0ce2022b5506c22226419026c3f99603..dd7c7af6e4941f7aaac1366860fe92ae45388d47 100755
--- a/share/analysis-scripts/summary.py
+++ b/share/analysis-scripts/summary.py
@@ -4,7 +4,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
@@ -122,10 +122,10 @@ def terminate_process(process):
 
 
 def smart_rename(target):
-    target = re.sub("^\./", "", target)
-    target = re.sub("main\.eva$", "", target)
-    target = re.sub("\.eva$", "", target)
-    target = re.sub("\.frama-c/", "", target)
+    target = re.sub(r"^\./", "", target)
+    target = re.sub(r"main\.eva$", "", target)
+    target = re.sub(r"\.eva$", "", target)
+    target = re.sub(r"\.frama-c/", "", target)
     return target
 
 
diff --git a/share/analysis-scripts/template.mk b/share/analysis-scripts/template.mk
index c4fd296d4e457018206542b3b91454a20658d423..5bb66c93cafd471121724afe77056abec5259b46 100644
--- a/share/analysis-scripts/template.mk
+++ b/share/analysis-scripts/template.mk
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/autocomplete_frama-c b/share/autocomplete_frama-c
index 7f61b75e0fbb21861583d2c4d12e1fbbe7880be6..7d5f69aa1960256b62e3bfab4e5e264d70e27b5b 100644
--- a/share/autocomplete_frama-c
+++ b/share/autocomplete_frama-c
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/compliance/nonstandard_identifiers.json b/share/compliance/nonstandard_identifiers.json
index 48ae07e1c9cc0b33afccce4aac6a18b78b257c06..5ad01f743fb6656c7998c00cd85e74c4ebc1b8ba 100644
--- a/share/compliance/nonstandard_identifiers.json
+++ b/share/compliance/nonstandard_identifiers.json
@@ -2,6 +2,7 @@
     "description": "Non-ISO C, Non-POSIX identifiers known to the Frama-C standard library",
     "source":"Manpages, mostly Linux and BSD",
     "data":{
+        "arc4random_buf": {"header":"stdlib.h"},
         "facilitynames": {"header":"syslog.h"},
         "getresgid": {"header":"unistd.h"},
         "getresuid": {"header":"unistd.h"},
diff --git a/share/dune b/share/dune
index f00d3b92a5ed96459a035d8ca93acd082c366e9c..2ae614fc0c6e23b920743c499ff5d3336e61178f 100644
--- a/share/dune
+++ b/share/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
@@ -289,6 +289,8 @@
 (analysis-scripts/creduce.sh as lib/analysis-scripts/creduce.sh)
 (analysis-scripts/detect_recursion.py as lib/analysis-scripts/detect_recursion.py)
 (analysis-scripts/estimate_difficulty.py as lib/analysis-scripts/estimate_difficulty.py)
+(analysis-scripts/external_tool.py as lib/analysis-scripts/external_tool.py)
+(analysis-scripts/fclog.py as lib/analysis-scripts/fclog.py)
 (analysis-scripts/find_fun.py as lib/analysis-scripts/find_fun.py)
 (analysis-scripts/flamegraph.pl as lib/analysis-scripts/flamegraph.pl)
 (analysis-scripts/frama_c_results.py as lib/analysis-scripts/frama_c_results.py)
diff --git a/share/emacs/acsl.el b/share/emacs/acsl.el
index 7cbe6c8a6330220aabdd55e1e137fec72eca31d1..1d1c3bb8d70fc0ecc8524321c73c9293a26bdf03 100644
--- a/share/emacs/acsl.el
+++ b/share/emacs/acsl.el
@@ -5,7 +5,7 @@
 ;  Copyright (C) 2008-2011                                               ;
 ;    Pierre Roux                                                         ;
 ;                                                                        ;
-;  Copyright (C) 2009-2023                                               ;
+;  Copyright (C) 2009-2024                                               ;
 ;    CEA LIST                                                            ;
 ;                                                                        ;
 ;  you can redistribute it and/or modify it under the terms of the GNU   ;
diff --git a/share/emacs/frama-c-dev.el b/share/emacs/frama-c-dev.el
index 8616bc709d33cd46fdaf0ecce6b643fe91d1be5b..f735bbc11cfb98af9d58e23ae333dec84c1ce1f7 100644
--- a/share/emacs/frama-c-dev.el
+++ b/share/emacs/frama-c-dev.el
@@ -2,7 +2,7 @@
 ;                                                                        ;
 ;  This file is part of Frama-C.                                         ;
 ;                                                                        ;
-;  Copyright (C) 2007-2023                                               ;
+;  Copyright (C) 2007-2024                                               ;
 ;    CEA (Commissariat à l'énergie atomique et aux énergies              ;
 ;         alternatives)                                                  ;
 ;                                                                        ;
diff --git a/share/emacs/frama-c-init.el b/share/emacs/frama-c-init.el
index 4da06cd18c22022e5db96c5b7c00a694ecf74e46..c5cc9b6f5b710921b32b2e27c903b1275a797c42 100644
--- a/share/emacs/frama-c-init.el
+++ b/share/emacs/frama-c-init.el
@@ -2,7 +2,7 @@
 ;                                                                        ;
 ;  This file is part of Frama-C.                                         ;
 ;                                                                        ;
-;  Copyright (C) 2007-2023                                               ;
+;  Copyright (C) 2007-2024                                               ;
 ;    CEA (Commissariat à l'énergie atomique et aux énergies              ;
 ;         alternatives)                                                  ;
 ;                                                                        ;
diff --git a/share/emacs/frama-c-recommended.el b/share/emacs/frama-c-recommended.el
index d36971caab3f8c5dd6edadbc7978bf68e5109493..d458be5d89cc0043474f24ca2ae442ac3d7e9561 100644
--- a/share/emacs/frama-c-recommended.el
+++ b/share/emacs/frama-c-recommended.el
@@ -2,7 +2,7 @@
 ;                                                                        ;
 ;  This file is part of Frama-C.                                         ;
 ;                                                                        ;
-;  Copyright (C) 2007-2023                                               ;
+;  Copyright (C) 2007-2024                                               ;
 ;    CEA (Commissariat à l'énergie atomique et aux énergies              ;
 ;         alternatives)                                                  ;
 ;                                                                        ;
diff --git a/share/frama-c.Unix.rc b/share/frama-c.Unix.rc
index 6edd680627dbb347d917443164cae029a8fe8b7b..40f2fd593a4511588a6cde5f8872e297dd4e54cc 100644
--- a/share/frama-c.Unix.rc
+++ b/share/frama-c.Unix.rc
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/frama-c.WIN32.rc b/share/frama-c.WIN32.rc
index 1020949f2285dd2fd0cb5f64f96fa6a5fd74a109..125ba33944dd66883b026ba693bc0d801f38f74e 100644
--- a/share/frama-c.WIN32.rc
+++ b/share/frama-c.WIN32.rc
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/libc.c b/share/libc.c
index 7c924277d61c0d44453e03fe5f4e0499b4c2d201..f243b8dfdb570788ede392ad3b446d10b2c82939 100644
--- a/share/libc.c
+++ b/share/libc.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_alloc_axiomatic.h b/share/libc/__fc_alloc_axiomatic.h
index 4907f55c96ca6ea5df9563363b8a08cd16f3007d..9c83559588501c0ec84be29486f9a16674b97082 100644
--- a/share/libc/__fc_alloc_axiomatic.h
+++ b/share/libc/__fc_alloc_axiomatic.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_builtin.c b/share/libc/__fc_builtin.c
index 6a98e5bb151e3d61c70c2ab565967849a566002a..40ac7db14136f65a816e6fc0d89afd25997b5e32 100644
--- a/share/libc/__fc_builtin.c
+++ b/share/libc/__fc_builtin.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -20,8 +20,9 @@
 /*                                                                        */
 /**************************************************************************/
 
-#include "__fc_builtin.h"
+#include "features.h"
 __PUSH_FC_STDLIB
+#include "__fc_builtin.h"
 #include "limits.h"
 
 /* Those builtins implementations could probably be removed entirely for
@@ -32,9 +33,17 @@ __PUSH_FC_STDLIB
 int volatile Frama_C_entropy_source;
 
 // Additional entropy sources for some interval functions
+unsigned short volatile __fc_unsigned_short_entropy;
 unsigned int volatile __fc_unsigned_int_entropy;
 long volatile __fc_long_entropy;
 unsigned long volatile __fc_unsigned_long_entropy;
+long long volatile __fc_long_long_entropy;
+unsigned long long volatile __fc_unsigned_long_long_entropy;
+size_t volatile __fc_size_t_entropy;
+intmax_t volatile __fc_intmax_t_entropy;
+uintmax_t volatile __fc_uintmax_t_entropy;
+ptrdiff_t volatile __fc_ptrdiff_t_entropy;
+wint_t volatile __fc_wint_t_entropy;
 
 //@ assigns Frama_C_entropy_source \from Frama_C_entropy_source;
 void Frama_C_update_entropy(void) {
@@ -48,6 +57,13 @@ void Frama_C_make_unknown(char *p, size_t l) {
   }
 }
 
+void Frama_C_make_unknown_wchar(wchar_t *p, size_t l) {
+  Frama_C_update_entropy();
+  for (size_t i = 0; i < l; i++) {
+    p[i] = Frama_C_entropy_source;
+  }
+}
+
 int Frama_C_nondet(int a, int b)
 {
   Frama_C_update_entropy();
@@ -77,6 +93,11 @@ char Frama_C_char_interval(char min, char max)
   return (char)Frama_C_interval(min, max);
 }
 
+short Frama_C_short_interval(short min, short max)
+{
+  return (short)Frama_C_interval(min, max);
+}
+
 float Frama_C_float_interval(float min, float max)
 {
   Frama_C_update_entropy();
@@ -94,6 +115,18 @@ unsigned char Frama_C_unsigned_char_interval(unsigned char min, unsigned char ma
   return (unsigned char)Frama_C_interval(min, max);
 }
 
+unsigned short Frama_C_unsigned_short_interval(unsigned short min, unsigned short max)
+{
+  unsigned short r, aux;
+  Frama_C_update_entropy();
+  aux = __fc_unsigned_short_entropy;
+  if (aux >= min && aux <= max)
+    r = aux;
+  else
+    r = min;
+  return r;
+}
+
 unsigned int Frama_C_unsigned_int_interval(unsigned int min, unsigned int max)
 {
   unsigned int r, aux;
@@ -130,6 +163,96 @@ unsigned long Frama_C_unsigned_long_interval(unsigned long min, unsigned long ma
   return r;
 }
 
+long long Frama_C_long_long_interval(long long min, long long max)
+{
+  long long r, aux;
+  Frama_C_update_entropy();
+  aux = __fc_long_long_entropy;
+  if (aux >= min && aux <= max)
+    r = aux;
+  else
+    r = min;
+  return r;
+}
+
+unsigned long long Frama_C_unsigned_long_long_interval(unsigned long long min, unsigned long long max)
+{
+  unsigned long long r, aux;
+  Frama_C_update_entropy();
+  aux = __fc_unsigned_long_long_entropy;
+  if (aux >= min && aux <= max)
+    r = aux;
+  else
+    r = min;
+  return r;
+}
+
+size_t Frama_C_size_t_interval(size_t min, size_t max)
+{
+  size_t r, aux;
+  Frama_C_update_entropy();
+  aux = __fc_size_t_entropy;
+  if (aux >= min && aux <= max)
+    r = aux;
+  else
+    r = min;
+  return r;
+}
+
+intmax_t Frama_C_intmax_t_interval(intmax_t min, intmax_t max)
+{
+  intmax_t r, aux;
+  Frama_C_update_entropy();
+  aux = __fc_intmax_t_entropy;
+  if (aux >= min && aux <= max)
+    r = aux;
+  else
+    r = min;
+  return r;
+}
+
+uintmax_t Frama_C_uintmax_t_interval(uintmax_t min, uintmax_t max)
+{
+  uintmax_t r, aux;
+  Frama_C_update_entropy();
+  aux = __fc_uintmax_t_entropy;
+  if (aux >= min && aux <= max)
+    r = aux;
+  else
+    r = min;
+  return r;
+}
+
+ptrdiff_t Frama_C_ptrdiff_t_interval(ptrdiff_t min, ptrdiff_t max)
+{
+  ptrdiff_t r, aux;
+  Frama_C_update_entropy();
+  aux = __fc_ptrdiff_t_entropy;
+  if (aux >= min && aux <= max)
+    r = aux;
+  else
+    r = min;
+  return r;
+}
+
+wint_t Frama_C_wint_t_interval(wint_t min, wint_t max)
+{
+  wint_t r, aux;
+  Frama_C_update_entropy();
+  aux = __fc_wint_t_entropy;
+  if (aux >= min && aux <= max)
+    r = aux;
+  else
+    r = min;
+  return r;
+}
+
+/*@
+  terminates \false;
+  assigns \nothing;
+  ensures never_terminates: \false;
+  exits always_exits: \true;
+ */
 extern void __builtin_abort(void) __attribute__((noreturn)); // GCC builtin
 
 void Frama_C_abort(void)
diff --git a/share/libc/__fc_builtin.h b/share/libc/__fc_builtin.h
index c3ea849b9ed55ebd4b0892ac79100fd7cf0b7fcd..d2ed15cc0b0b307d93098b8724eda79d7c90d28b 100644
--- a/share/libc/__fc_builtin.h
+++ b/share/libc/__fc_builtin.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -24,7 +24,10 @@
 #define Frama_C_BUILTIN
 #include "features.h"
 __PUSH_FC_STDLIB
-#include "__fc_define_size_t.h"
+#include "__fc_alloc_axiomatic.h"
+#include "__fc_define_wint_t.h"
+#include "stddef.h"
+#include "stdint.h"
 
 __BEGIN_DECLS
 
@@ -37,6 +40,13 @@ extern volatile int Frama_C_entropy_source __attribute__((unused));
 */
 extern void Frama_C_make_unknown(char *p, size_t l) __attribute__((FC_BUILTIN));
 
+/*@ requires valid_p: \valid(p + (0 .. l-1));
+    assigns p[0 .. l-1] \from Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+    ensures initialization: \initialized(p + (0 .. l-1));
+*/
+extern void Frama_C_make_unknown_wchar(wchar_t *p, size_t l) __attribute__((FC_BUILTIN));
+
 /*@ assigns \result \from a, b, Frama_C_entropy_source;
     assigns Frama_C_entropy_source \from Frama_C_entropy_source;
     ensures result_a_or_b: \result == a || \result == b ;
@@ -154,21 +164,69 @@ extern long long Frama_C_long_long_interval(long long min, long long max)
 extern size_t Frama_C_size_t_interval(size_t min, size_t max)
     __attribute__((FC_BUILTIN));
 
-/*@ requires finite: \is_finite(min) && \is_finite(max);
-    requires order: min <= max;
+/*@ requires order: min <= max;
     assigns \result \from min, max, Frama_C_entropy_source;
     assigns Frama_C_entropy_source \from Frama_C_entropy_source;
-    ensures result_bounded: \is_finite(\result) && min <= \result <= max;
+    ensures result_bounded: min <= \result <= max ;
  */
-extern float Frama_C_float_interval(float min, float max)
+extern intmax_t Frama_C_intmax_t_interval(intmax_t min, intmax_t max)
     __attribute__((FC_BUILTIN));
 
-/*@ requires finite: \is_finite(min) && \is_finite(max);
-    requires order: min <= max;
+/*@ requires order: min <= max;
     assigns \result \from min, max, Frama_C_entropy_source;
     assigns Frama_C_entropy_source \from Frama_C_entropy_source;
-    ensures result_bounded: \is_finite(\result) && min <= \result <= max;
+    ensures result_bounded: min <= \result <= max ;
  */
+extern uintmax_t Frama_C_uintmax_t_interval(uintmax_t min, uintmax_t max)
+    __attribute__((FC_BUILTIN));
+
+/*@ requires order: min <= max;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+    ensures result_bounded: min <= \result <= max ;
+ */
+extern ptrdiff_t Frama_C_ptrdiff_t_interval(ptrdiff_t min, ptrdiff_t max)
+    __attribute__((FC_BUILTIN));
+
+/*@ requires order: min <= max;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+    ensures result_bounded: min <= \result <= max ;
+ */
+extern wint_t Frama_C_wint_t_interval(wint_t min, wint_t max)
+    __attribute__((FC_BUILTIN));
+
+/*@
+  assigns \result \from min, max, Frama_C_entropy_source;
+  assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+  behavior finite:
+    assumes finite: \is_finite(min) && \is_finite(max);
+    requires order: min <= max;
+    ensures result_bounded: \is_finite(\result) && min <= \result <= max;
+  behavior infinite_not_nan:
+    assumes infinite: \is_infinite(min) || \is_infinite(max);
+    assumes not_nan: !\is_NaN(min) && !\is_NaN(max);
+    requires order: min <= max;
+    ensures result_bounded: !\is_NaN(\result) && min <= \result <= max;
+  disjoint behaviors;
+*/
+extern float Frama_C_float_interval(float min, float max)
+    __attribute__((FC_BUILTIN));
+
+/*@
+  assigns \result \from min, max, Frama_C_entropy_source;
+  assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+  behavior finite:
+    assumes finite: \is_finite(min) && \is_finite(max);
+    requires order: min <= max;
+    ensures result_bounded: \is_finite(\result) && min <= \result <= max;
+  behavior infinite_not_nan:
+    assumes infinite: \is_infinite(min) || \is_infinite(max);
+    assumes not_nan: !\is_NaN(min) && !\is_NaN(max);
+    requires order: min <= max;
+    ensures result_bounded: !\is_NaN(\result) && min <= \result <= max;
+  disjoint behaviors;
+*/
 extern double Frama_C_double_interval(double min, double max)
     __attribute__((FC_BUILTIN));
 
@@ -192,6 +250,11 @@ __attribute__((FC_BUILTIN));
 /*@ assigns \result \from p; */
 extern size_t Frama_C_offset(const void *p) __attribute__((FC_BUILTIN));
 
+/*@
+  allocates \result;
+  assigns __fc_heap_status \from size, __fc_heap_status;
+  assigns \result \from indirect:size, indirect:__fc_heap_status;
+*/
 extern void *Frama_C_malloc_fresh(size_t size) __attribute__((FC_BUILTIN));
 
 //@ assigns \result \from i;
diff --git a/share/libc/__fc_define_blkcnt_t.h b/share/libc/__fc_define_blkcnt_t.h
index 241cdb9ceb45b411246fd8d26573933d519d3d38..ccd7ff51f8197a8d85f30096b06d21baea307095 100644
--- a/share/libc/__fc_define_blkcnt_t.h
+++ b/share/libc/__fc_define_blkcnt_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_blksize_t.h b/share/libc/__fc_define_blksize_t.h
index d6dfda7ffb7ed3ce30815920396a54eec88b3606..75956ea0e6c9effe5c16984c70ae4480b6a4810d 100644
--- a/share/libc/__fc_define_blksize_t.h
+++ b/share/libc/__fc_define_blksize_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_clockid_t.h b/share/libc/__fc_define_clockid_t.h
index 2d1ad4c3b4126cd535e9d850cd37d220ad28aa50..942a5b2bcac425a7aee886fa84a27920f1b37488 100644
--- a/share/libc/__fc_define_clockid_t.h
+++ b/share/libc/__fc_define_clockid_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_dev_t.h b/share/libc/__fc_define_dev_t.h
index 2c344b16af6064a5b03b4bd405d4036db9a8f9b2..0b1a39443d1deb65d68c0ab7e4201163eba6ab4a 100644
--- a/share/libc/__fc_define_dev_t.h
+++ b/share/libc/__fc_define_dev_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_eof.h b/share/libc/__fc_define_eof.h
index 0b75200073428a4d5fcea2062ae560c5a5f49ed4..8113a9a2cfb28d4363447feb0671005aa55bfc7a 100644
--- a/share/libc/__fc_define_eof.h
+++ b/share/libc/__fc_define_eof.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_fd_set_t.h b/share/libc/__fc_define_fd_set_t.h
index f67d66cdb6d9db24b6c06b244768986072dcfd89..39be4e9f49e6b99016c94b2e8bec8de9e9437141 100644
--- a/share/libc/__fc_define_fd_set_t.h
+++ b/share/libc/__fc_define_fd_set_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_fds.h b/share/libc/__fc_define_fds.h
index c945e8588b39409eb5af84d847e62104a98d6226..7f56dbf273fbae051de968bfe2258060c3d91eaf 100644
--- a/share/libc/__fc_define_fds.h
+++ b/share/libc/__fc_define_fds.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_file.h b/share/libc/__fc_define_file.h
index dd7abd5bcb960d6b06b0d80dc705557cd81cd8f4..fb43dcd2370cb5ab2a1e3a7acce11f7fbc38f48b 100644
--- a/share/libc/__fc_define_file.h
+++ b/share/libc/__fc_define_file.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_fpos_t.h b/share/libc/__fc_define_fpos_t.h
index 6582c826197feb2efe13c8afa2748d959700e166..4ef20b6eb00c4f26d1cef12c524ed3eb7e92704d 100644
--- a/share/libc/__fc_define_fpos_t.h
+++ b/share/libc/__fc_define_fpos_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_fs_cnt.h b/share/libc/__fc_define_fs_cnt.h
index 9666912c4c9a79f9f80a630ac28b1101bc421edf..96a3179b70996626bb87cdac5b78f8e8e8d44655 100644
--- a/share/libc/__fc_define_fs_cnt.h
+++ b/share/libc/__fc_define_fs_cnt.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_id_t.h b/share/libc/__fc_define_id_t.h
index c8fd1c4c069d2bdabca17e35043fa62fef14593e..5124eca910c2646802229df376c77398a1e10c98 100644
--- a/share/libc/__fc_define_id_t.h
+++ b/share/libc/__fc_define_id_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_ino_t.h b/share/libc/__fc_define_ino_t.h
index 52d36d98b38c39b083ef76bd4737a1669237e739..a82b9478b2d828f453f1a840a6116d353ecb6c4f 100644
--- a/share/libc/__fc_define_ino_t.h
+++ b/share/libc/__fc_define_ino_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_intptr_t.h b/share/libc/__fc_define_intptr_t.h
index 01844f218981d1e0dea830a67cc1268e2f4931eb..8b9a788d3986f32149e02a5d281772fd7211eb52 100644
--- a/share/libc/__fc_define_intptr_t.h
+++ b/share/libc/__fc_define_intptr_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_iovec.h b/share/libc/__fc_define_iovec.h
index adef96ca8e92a4384cf8ba08378ac76aeec945aa..ff7e370ee286b2a8a32b0d5f4bffdc9470905c80 100644
--- a/share/libc/__fc_define_iovec.h
+++ b/share/libc/__fc_define_iovec.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_key_t.h b/share/libc/__fc_define_key_t.h
index 5a594c8c569faabcaac6f521187b97d435c1da05..b1dfe24dcb9df8c0e7147ce6625ca21fffac6edc 100644
--- a/share/libc/__fc_define_key_t.h
+++ b/share/libc/__fc_define_key_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_locale_t.h b/share/libc/__fc_define_locale_t.h
index 3a464b468f82b3759491368f8622e2a31ab1dd90..1e80a548eda56227901ed15e8f1f5bfceea17fe5 100644
--- a/share/libc/__fc_define_locale_t.h
+++ b/share/libc/__fc_define_locale_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_max_open_files.h b/share/libc/__fc_define_max_open_files.h
index f30f30746e87f93a899b39f9f4bfd8832941f29b..f420f70df137bfb434f59168e11c5d0629268cc1 100644
--- a/share/libc/__fc_define_max_open_files.h
+++ b/share/libc/__fc_define_max_open_files.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_mode_t.h b/share/libc/__fc_define_mode_t.h
index 01dbe42bf46974bb15d45b4d8bbbdd37d111ade9..68193179e7a71ca920d62d1e196f89fd961b309e 100644
--- a/share/libc/__fc_define_mode_t.h
+++ b/share/libc/__fc_define_mode_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_nlink_t.h b/share/libc/__fc_define_nlink_t.h
index a86d5670fa5b53fe83a7102d16c21694f1784ecc..4f67e5261dd96d7f6e39a740204592f9a754ab69 100644
--- a/share/libc/__fc_define_nlink_t.h
+++ b/share/libc/__fc_define_nlink_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_null.h b/share/libc/__fc_define_null.h
index 7696ff1c4ec6212d3b4c020b48ec46f59d75281e..a3567565bffc5c56fea811de5d6a284703f716de 100644
--- a/share/libc/__fc_define_null.h
+++ b/share/libc/__fc_define_null.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_off_t.h b/share/libc/__fc_define_off_t.h
index 05d23610b8dbfc8ca8b70b01dc3772b719c173c0..1938c3100b3e6281cc50e160c447966602909523 100644
--- a/share/libc/__fc_define_off_t.h
+++ b/share/libc/__fc_define_off_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_pid_t.h b/share/libc/__fc_define_pid_t.h
index 55e4ac947f0892e3b72a0c7d5c55cb485902685e..5473090e3e25fa8d36b55a100f35d772bbbe9888 100644
--- a/share/libc/__fc_define_pid_t.h
+++ b/share/libc/__fc_define_pid_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_pthread_types.h b/share/libc/__fc_define_pthread_types.h
index 3e102d19894f21c048e0528be8cefd54c2c77254..f982e83597be44e061167c3df2c535eb271a3cb1 100644
--- a/share/libc/__fc_define_pthread_types.h
+++ b/share/libc/__fc_define_pthread_types.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -44,14 +44,7 @@ typedef struct __fc_pthread_once_t { int _fc; } pthread_once_t;
 typedef struct __fc_pthread_rwlock_t { int _fc; } pthread_rwlock_t;
 typedef struct __fc_pthread_rwlockattr_t { int _fc; } pthread_rwlockattr_t;
 typedef struct __fc_pthread_spinlock_t { int _fc; } pthread_spinlock_t;
-
-#ifdef __FC_PTHREAD_T_IS_SCALAR
-// Some non-portable code assumes pthread_t as a scalar; this allows
-// such code to be parsed.
 typedef unsigned long pthread_t;
-#else
-typedef struct __fc_pthread_t { unsigned long _fc; } pthread_t;
-#endif
 __END_DECLS
 __POP_FC_STDLIB
 #endif
diff --git a/share/libc/__fc_define_sa_family_t.h b/share/libc/__fc_define_sa_family_t.h
index 5a19ec3d2a148a2b373df21a41ac5a1d2a167840..c7f25f33f381db9516e5e8522d9dc62af804b19d 100644
--- a/share/libc/__fc_define_sa_family_t.h
+++ b/share/libc/__fc_define_sa_family_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_seek_macros.h b/share/libc/__fc_define_seek_macros.h
index 27174bd1b5e5ca8bad08cc8440805c1886fabe18..9c11142b0b69bb645e84d9f528cc1061795b4315 100644
--- a/share/libc/__fc_define_seek_macros.h
+++ b/share/libc/__fc_define_seek_macros.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_sigset_t.h b/share/libc/__fc_define_sigset_t.h
index 30f99f6f804ea9d320d2aa3e1378608b79fa35c9..8e9be1d4485fcd68c1b2eaad15a2a9cf30799dbc 100644
--- a/share/libc/__fc_define_sigset_t.h
+++ b/share/libc/__fc_define_sigset_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_size_t.h b/share/libc/__fc_define_size_t.h
index 2db9bc4d0172a3f5a4e47d1889178e357c918995..bd30f7220622800adf27a07452b6464de9d2b4b9 100644
--- a/share/libc/__fc_define_size_t.h
+++ b/share/libc/__fc_define_size_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_sockaddr.h b/share/libc/__fc_define_sockaddr.h
index 16ba8bbe3a142b96867530e5264c07bc8495f1ed..08bfd8c74f343562705e83fd250f0df4e3dff023 100644
--- a/share/libc/__fc_define_sockaddr.h
+++ b/share/libc/__fc_define_sockaddr.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_ssize_t.h b/share/libc/__fc_define_ssize_t.h
index 222cc07e66426bc490c3dc53fcba914134b37bdc..abc07f97fe30a78fc269fcc131bf85a9e4edda6e 100644
--- a/share/libc/__fc_define_ssize_t.h
+++ b/share/libc/__fc_define_ssize_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_stat.h b/share/libc/__fc_define_stat.h
index 72574b7b31e3c6c79db5b16273fe0174ca4492ac..595d7ff30feeef7154f2c7e82f0368a61d96236a 100644
--- a/share/libc/__fc_define_stat.h
+++ b/share/libc/__fc_define_stat.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_suseconds_t.h b/share/libc/__fc_define_suseconds_t.h
index e6b3c66ca5383cb9a81b852f636c969b5cc8507e..9569f637dbb377534191b8daa7c4f399e69db134 100644
--- a/share/libc/__fc_define_suseconds_t.h
+++ b/share/libc/__fc_define_suseconds_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_time_t.h b/share/libc/__fc_define_time_t.h
index e6d039c5df9bf8ffddf887ca0355a3a5a56dc9ec..b35a04c2afc8078cf6a18d306227f2a47b81f3e6 100644
--- a/share/libc/__fc_define_time_t.h
+++ b/share/libc/__fc_define_time_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_timer_t.h b/share/libc/__fc_define_timer_t.h
index 6ff7ea40433c479e18660bc4df8772714de79cf0..f85625744cacada88ff662fa3cab35cea7db1ea7 100644
--- a/share/libc/__fc_define_timer_t.h
+++ b/share/libc/__fc_define_timer_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_timespec.h b/share/libc/__fc_define_timespec.h
index af13c65eac03f12b8120bcb8a14ac55261e21aaf..e61d0b82b901e41bb4c6e3b5dc993fed98f3a8ee 100644
--- a/share/libc/__fc_define_timespec.h
+++ b/share/libc/__fc_define_timespec.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_timeval.h b/share/libc/__fc_define_timeval.h
index c2d201dc4f15f06448f66fd9f171bb260bef0c6e..2689368b8e0620de028d1f30822cf999f6b357ca 100644
--- a/share/libc/__fc_define_timeval.h
+++ b/share/libc/__fc_define_timeval.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_uid_and_gid.h b/share/libc/__fc_define_uid_and_gid.h
index 121767482d6a9a1d4588eb50650bee0a9670c089..5f02b580d769818c96fd78f677d3f04df94286b9 100644
--- a/share/libc/__fc_define_uid_and_gid.h
+++ b/share/libc/__fc_define_uid_and_gid.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_useconds_t.h b/share/libc/__fc_define_useconds_t.h
index 353ae61f7dcdfe1a91865925aa2b5b81dc3b90c5..c23b31f685dad350bdb3d4eb7e4c813511532edb 100644
--- a/share/libc/__fc_define_useconds_t.h
+++ b/share/libc/__fc_define_useconds_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_wchar_t.h b/share/libc/__fc_define_wchar_t.h
index 749e8ffcba17dd05baf93412e3f439bc2cd0d9e2..4f7f766997eba05b33d133f339736f880f9dd0ca 100644
--- a/share/libc/__fc_define_wchar_t.h
+++ b/share/libc/__fc_define_wchar_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_define_wint_t.h b/share/libc/__fc_define_wint_t.h
index 824d4d4f6b011c74f5da3d53aedc539b9e5d689d..68f26bfb5b3436c2ab41b1fcd99a90079a1995e0 100644
--- a/share/libc/__fc_define_wint_t.h
+++ b/share/libc/__fc_define_wint_t.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_gcc_builtins.h b/share/libc/__fc_gcc_builtins.h
index bf47a4f812296434ab94b067ad460cd3b7e99f7f..c6288a2509369c192f0ca6fee46e5b85704884cf 100644
--- a/share/libc/__fc_gcc_builtins.h
+++ b/share/libc/__fc_gcc_builtins.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_inet.h b/share/libc/__fc_inet.h
index 249bc7a3c24e467b7bd23a33cd7432cd078e5e12..c105f3bda4ae5fe057e1b89191d1f6c14b2ab621 100644
--- a/share/libc/__fc_inet.h
+++ b/share/libc/__fc_inet.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_integer.h b/share/libc/__fc_integer.h
index cffcde441a0e33c0ff6e9285bcf1deca663cd655..466d8fdd14e3429a554329c7a3f525b17cf40032 100644
--- a/share/libc/__fc_integer.h
+++ b/share/libc/__fc_integer.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_libc.h b/share/libc/__fc_libc.h
index 997d921028a9e2db617ac540f86f1e03bdbf4e5f..e03a746b5fd93c7b7517d16d025179d308bf1694 100644
--- a/share/libc/__fc_libc.h
+++ b/share/libc/__fc_libc.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_machdep_linux_shared.h b/share/libc/__fc_machdep_linux_shared.h
index 3b0e48bc84dfbd98b0b4fb611e86d8f78445d073..6f146ffb2baa1abd1b679b7d7b78d50b86cd7c70 100644
--- a/share/libc/__fc_machdep_linux_shared.h
+++ b/share/libc/__fc_machdep_linux_shared.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_machdep_old.c b/share/libc/__fc_machdep_old.c
index f2ae398c843a010cd0dbd1f2bfdd3c00b260c673..46afd1d6fd3bffbadcc0797f2659d4b64bcde617 100644
--- a/share/libc/__fc_machdep_old.c
+++ b/share/libc/__fc_machdep_old.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_runtime.c b/share/libc/__fc_runtime.c
index 8012c4447456d79545b5a3163207a32838eb29c5..dfc6cf363c96f8fff21774df9946a30896e881c5 100644
--- a/share/libc/__fc_runtime.c
+++ b/share/libc/__fc_runtime.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_select.h b/share/libc/__fc_select.h
index 4129cc192d268b29ba3845779b247bac19164c70..b78389e2ec5acde40097b1609f7a6a8f64323a32 100644
--- a/share/libc/__fc_select.h
+++ b/share/libc/__fc_select.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/__fc_string_axiomatic.h b/share/libc/__fc_string_axiomatic.h
index b29e246d6d6a56fce33e1e4c8cbd295ba7572e5f..d137cba4eeb573bb77e9678a453d9f6ed4182118 100644
--- a/share/libc/__fc_string_axiomatic.h
+++ b/share/libc/__fc_string_axiomatic.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -270,10 +270,6 @@ __BEGIN_DECLS
   @ }
   @*/
 
-/*@ logic ℤ minimum(ℤ i, ℤ j) = i < j ? i : j;
-  @ logic ℤ maximum(ℤ i, ℤ j) = i < j ? j : i;
-  @*/
-
 /*@ predicate valid_string{L}(char *s) =
   @   0 <= strlen(s) && \valid(s+(0..strlen(s)));
   @
@@ -299,6 +295,9 @@ __BEGIN_DECLS
   @
   @ predicate valid_wstring_or_null{L}(wchar_t *s) =
   @   s == \null || valid_wstring(s);
+  @
+  @ logic ℤ strnlen(char *s, ℤ n) =
+  @   \min(strlen(s), n);
   @*/
 
 __END_DECLS
diff --git a/share/libc/aio.h b/share/libc/aio.h
index 2de1b89022eb383954d8d522166062bdd604e0e1..ef3eb9095eac788918dca0d686724bad18aaff6b 100644
--- a/share/libc/aio.h
+++ b/share/libc/aio.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/alloca.h b/share/libc/alloca.h
index 3d0d270c6294f65999c19f20014ed360cc18f20f..123040e61679ddb9e004a9b2d3e64eeb84209a61 100644
--- a/share/libc/alloca.h
+++ b/share/libc/alloca.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/argz.c b/share/libc/argz.c
index d6f9a1b1c51117c5ac9d6290f7e060653e8823e6..23f6b4a509c6329e03919bce467d022aa0eccde6 100644
--- a/share/libc/argz.c
+++ b/share/libc/argz.c
@@ -2,9 +2,9 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 1995-2023                                               */
+/*  Copyright (C) 1995-2021                                               */
 /*    Free Software Foundation, Inc.                                      */
-/*  Copyright (C) 2021-2023                                               */
+/*  Copyright (C) 2021-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -43,6 +43,12 @@ void argz_stringify (char *argz, size_t len, int sep) {
     }
 }
 
+/*@
+  assigns *to \from *to, indirect:*to_len, indirect:buf_len;
+  assigns *to_len \from *to_len, buf_len;
+  assigns *to[0 .. \old(*to_len) + buf_len]
+    \from *to[0 .. \old(*to_len)], buf[0 .. buf_len];
+ */
 static void str_append (char **to, size_t *to_len, const char *buf,
                         const size_t buf_len) {
   size_t new_len = *to_len + buf_len;
diff --git a/share/libc/argz.h b/share/libc/argz.h
index dee49e6493ecd51e6bbcb12f81ac830d0154a6d4..b68450d44a18ed7c1ea6c9c0098bed347475fcb9 100644
--- a/share/libc/argz.h
+++ b/share/libc/argz.h
@@ -2,9 +2,9 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 1995-2023                                               */
+/*  Copyright (C) 1995-2021                                               */
 /*    Free Software Foundation, Inc.                                      */
-/*  Copyright (C) 2021-2023                                               */
+/*  Copyright (C) 2021-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -42,48 +42,93 @@ __BEGIN_DECLS
 
 typedef int error_t;
 
+/*@
+  allocates *argz;
+  assigns (*argz)[0..], *len, \result \from argv[0..][0..];
+*/
 extern error_t argz_create (char *const argv[], char **restrict argz,
                             size_t *restrict len);
 
-/*@ assigns \result, *argz[..] \from \nothing; */
+/*@
+  allocates *argz;
+  assigns (*argz)[0..], *len, \result \from string[0..], sep, (*argz)[0..], *len;
+*/
 extern error_t argz_create_sep (const char *restrict string,
                                 int sep, char **restrict argz,
                                 size_t *restrict len);
 
+/*@ assigns \result \from indirect:argz[0 .. strlen(argz)], indirect:len; */
 extern size_t argz_count (const char *argz, size_t len);
 
+/*@ assigns argv[0..][0..] \from argz[0 .. len], indirect:len; */
 extern void argz_extract (const char *restrict argz, size_t len,
                           char **restrict argv);
 
+/*@ assigns argz[0..] \from argz[0..], indirect:len, sep; */
 extern void argz_stringify (char *argz, size_t len, int sep);
 
+/*@
+  allocates *argz;
+  assigns (*argz)[0..], *argz_len \from (*argz)[0..], *argz_len,
+                                        buf[0..], buf_len;
+  assigns \result \from indirect:(*argz)[0..], indirect:*argz_len,
+                        indirect:buf[0..], indirect:buf_len;
+*/
 extern error_t argz_append (char **restrict argz,
                             size_t *restrict argz_len,
                             const char *restrict buf, size_t buf_len);
 
+/*@
+  allocates *argz;
+  assigns (*argz)[0..], *argz_len, \result \from (*argz)[0..], *argz_len,
+                                                 str[0..];
+*/
 extern error_t argz_add (char **restrict argz,
                          size_t *restrict argz_len,
                          const char *restrict str);
 
+/*@
+  allocates *argz;
+  assigns (*argz)[0..], *argz_len, \result \from string[0..], delim;
+*/
 extern error_t argz_add_sep (char **restrict argz,
                              size_t *restrict argz_len,
                              const char *restrict string, int delim);
 
+/*@
+  frees *argz;
+  assigns (*argz)[0..], *argz_len \from (*argz)[0..], *argz_len, entry[0..];
+*/
 extern void argz_delete (char **restrict argz,
                          size_t *restrict argz_len,
                          char *restrict entry);
 
+/*@
+  allocates *argz;
+  assigns (*argz)[0..], *argz_len, \result \from (*argz)[0..], *argz_len,
+                                                 before, before[0..],
+                                                 entry[0..];
+*/
 extern error_t argz_insert (char **restrict argz,
                             size_t *restrict argz_len,
                             char *restrict before,
                             const char *restrict entry);
 
+/*@
+  allocates *argz;
+  assigns (*argz)[0..], *argz_len, *replace_count, \result
+  \from
+      (*argz)[0..], *argz_len, str[0..], with[0..], *replace_count;
+*/
 extern error_t argz_replace (char **restrict argz,
                              size_t *restrict argz_len,
                              const char *restrict str,
                              const char *restrict with,
                              unsigned int *restrict replace_count);
 
+/*@
+  assigns \result \from argz[0..], argz_len, entry;
+*/
 extern char *argz_next (const char *restrict argz, size_t argz_len,
                         const char *restrict entry);
 
diff --git a/share/libc/arpa/inet.h b/share/libc/arpa/inet.h
index adf221ae5affb2b2f4066e4386e659b66fbdd0ed..7616ed75321f18a2e4403dcef6b1094f2bb546c3 100644
--- a/share/libc/arpa/inet.h
+++ b/share/libc/arpa/inet.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/assert.c b/share/libc/assert.c
index c8bbbbea5134f2fc79480fc758370d1ac75cd401..06e44f4efdde4a22a41282d22510bc693fae62e6 100644
--- a/share/libc/assert.c
+++ b/share/libc/assert.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/assert.h b/share/libc/assert.h
index ea999416cc0184a090328758e6b1beb28aa2bd12..d39145266ad1b1f2acff313f0b2fe22d6174713f 100644
--- a/share/libc/assert.h
+++ b/share/libc/assert.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/byteswap.h b/share/libc/byteswap.h
index 86bf9f144d2c873a1f8066e1a2bfed8d75daf409..0ab984ac87cbdfb1b99f37605db7309f16ebff74 100644
--- a/share/libc/byteswap.h
+++ b/share/libc/byteswap.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/complex.h b/share/libc/complex.h
index 00434449c914e3bd4e55d8332f591be1d51b4fc4..ed1e3588b03df963d47b764cdd60a1e3e5dea398 100644
--- a/share/libc/complex.h
+++ b/share/libc/complex.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/cpio.h b/share/libc/cpio.h
index f9b08f28dc00d642599b8b7cc276e96d96b46290..db1f3c2c2c11f3523a8d5b9b5c428487054a3c01 100644
--- a/share/libc/cpio.h
+++ b/share/libc/cpio.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/ctype.c b/share/libc/ctype.c
index 3b6751f04b351ef0a695a202c41bef78b6ab55bc..b83b16c04d24f7ab47e73b801850dafafe3cbda8 100644
--- a/share/libc/ctype.c
+++ b/share/libc/ctype.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/ctype.h b/share/libc/ctype.h
index ce879ba059b2a4ff1bb875fc090d1a69f19f0c46..ecf63ed9b3af675ca740aa366c51a87a39710d0e 100644
--- a/share/libc/ctype.h
+++ b/share/libc/ctype.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/dirent.h b/share/libc/dirent.h
index db28266b226d4992d28b7d5c73bcadc8c2633aae..29b62b28e9ba9f18aa9d1639f539b45b8723b8b9 100644
--- a/share/libc/dirent.h
+++ b/share/libc/dirent.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/dlfcn.h b/share/libc/dlfcn.h
index 03d888853ac03132642ca7c8d0f4a0efd62aacd2..d501727c126f5dc3cf9ef975f664f60b05a6b9c9 100644
--- a/share/libc/dlfcn.h
+++ b/share/libc/dlfcn.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/endian.h b/share/libc/endian.h
index 98e8e06b6b07c1d9f50f6b3ba3978add85688ca1..a2b8fb99786102fa4957a9984feab1b209b4a156 100644
--- a/share/libc/endian.h
+++ b/share/libc/endian.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/err.h b/share/libc/err.h
index bc35b29a60f20adc0e5120ba13ec226dd7528a6b..17d82470acf441eacabb7d471cbb0d9a52ee2328 100644
--- a/share/libc/err.h
+++ b/share/libc/err.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/errno.c b/share/libc/errno.c
index 6ad94db18cb1900017bb0ef8e9d99df06bf054d9..1ac211f754d453f222ffebf21643f86120a69100 100644
--- a/share/libc/errno.c
+++ b/share/libc/errno.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/errno.h b/share/libc/errno.h
index 2fa3792a89d6b39414b4610f2d3aaffbdf140bfc..1a0b436266b7b5ace044b8af4100870c22d708eb 100644
--- a/share/libc/errno.h
+++ b/share/libc/errno.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/fcntl.h b/share/libc/fcntl.h
index 39c1f2a1308d8cdb6c71acffa57e260b536fdae7..2b8bdda70e4441a9fd6eddcc96c926a28ad1b539 100644
--- a/share/libc/fcntl.h
+++ b/share/libc/fcntl.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/features.h b/share/libc/features.h
index c2de5126dd72e1ac32985257c5df33e348981f4c..fab4fd114cd30d73b5bec7551b3d9660b637055c 100644
--- a/share/libc/features.h
+++ b/share/libc/features.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/fenv.c b/share/libc/fenv.c
index c516edb7c6fa3fbf411b2129bb02d4d05886c0e1..e1a07bd71044f32530c39608823dcc6bb1835916 100644
--- a/share/libc/fenv.c
+++ b/share/libc/fenv.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/fenv.h b/share/libc/fenv.h
index 5a1a9928e17a48e1d0c6ee1ed7d827d25d73e71c..d2876e7a8712bc947e35b523369a2a824a01009c 100644
--- a/share/libc/fenv.h
+++ b/share/libc/fenv.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -73,35 +73,73 @@ typedef struct __fc_fenv_t
   }
 fenv_t;
 
-/** Determines which of a specified subset of the floating-point exception flags
- *  are currently set.
- *  \param excepts  Specifies the floating-point status flags to be queried.
- *  \return  The value of the bitwise OR of the floating-point exception macros
- *    corresponding to the currently set floating-point exceptions included in
- *    parameter excepts.
- */
-extern int fetestexcept( int excepts );
-
-/** Saves the current floating-point environment in the object pointed to by
- *  envp, clears the floating-point status flags, and then installs a non-stop
- *  (continue on floating-point exceptions) mode for all floating-point
- *  exceptions.
- *  \return Always returns zero.
- */
-extern int feholdexcept( fenv_t *envp );
-
-/** Establishes the floating-point environment represented by the object pointed
- *  to by envp. The argument envp shall point to a valid floating-point
- *  environment object.
- *  In principle, this function has the potential to trigger pending previous
- *  exceptions: If envp contains a raised exception flag and at the same time
- *  unmasks that exception type, then this will cause an interrupt.
- */
-extern int fesetenv( const fenv_t *envp );
-
-/** Clears the supported floating-point exceptions represented by argument. 
- */
-extern int feclearexcept( int excepts );
+// From POSIX 1-2017:
+// - "fexcept_t does not have to be an integer type."
+// - "... the user cannot inspect it."
+// Non-portable code may consider fexcept_t as a scalar; this allows
+// such code to be parsed.
+typedef unsigned int fexcept_t;
+
+__FC_EXTERN volatile fenv_t __fc_fenv_state;
+
+/*@
+  assigns __fc_fenv_state \from indirect:excepts, __fc_fenv_state;
+  assigns \result \from indirect:__fc_fenv_state, indirect:excepts;
+*/
+extern int feclearexcept(int excepts);
+
+/*@
+  assigns *envp \from __fc_fenv_state;
+  assigns \result \from indirect:__fc_fenv_state;
+*/
+extern int fegetenv(fenv_t *envp);
+
+/*@
+  assigns *flagp \from __fc_fenv_state, excepts;
+  assigns \result \from indirect:__fc_fenv_state, indirect:excepts;
+*/
+extern int fegetexceptflag(fexcept_t *flagp, int excepts);
+
+/*@ assigns \result \from __fc_fenv_state; */
+extern int fegetround(void);
+
+/*@
+  assigns *envp, __fc_fenv_state \from __fc_fenv_state;
+  assigns \result \from indirect:__fc_fenv_state;
+*/
+extern int feholdexcept(fenv_t *envp);
+
+/*@ assigns \result \from indirect:__fc_fenv_state, indirect:excepts; */
+extern int feraiseexcept(int excepts);
+
+/*@
+  assigns __fc_fenv_state \from *envp;
+  assigns \result \from indirect:__fc_fenv_state, indirect:*envp;
+*/
+extern int fesetenv(const fenv_t *envp);
+
+/*@
+  assigns __fc_fenv_state \from *flagp, excepts;
+  assigns \result \from indirect:__fc_fenv_state, indirect:*flagp,
+                        indirect:excepts;
+*/
+extern int fesetexceptflag(const fexcept_t *flagp, int excepts);
+
+/*@
+  assigns __fc_fenv_state \from indirect:__fc_fenv_state, indirect:round;
+  assigns \result \from indirect:__fc_fenv_state, indirect:round;
+*/
+extern int fesetround(int round);
+
+/*@ assigns \result \from indirect:excepts, __fc_fenv_state; */
+extern int fetestexcept(int excepts);
+
+/*@
+  assigns __fc_fenv_state \from __fc_fenv_state, *envp;
+  assigns \result \from indirect:__fc_fenv_state, indirect:*envp;
+*/
+extern int feupdateenv(const fenv_t *envp);
+
 
 __END_DECLS
 
diff --git a/share/libc/float.h b/share/libc/float.h
index 561de6349c6c0aa88ee66aed73d359b25317627a..4b682a0f9feb65977cdc476ff9005ae3e7db0fc8 100644
--- a/share/libc/float.h
+++ b/share/libc/float.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/fmtmsg.h b/share/libc/fmtmsg.h
index 192b423bdb6fe6d1a4e7d1b1d6ccb54206edd8cc..da8205f4f7195f9476842bd83cd209e23fbbf794 100644
--- a/share/libc/fmtmsg.h
+++ b/share/libc/fmtmsg.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/fnmatch.h b/share/libc/fnmatch.h
index afea4c61e98d397f93ac43c70d5542799b0b45ae..20232c84cdbe459fcf057f108834b47cdecaf246 100644
--- a/share/libc/fnmatch.h
+++ b/share/libc/fnmatch.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/ftw.h b/share/libc/ftw.h
index 19ee7e4616630ba08258bef42f042233416f52ee..df4b58ea7e2b38cb1b467db60c05abe020af41c9 100644
--- a/share/libc/ftw.h
+++ b/share/libc/ftw.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/getopt.h b/share/libc/getopt.h
index 32f23c70c062befe25c0d2886c2c79d5991080e8..16774e90f4cf99f571b696efb2fcae72a7ba3883 100644
--- a/share/libc/getopt.h
+++ b/share/libc/getopt.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/glob.c b/share/libc/glob.c
index 507d9bb25759a29a8569f9b29fec9982e6bf6236..83b532b3f0f046468df8c65d76f3e9ad42e019d6 100644
--- a/share/libc/glob.c
+++ b/share/libc/glob.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -74,6 +74,7 @@ int glob(const char *pattern, int flags,
     pglob->gl_pathv[reserve_offs + prev_len + i] = (char*)"glob result";
   }
   pglob->gl_pathv[prev_len + reserve_offs + pglob->gl_pathc] = 0; // terminator
+  pglob->gl_flags = flags | (Frama_C_nondet(0, GLOB_MAGCHAR));
   if (Frama_C_nondet(0, 1)) { // simulate "no error"
     return 0;
   } else {
diff --git a/share/libc/glob.h b/share/libc/glob.h
index 21dd731307a1a03fb9dac75bebf4a50368b928cd..44a09d7cf703ace46ef5d27fe45be33adb4aa7a1 100644
--- a/share/libc/glob.h
+++ b/share/libc/glob.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -26,6 +26,7 @@
 __PUSH_FC_STDLIB
 
 #include "__fc_machdep.h"
+#include "__fc_string_axiomatic.h"
 
 #define	GLOB_ERR	(1 << 0)/* Return on read errors.  */
 #define	GLOB_MARK	(1 << 1)/* Append a slash to each name.  */
@@ -35,6 +36,7 @@ __PUSH_FC_STDLIB
 #define	GLOB_APPEND	(1 << 5)/* Append to results of a previous call.  */
 #define	GLOB_NOESCAPE	(1 << 6)/* Backslashes don't quote metacharacters.  */
 #define	GLOB_PERIOD	(1 << 7)/* Leading `.' can be matched by metachars.  */
+#define	GLOB_MAGCHAR	(1 << 8)/* GNU-specific */
 
 #define	GLOB_NOSPACE	1	/* Ran out of memory.  */
 #define	GLOB_ABORTED	2	/* Read error.  */
@@ -67,10 +69,23 @@ typedef struct __fc_glob_t {
 #endif
 } glob_t;
 
+/*@
+  allocates pglob->gl_pathv;
+  assigns *pglob \from indirect:pattern[0 .. strlen(pattern)],
+                       flags,
+                       indirect:errfunc;
+  assigns \result \from indirect:pattern[0 .. strlen(pattern)],
+                        indirect:flags,
+                        indirect:errfunc;
+*/
 extern int glob(const char *pattern, int flags,
                 int (*errfunc) (const char *epath, int eerrno),
                 glob_t *pglob);
 
+/*@
+  frees pglob->gl_pathv;
+  assigns *pglob \from *pglob;
+ */
 extern void globfree(glob_t *pglob);
 
 __END_DECLS
diff --git a/share/libc/grp.h b/share/libc/grp.h
index 7c211839896832a8426d2d6b2d075895e9aeee59..992c70577f4aab91153e9da7c85bc75f81f3aa49 100644
--- a/share/libc/grp.h
+++ b/share/libc/grp.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/iconv.h b/share/libc/iconv.h
index bb2ce8cf8196d81d2b28c6c43ee60202cd29fb11..5ac659759c45d65b6ab4fe1c0f84ccb98b85c5c5 100644
--- a/share/libc/iconv.h
+++ b/share/libc/iconv.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/ifaddrs.h b/share/libc/ifaddrs.h
index dc3cb7b3ffb3bcde3523ee401069236166dcab95..47bea2299b97a58338ecf715814de8b7ca3d7553 100644
--- a/share/libc/ifaddrs.h
+++ b/share/libc/ifaddrs.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/inttypes.c b/share/libc/inttypes.c
index a1959bb109176bbf4d40911db3d55e4269a89425..757ca25e119b6a83801c3a3e2afab03794e9ce69 100644
--- a/share/libc/inttypes.c
+++ b/share/libc/inttypes.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/inttypes.h b/share/libc/inttypes.h
index 1c64e01cff56a4abce9c0cfd9a8a7389113037a2..3018b8cefe943ed97904eac5cd411feeba1495d5 100644
--- a/share/libc/inttypes.h
+++ b/share/libc/inttypes.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/iso646.h b/share/libc/iso646.h
index b16621a91b3437f59c0f0f0a5423b9e01dbe1c6e..97cadd47f4379d3e74cd895834c1b7df64c5ebbe 100644
--- a/share/libc/iso646.h
+++ b/share/libc/iso646.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/langinfo.h b/share/libc/langinfo.h
index 6fdb93361cb7ffe3655543654c705dfd75e00f7b..589c946f00af3f4409b8cb062bf64df0190adf3d 100644
--- a/share/libc/langinfo.h
+++ b/share/libc/langinfo.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/libgen.h b/share/libc/libgen.h
index 32728f56295be1a9476ffa95f8e498ed1f50e674..e92d94f52fce8d3a3bc735f2512cbb56afc516e2 100644
--- a/share/libc/libgen.h
+++ b/share/libc/libgen.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/limits.h b/share/libc/limits.h
index 0bb88cb1bedf5b8f98ccc8a343e09aa7cd8dbfcf..96a1165821e9abdf0630a2a0d5d092ff40408461 100644
--- a/share/libc/limits.h
+++ b/share/libc/limits.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/locale.c b/share/libc/locale.c
index 25182fd5dea3391026cbf193d4318871bff15f4e..836d3aed1035c3a488a7206a757d057490804813 100644
--- a/share/libc/locale.c
+++ b/share/libc/locale.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/locale.h b/share/libc/locale.h
index 0d325beeebb6034b1a22ccafa013f84f8b6993e5..4d5f79a833945cbca1dbb10bc44119ff159cdf22 100644
--- a/share/libc/locale.h
+++ b/share/libc/locale.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/malloc.h b/share/libc/malloc.h
index a9b02f27b46866889ddd42f1fb58fc492fbba9ac..bcaab5f630e61a9c0a5487080a77c9220639042b 100644
--- a/share/libc/malloc.h
+++ b/share/libc/malloc.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/math.c b/share/libc/math.c
index 17483f7e842b35d3c2aef5acd665ca6de1ddacb4..6955f7fa3ef1f4328b0bb3e0bb65125ef08dcf04 100644
--- a/share/libc/math.c
+++ b/share/libc/math.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/math.h b/share/libc/math.h
index 98c90b964830e6c64deba8153b52df855993735b..58988069052f46db56be9901b9d1a660024c1ec5 100644
--- a/share/libc/math.h
+++ b/share/libc/math.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/memory.h b/share/libc/memory.h
index c7fd4c1392b3a041161e7da217a440461e072b08..8390deed40567547137c28f03fa9d4468f86de62 100644
--- a/share/libc/memory.h
+++ b/share/libc/memory.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/monetary.h b/share/libc/monetary.h
index 06d7a88d0ac90bd5aead4e0a012fa274c8a6cf3b..695e5a074b3b1a0e890e56d6f9bd1f01a95872f2 100644
--- a/share/libc/monetary.h
+++ b/share/libc/monetary.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/mqueue.h b/share/libc/mqueue.h
index 0a3461d225084915aefe71968663ad790de2ea23..533e5ff2dc6ae6e17e96d4b0799b1e8c0e32e9d0 100644
--- a/share/libc/mqueue.h
+++ b/share/libc/mqueue.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/ndbm.h b/share/libc/ndbm.h
index 68a4e0d5a3f225ca5731d45e40f149c62de359bd..c7aa8308c14826f4b3366efd919bd746e5cd258f 100644
--- a/share/libc/ndbm.h
+++ b/share/libc/ndbm.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/net/if.h b/share/libc/net/if.h
index b9234c55657b10a98b7b63f0cd4d8154e1288cef..a134d1e0704fad8837f48da0462fe03821d327c9 100644
--- a/share/libc/net/if.h
+++ b/share/libc/net/if.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/netdb.c b/share/libc/netdb.c
index fc34e7139b96a3b1f54a2ee1b07554158076e124..88682b5f91582b7c8fabf8fed66f6c3f3d93e3b8 100644
--- a/share/libc/netdb.c
+++ b/share/libc/netdb.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -93,6 +93,10 @@ struct __fc_gethostbyname {
 
 struct __fc_gethostbyname __fc_ghbn;
 
+/*@
+  assigns answer[0 .. anslen-1], \result
+    \from indirect:anslen, Frama_C_entropy_source;
+*/
 static int res_search(const char *dname, int rec_class, int type,
                char *answer, int anslen) {
   for (int i = 0; i < anslen-1; i++) {
diff --git a/share/libc/netdb.h b/share/libc/netdb.h
index 84d499e7a210f621ffe0f1e28a6393d883203ce9..7a5457ec2b37e0ff725d23d0b6af8349cdace8e7 100644
--- a/share/libc/netdb.h
+++ b/share/libc/netdb.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -28,6 +28,7 @@ __PUSH_FC_STDLIB
 #include "netinet/in.h"
 #include "sys/socket.h"
 #include "inttypes.h"
+#include "__fc_builtin.h"
 #include "__fc_string_axiomatic.h"
 
 __BEGIN_DECLS
@@ -123,8 +124,8 @@ extern void endnetent(void);
 extern void endprotoent(void);
 extern void endservent(void);
 /*@ requires addrinfo_valid: \valid(addrinfo);
-  assigns \nothing;
   frees addrinfo;
+  assigns \nothing;
   ensures allocation: \allocable(addrinfo);
 */
 extern void freeaddrinfo(struct addrinfo * addrinfo);
@@ -143,12 +144,12 @@ extern const char *gai_strerror(int errcode);
     requires hints_option: hints == \null || \valid_read(hints);
     requires valid_res: \valid(res);
 
+    allocates *res;
+
     assigns *res \from indirect:nodename, indirect:servname, indirect:hints;
     assigns \result \from indirect:nodename, indirect:servname,indirect:hints;
     assigns errno \from indirect:nodename, indirect:servname, indirect:hints;
 
-    allocates *res;
-
     behavior empty_request:
       assumes empty: nodename == \null && servname == \null;
       assigns \result \from indirect:nodename, indirect:servname;
@@ -178,7 +179,14 @@ extern int getaddrinfo(
   struct addrinfo **restrict res);
 
 extern struct hostent *gethostbyaddr(const void *, socklen_t, int);
-extern struct hostent *gethostbyname(const char *);
+
+/*@
+  allocates \result;
+  assigns *\result \from name[0 .. strlen(name)], Frama_C_entropy_source;
+  assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+*/
+extern struct hostent *gethostbyname(const char *name);
+
 extern struct hostent *gethostent(void);
 extern int getnameinfo(const struct sockaddr *restrict, socklen_t,
  char *restrict, socklen_t, char *restrict,
diff --git a/share/libc/netinet/in.c b/share/libc/netinet/in.c
index ca1be59f704805ae6c21985f528e54d4cdca5fbc..b31fa9e691f0ca18e7f387f1f73f83831d572aea 100644
--- a/share/libc/netinet/in.c
+++ b/share/libc/netinet/in.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/netinet/in.h b/share/libc/netinet/in.h
index c2b2a51a9e4af1eb2797f515dbf8e99c3d6d6c3d..2961ad57078c5478baaf0b3305bbfc605f843d54 100644
--- a/share/libc/netinet/in.h
+++ b/share/libc/netinet/in.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/netinet/ip.h b/share/libc/netinet/ip.h
index 3b7c4ba4a92dc65cbd99d33d8ae8084f53ca0468..99849f31ce5b404b4c4a565168bfcf886ea5e955 100644
--- a/share/libc/netinet/ip.h
+++ b/share/libc/netinet/ip.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/netinet/tcp.h b/share/libc/netinet/tcp.h
index 8fbbf85637e986e3062598129a282d9e191c1583..576b8381885355404d850aa024b5ef8fb7931f98 100644
--- a/share/libc/netinet/tcp.h
+++ b/share/libc/netinet/tcp.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/nl_types.h b/share/libc/nl_types.h
index fef393fc048fb044ec99b14bad1890c9685d8b33..4c63a5e0b7874f3788b65133e8d96b43d8b673f1 100644
--- a/share/libc/nl_types.h
+++ b/share/libc/nl_types.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/poll.h b/share/libc/poll.h
index 0a632bc1efe7b50c6e53bbeaf4a436e3a76e4af6..b117c880c38b71db3af37672bb4a6c08092443bd 100644
--- a/share/libc/poll.h
+++ b/share/libc/poll.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/pthread.h b/share/libc/pthread.h
index 8f8c6b7ebd032bacc1d0a804f766a372a4d16c35..12bef61e4690934984c504a1caca80a7a94c76a4 100644
--- a/share/libc/pthread.h
+++ b/share/libc/pthread.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -226,8 +226,8 @@ extern int pthread_condattr_setpshared(pthread_condattr_t *, int);
     requires valid_null_arg: arg == \null || \valid((char*)arg);
     assigns *thread \from *attr;
     assigns \result \from indirect:*attr;
-    ensures success_or_error:
-      \result == 0 ||
+    ensures initialization:success_or_error:
+      (\result == 0 && \initialized(thread)) ||
       \result == EAGAIN || \result == EINVAL || \result == EPERM;
  */
 extern int pthread_create(pthread_t *restrict thread,
diff --git a/share/libc/pwd.c b/share/libc/pwd.c
index 2eaaeb592afbf4485c3eaa014706b91bf88c971e..92dcae6e47104ca72f11ac636a7a8af8fd9a83b0 100644
--- a/share/libc/pwd.c
+++ b/share/libc/pwd.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -48,6 +48,11 @@ static int __fc_getpw_init; // used to initialize the __fc_getpw* strings
   remaining -= len
 
 // Common code between getpwman_r and getpwuid_r
+/*@ assigns __fc_getpw_init, __fc_getpw_pw_name[0..63],
+            __fc_getpw_pw_passwd[0..63], __fc_getpw_pw_gecos[0..63],
+            __fc_getpw_pw_dir[0..63], __fc_getpw_pw_shell[0..63],
+            buf[0 .. buflen-1], *pwd, *result, \result
+      \from __fc_pwd; */
 static int __fc_getpw_r(struct passwd *pwd, char *buf,
                         size_t buflen, struct passwd **result) {
   // initialize global strings (only during first execution)
diff --git a/share/libc/pwd.h b/share/libc/pwd.h
index d3b76728d1c760eebac0bcf2f49fb615be705dd2..101e35e3df1effd596e566848e33163d0f6c5b5e 100644
--- a/share/libc/pwd.h
+++ b/share/libc/pwd.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/regex.h b/share/libc/regex.h
index b8fc0b8c2f19d392f66b9b58fc87e69d93ddb03d..f9fd610345a9597415c83f760e01e233d8e0412c 100644
--- a/share/libc/regex.h
+++ b/share/libc/regex.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/resolv.h b/share/libc/resolv.h
index fb9d08141b783a94e4b0d7660a119635aa0af864..09bb48739e03e2267e1e7efd419291bd580f8ca9 100644
--- a/share/libc/resolv.h
+++ b/share/libc/resolv.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sched.h b/share/libc/sched.h
index 1b83e967577ce866b98a789265bdfaea9d5a591c..c4a70a479cd8d55885abe5523c671d2127dda5ec 100644
--- a/share/libc/sched.h
+++ b/share/libc/sched.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/search.h b/share/libc/search.h
index 9eb43b782e2297dcf13e0fb73ca37310fdf9fd9b..4a44501fa851bcdb08ec0ff992aa1094f77309b1 100644
--- a/share/libc/search.h
+++ b/share/libc/search.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/semaphore.h b/share/libc/semaphore.h
index 820706f9f7164bf9666a77aa6f915eecb5a061f3..bae1236fcf3b4c8de4695bda72701185f6903024 100644
--- a/share/libc/semaphore.h
+++ b/share/libc/semaphore.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/setjmp.h b/share/libc/setjmp.h
index 0b4de0163ce9e364e31742a11db1c39fd85abbbc..6fd324256fa7776f17fc7d10d6b0bfa8701ed1cf 100644
--- a/share/libc/setjmp.h
+++ b/share/libc/setjmp.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -27,27 +27,43 @@ __PUSH_FC_STDLIB
 __BEGIN_DECLS
 
 /* Note: setjmp/longjmp/sigsetjmp/siglongjmp are currently unsupported
-   by Frama-C and should not be used. */
+   by Frama-C and should not be used. This file should nevertheless allow
+   Frama-C to parse code using them, but the semantics is unsound. */
 
-typedef int jmp_buf[5]; // arbitrary size
+// The definitions are inspired from glibc and musl, but simplified.
+// Minimally portable code should parse with them.
 
-/*@ assigns env[0..4]; // unsound - should "assigns \anything" */
+#include "__fc_define_sigset_t.h"
+
+typedef int __jmp_buf[8]; // arbitrary size
+
+typedef struct __jmp_buf_tag {
+  __jmp_buf __jmpbuf;
+  int saved;
+  sigset_t sigs;
+} jmp_buf[1];
+
+typedef jmp_buf sigjmp_buf;
+
+/*@ // unsound - should "assigns \anything"
+  assigns \result \from indirect:env; //missing: \from 'value given to longjmp'
+*/
 extern int setjmp(jmp_buf env);
 
 /*@
- assigns \nothing;
+ assigns \nothing; //missing: '\result \from setjmp()'
  ensures never_terminates: \false;
 */
 extern void longjmp(jmp_buf env, int val);
 
-#include "__fc_define_sigset_t.h"
-typedef struct __fc_sigjmp_buf {jmp_buf buf; sigset_t sigs;} sigjmp_buf;
-
-
+/*@ // unsound - should "assigns \anything"
+  assigns \result \from indirect:env, indirect:savesigs;
+  // missing:     \from 'value given to siglongjmp'
+*/
 extern int sigsetjmp(sigjmp_buf env, int savesigs);
 
 /*@
- assigns \nothing;
+ assigns \nothing; //missing: '\result \from sigsetjmp()'
  ensures never_terminates: \false;
 */
 extern void siglongjmp(sigjmp_buf env, int val);
diff --git a/share/libc/signal.c b/share/libc/signal.c
index 0f9e84fc34cb854f94887d2a63cc7e7a2463d106..3832a609fbc855ef09ce63e0264d85b0f936339a 100644
--- a/share/libc/signal.c
+++ b/share/libc/signal.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/signal.h b/share/libc/signal.h
index 30851947103312e43d4a0adf40dfc50484c68c82..94848b2e7234f35914d23aff731ac53ac340c06c 100644
--- a/share/libc/signal.h
+++ b/share/libc/signal.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/spawn.h b/share/libc/spawn.h
index e35c8e455b6ddbd9810688c179552ab26a6352d9..6dae29babee56aac9333b4fcf4dc138eb5eab981 100644
--- a/share/libc/spawn.h
+++ b/share/libc/spawn.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/stdalign.h b/share/libc/stdalign.h
index 1335149a35a4a57f5fd67705ba775ff8251ae0ca..46b1945b4511090b3167f6e9f856ddb11a7c407a 100644
--- a/share/libc/stdalign.h
+++ b/share/libc/stdalign.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/stdarg.h b/share/libc/stdarg.h
index 06e1612af6b190b77927d459a306c893568e663a..3102699c9c8397b659160fadc4c29adf15072435 100644
--- a/share/libc/stdarg.h
+++ b/share/libc/stdarg.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/stdatomic.c b/share/libc/stdatomic.c
index 812401785d53243af47a5fe851ba149ad6f5c9c7..28723c038b582e998df80c4dd33c57593dd745a6 100644
--- a/share/libc/stdatomic.c
+++ b/share/libc/stdatomic.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -32,13 +32,16 @@ void atomic_thread_fence(memory_order order) {}
 
 void atomic_signal_fence(memory_order order) {}
 
-_Bool __fc_atomic_is_lock_free(void *obj) { return Frama_C_nondet(0, 1); }
+_Bool __fc_atomic_is_lock_free(void *obj, size_t obj_size) {
+  return Frama_C_nondet(0, 1);
+}
 
-void __fc_atomic_store_marker(void *object, unsigned long long desired) {}
+void __fc_atomic_store_marker(void *object, unsigned long long desired,
+                              size_t obj_size) {}
 
 void __fc_atomic_store_explicit_marker(void *object,
                                        unsigned long long desired,
-                                       memory_order order) {}
+                                       memory_order order, size_t obj_size) {}
 
 unsigned long long __fc_atomic_load(void *obj, size_t obj_size) {
   if (obj_size == sizeof(char)) return *((volatile atomic_uchar *)obj);
diff --git a/share/libc/stdatomic.h b/share/libc/stdatomic.h
index d8edc996ea191bb30949c1e77eba21572f849ef5..8f0674cbc62b231fbe526cee50020a2b18ec84e3 100644
--- a/share/libc/stdatomic.h
+++ b/share/libc/stdatomic.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -101,41 +101,78 @@ typedef _Atomic uintmax_t atomic_uintmax_t;
 // NOTE: The stubs below serve only to help parsing succeed and do not
 //       match expected concurrence semantics.
 
+/*@ assigns \nothing; */
+void __fc_atomic_init_marker(void *obj, unsigned long long value);
 #define atomic_init(obj, value)                                         \
   do { __fc_atomic_init_marker(obj, value); *obj = value; } while (0)
 
 #define kill_dependency(y) (y)
 
+/*@
+  assigns \nothing;
+*/
 extern void atomic_thread_fence(memory_order order);
-extern void atomic_signal_fence(memory_order order);
 
-_Bool __fc_atomic_is_lock_free(void *obj);
-#define atomic_is_lock_free(obj) __fc_atomic_is_lock_free(obj)
+/*@
+  assigns \nothing;
+*/
+extern void atomic_signal_fence(memory_order order);
 
-void __fc_atomic_store_marker(void *object, unsigned long long desired);
+/*@
+  assigns \result \from indirect:obj, indirect:obj_size; // in reality, should be '\from typeof(obj)'
+*/
+_Bool __fc_atomic_is_lock_free(void *obj, size_t obj_size);
+#define atomic_is_lock_free(obj) __fc_atomic_is_lock_free(obj, sizeof(obj))
+
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)) \from desired;
+*/
+void __fc_atomic_store_marker(void *object, unsigned long long desired,
+                              size_t obj_size);
 #define atomic_store(obj, value)                                        \
-  do { __fc_atomic_store_marker(obj, value); *obj = value; } while (0)
+  do { __fc_atomic_store_marker(obj, value, sizeof(obj)); *obj = value; \
+  } while (0)
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)) \from desired, indirect:order;
+*/
 void __fc_atomic_store_explicit_marker(void *object, unsigned long long desired,
-                                       memory_order order);
+                                       memory_order order, size_t obj_size);
 #define atomic_store_explicit(obj, value, order)                        \
-  do { __fc_atomic_store_explicit_marker(obj, value, order); *obj = value; } \
+  do { __fc_atomic_store_explicit_marker(obj, value, order, sizeof(obj)); \
+    *obj = value; }                                                     \
   while (0)
 
+/*@
+  assigns \result \from *((char*)object+(0 .. obj_size-1)), indirect:obj_size;
+*/
 unsigned long long __fc_atomic_load(void *object, size_t obj_size);
 #define atomic_load(obj) __fc_atomic_load(obj, sizeof(*obj))
 
+/*@
+  assigns \result \from *((char*)object+(0 .. obj_size-1)), indirect:order,
+                        indirect:obj_size;
+*/
 unsigned long long __fc_atomic_load_explicit(void *object, memory_order order,
                                              size_t obj_size);
 #define atomic_load_explicit(obj, order)                \
   __fc_atomic_load_explicit(obj, order, sizeof(*obj))
 
+/*@
+  assigns \result, *((char*)object+(0 .. obj_size-1))
+    \from *((char*)object+(0 .. obj_size-1)), desired, indirect:obj_size;
+*/
 unsigned long long __fc_atomic_exchange(void *object,
                                         unsigned long long desired,
                                         size_t obj_size);
 #define atomic_exchange(obj, desired)                   \
   __fc_atomic_exchange(obj, desired, sizeof(*obj))
 
+/*@
+  assigns \result, *((char*)object+(0 .. obj_size-1))
+    \from *((char*)object+(0 .. obj_size-1)), desired, indirect:order,
+    indirect:obj_size;
+*/
 unsigned long long __fc_atomic_exchange_explicit(void *object,
                                                  unsigned long long desired,
                                                  memory_order order,
@@ -143,12 +180,32 @@ unsigned long long __fc_atomic_exchange_explicit(void *object,
 #define atomic_exchange_explicit(obj, desired, order)                   \
   __fc_atomic_exchange_explicit(obj, desired, order, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)),
+          *((char*)expected+(0 .. obj_size-1))
+    \from *((char*)object+(0 .. obj_size-1)),
+          *((char*)expected+(0 .. obj_size-1)), desired, indirect:obj_size;
+  assigns \result \from indirect:*((char*)object+(0 .. obj_size-1)),
+                        indirect:*((char*)expected+(0 .. obj_size-1)),
+                        indirect:obj_size;
+*/
 _Bool __fc_atomic_compare_exchange_strong(void *object, void *expected,
                                           unsigned long long desired,
                                           size_t obj_size);
 #define atomic_compare_exchange_strong(obj, desired, expected)          \
   __fc_atomic_compare_exchange_strong(obj, desired, expected, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)),
+          *((char*)expected+(0 .. obj_size-1))
+    \from *((char*)object+(0 .. obj_size-1)),
+          *((char*)expected+(0 .. obj_size-1)),
+          desired, indirect:success, indirect:failure, indirect:obj_size;
+  assigns \result \from indirect:*((char*)object+(0 .. obj_size-1)),
+                        indirect:*((char*)expected+(0 .. obj_size-1)),
+                        indirect:success, indirect:failure,
+                        indirect:obj_size;
+*/
 _Bool __fc_atomic_compare_exchange_strong_explicit(void *object, void *expected,
                                                    unsigned long long desired,
                                                    memory_order success,
@@ -159,12 +216,32 @@ _Bool __fc_atomic_compare_exchange_strong_explicit(void *object, void *expected,
   __fc_atomic_compare_exchange_strong_explicit(obj, desired, expected,  \
                                                success, failure, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)),
+          *((char*)expected+(0 .. obj_size-1))
+    \from *((char*)object+(0 .. obj_size-1)),
+          *((char*)expected+(0 .. obj_size-1)), desired, indirect:obj_size;
+  assigns \result \from indirect:*((char*)object+(0 .. obj_size-1)),
+                        indirect:*((char*)expected+(0 .. obj_size-1)),
+                        indirect:desired, indirect:obj_size;
+*/
 _Bool __fc_atomic_compare_exchange_weak(void *object, void *expected,
                                         unsigned long long desired,
                                         size_t obj_size);
 #define atomic_compare_exchange_weak(obj, desired, expected) \
   __fc_atomic_compare_exchange_weak(obj, desired, expected, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)),
+          *((char*)expected+(0 .. obj_size-1))
+    \from *((char*)object+(0 .. obj_size-1)),
+          *((char*)expected+(0 .. obj_size-1)),
+          desired, indirect:success, indirect:failure, indirect:obj_size;
+  assigns \result \from indirect:*((char*)object+(0 .. obj_size-1)),
+                        indirect:*((char*)expected+(0 .. obj_size-1)),
+                        indirect:desired, indirect:success, indirect:failure,
+                        indirect:obj_size;
+*/
 _Bool __fc_atomic_compare_exchange_weak_explicit(void *object, void *expected,
                                                  unsigned long long desired,
                                                  memory_order success,
@@ -175,12 +252,21 @@ _Bool __fc_atomic_compare_exchange_weak_explicit(void *object, void *expected,
   __fc_atomic_compare_exchange_weak_explicit(obj, desired, expected, success, \
                                              failure, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_add(void *object,
                                          unsigned long long operand,
                                          size_t obj_size);
 #define atomic_fetch_add(obj, operand)                  \
   __fc_atomic_fetch_add(obj, operand, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:order,
+          indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_add_explicit(void *object,
                                                   unsigned long long operand,
                                                   memory_order order,
@@ -188,12 +274,21 @@ unsigned long long __fc_atomic_fetch_add_explicit(void *object,
 #define atomic_fetch_add_explicit(obj, operand, order)                  \
   __fc_atomic_fetch_add_explicit(obj, operand, order, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_sub(void *object,
                                          unsigned long long operand,
                                          size_t obj_size);
 #define atomic_fetch_sub(obj, operand)                  \
   __fc_atomic_fetch_sub(obj, operand, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:order,
+          indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_sub_explicit(void *object,
                                                   unsigned long long operand,
                                                   memory_order order,
@@ -201,12 +296,21 @@ unsigned long long __fc_atomic_fetch_sub_explicit(void *object,
 #define atomic_fetch_sub_explicit(obj, operand, order)                  \
   __fc_atomic_fetch_sub_explicit(obj, operand, order, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_or(void *object,
                                         unsigned long long operand,
                                         size_t obj_size);
 #define atomic_fetch_or(obj, operand)                   \
   __fc_atomic_fetch_or(obj, operand, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:order,
+          indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_or_explicit(void *object,
                                                  unsigned long long operand,
                                                  memory_order order,
@@ -214,12 +318,21 @@ unsigned long long __fc_atomic_fetch_or_explicit(void *object,
 #define atomic_fetch_or_explicit(obj, operand, order)                   \
   __fc_atomic_fetch_or_explicit(obj, operand, order, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_xor(void *object,
                                          unsigned long long operand,
                                          size_t obj_size);
 #define atomic_fetch_xor(obj, operand)                  \
   __fc_atomic_fetch_xor(obj, operand, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:order,
+          indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_xor_explicit(void *object,
                                                   unsigned long long operand,
                                                   memory_order order,
@@ -227,12 +340,21 @@ unsigned long long __fc_atomic_fetch_xor_explicit(void *object,
 #define atomic_fetch_xor_explicit(obj, operand, order)                  \
   __fc_atomic_fetch_xor_explicit(obj, operand, order, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_and(void *object,
                                          unsigned long long operand,
                                          size_t obj_size);
 #define atomic_fetch_and(obj, operand)                  \
   __fc_atomic_fetch_and(obj, operand, sizeof(*obj))
 
+/*@
+  assigns *((char*)object+(0 .. obj_size-1)), \result
+    \from *((char*)object+(0 .. obj_size-1)), operand, indirect:order,
+          indirect:obj_size;
+*/
 unsigned long long __fc_atomic_fetch_and_explicit(void *object,
                                                   unsigned long long operand,
                                                   memory_order order,
@@ -240,10 +362,27 @@ unsigned long long __fc_atomic_fetch_and_explicit(void *object,
 #define atomic_fetch_and_explicit(obj, operand, order)                  \
   __fc_atomic_fetch_and_explicit(obj, operand, order, sizeof(*obj))
 
+/*@
+  assigns *object \from *object;
+  assigns \result \from indirect:object;
+*/
 extern _Bool atomic_flag_test_and_set(volatile atomic_flag *object);
+
+/*@
+  assigns *object \from *object, indirect:order;
+  assigns \result \from indirect:object, indirect:order;
+*/
 extern _Bool atomic_flag_test_and_set_explicit(volatile atomic_flag *object,
                                                memory_order order);
+
+/*@
+  assigns *object \from *object;
+*/
 extern void atomic_flag_clear(volatile atomic_flag *object);
+
+/*@
+  assigns *object \from *object, indirect:order;
+*/
 extern void atomic_flag_clear_explicit(volatile atomic_flag *object,
                                        memory_order order);
 
diff --git a/share/libc/stdbool.h b/share/libc/stdbool.h
index eb2d1bf9e50e22868e75ff3d6552e25dda7070ce..18f7e53bd2157c631bb4858137d771ecc6b6a067 100644
--- a/share/libc/stdbool.h
+++ b/share/libc/stdbool.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/stddef.h b/share/libc/stddef.h
index 4fab635c82543ea0b180ef8b98221661649e2f32..e4f8d96c09b295fdf835e717661c5df54a13c5a3 100644
--- a/share/libc/stddef.h
+++ b/share/libc/stddef.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/stdint.h b/share/libc/stdint.h
index f7a7d365b28c922b777312e625a406f4bee4e1b5..90e7949aad1531d441aa3c1103d6a65e2831bf13 100644
--- a/share/libc/stdint.h
+++ b/share/libc/stdint.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/stdio.c b/share/libc/stdio.c
index 1a59d87315602df554006108714350d5edf61d46..09337ba5dd03d53b4c0cdf8128931b73c09a5e95 100644
--- a/share/libc/stdio.c
+++ b/share/libc/stdio.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -21,12 +21,13 @@
 /**************************************************************************/
 
 #include "__fc_builtin.h"
+#include "errno.h"
+#include "float.h" // for DBL_MAX
 #include "stdbool.h"
 #include "stdio.h"
 #include "stdlib.h"
 #include "stdint.h" // for SIZE_MAX
 #include "sys/types.h" // for ssize_t
-#include "errno.h"
 __PUSH_FC_STDLIB
 
 FILE __fc_initial_stdout = {.__fc_FILE_id=1}; 
@@ -44,6 +45,7 @@ FILE * __fc_stdin = &__fc_initial_stdin;
 // "rb+","r+b","wb+","w+b","ab+","a+b".
 /*@
   requires valid_mode: valid_read_string(mode);
+  assigns \result \from mode[0 .. strlen(mode)];
  */
 static bool is_valid_mode(char const *mode) {
   if (!(mode[0] != 'r' || mode[0] != 'w' || mode[0] != 'a')) return false;
@@ -117,13 +119,10 @@ ssize_t getline(char **lineptr, size_t *n, FILE *stream) {
 // Non-POSIX; arbitrarily allocates between 1 and 256 bytes.
 // This stub is unsound in the general case, but enough for
 // many test cases.
-int asprintf(char **strp, const char *fmt, ...) {
-  va_list args;
-  va_start(args, fmt);
+int vasprintf(char **strp, const char *fmt, va_list ap) {
   size_t len = Frama_C_interval(1, 256);
   *strp = malloc(len);
   if (!*strp) {
-    va_end(args);
     return -1;
   }
   // Emulate writing to the string
@@ -132,6 +131,14 @@ int asprintf(char **strp, const char *fmt, ...) {
   return len;
 }
 
+int asprintf(char **strp, const char *fmt, ...) {
+  va_list args;
+  va_start(args, fmt);
+  int res = vasprintf(strp, fmt, args);
+  va_end(args);
+  return res;
+}
+
 char *fgets(char *restrict s, int size, FILE *restrict stream) {
   if (Frama_C_interval(0, 1)) {
     // error
@@ -237,4 +244,273 @@ FILE *fmemopen(void *restrict buf, size_t size,
   return &__fc_fopen[Frama_C_interval(0, __FC_FOPEN_MAX-1)];
 }
 
+#include "stdarg.h"
+
+enum length_modifier {
+  NONE, HH, H, L, LL, J, Z, T, UPPER_L
+};
+
+int vfscanf(FILE * restrict stream, const char * restrict format, va_list arg) {
+  const char *p = format;
+  char conversion_counter = 0;
+  while (*p) {
+    if (*p == '%') {
+      enum length_modifier lm = NONE;
+      char asterisks = 0;
+      p++;
+      if (*p == '%') {
+        break;
+      }
+      // skip any flags
+      while (1) {
+        switch (*p) {
+        case '-':
+        case '+':
+        case ' ':
+        case '#':
+        case '0':
+          break;
+        default:
+          goto post_flags;
+        }
+        p++;
+      }
+    post_flags:
+      // skip field width
+      while (*p >= '0' && *p <= '9') {
+        p++;
+      }
+      // special field width
+      if (*p == '*') {
+        asterisks++;
+        p++;
+      }
+      if (*p == '.') {
+        // skip precision
+        p++;
+        while (*p >= '0' && *p <= '9') {
+          p++;
+        }
+        // special precision
+        if (*p == '*') {
+          asterisks++;
+          p++;
+        }
+      }
+      // length modifier
+      switch (*p) {
+      case 'h':
+        p++;
+        if (*p == 'h') {
+          p++;
+          lm = HH;
+        } else {
+          lm = H;
+        }
+        break;
+      case 'l':
+        p++;
+        if (*p == 'l') {
+          p++;
+          lm = LL;
+        } else {
+          lm = L;
+        }
+        break;
+      case 'j':
+        p++;
+        lm = J;
+        break;
+      case 'z':
+        p++;
+        lm = Z;
+        break;
+      case 't':
+        p++;
+        lm = T;
+        break;
+      case 'L':
+        p++;
+        lm = UPPER_L;
+        break;
+      }
+      // read asterisks
+      while (asterisks) {
+        // reading the arguments ensures that initialization errors are detected
+        int ignored = va_arg(arg, int);
+        (void)(ignored); // avoid GCC warning about unused variable
+        asterisks--;
+      }
+      // conversion specifier
+      switch (*p) {
+      case 'd':
+      case 'i':
+        switch (lm) {
+        case NONE:
+          *va_arg(arg, int*) = Frama_C_interval(INT_MIN, INT_MAX);
+          break;
+        case HH:
+          *va_arg(arg, char*) = Frama_C_char_interval(CHAR_MIN, CHAR_MAX);
+          break;
+        case H:
+          *va_arg(arg, short*) = Frama_C_short_interval(SHRT_MIN, SHRT_MAX);
+          break;
+        case L:
+          *va_arg(arg, long*) = Frama_C_long_interval(LONG_MIN, LONG_MAX);
+          break;
+        case LL:
+        case UPPER_L: // 'Ld' is not in ISO C, but GCC/Clang treat it like 'lld'
+          *va_arg(arg, long long*) =
+            Frama_C_long_long_interval(LLONG_MIN, LLONG_MAX);
+          break;
+        case J:
+          *va_arg(arg, intmax_t*) =
+            Frama_C_intmax_t_interval(INTMAX_MIN, INTMAX_MAX);
+          break;
+        case Z:
+          *va_arg(arg, size_t*) = Frama_C_size_t_interval(0, SIZE_MAX);
+          break;
+        case T:
+          *va_arg(arg, ptrdiff_t*) =
+            Frama_C_ptrdiff_t_interval(PTRDIFF_MIN, PTRDIFF_MAX);
+          break;
+        }
+        break;
+      case 'o':
+      case 'u':
+      case 'x':
+      case 'X':
+        switch (lm) {
+        case NONE:
+          *va_arg(arg, unsigned*) =
+            Frama_C_unsigned_int_interval(0, UINT_MAX);
+          break;
+        case HH:
+          *va_arg(arg, unsigned char*) =
+            Frama_C_unsigned_char_interval(0, UCHAR_MAX);
+          break;
+        case H:
+          *va_arg(arg, unsigned short*) =
+            Frama_C_unsigned_short_interval(0, USHRT_MAX);
+          break;
+        case L:
+          *va_arg(arg, unsigned long*) =
+            Frama_C_unsigned_long_interval(0, ULONG_MAX);
+          break;
+        case LL:
+        case UPPER_L: // 'Ld' is not in ISO C, but GCC/Clang treat it like 'lld'
+          *va_arg(arg, unsigned long long*) =
+            Frama_C_unsigned_long_long_interval(0, ULLONG_MAX);
+          break;
+        case J:
+          *va_arg(arg, uintmax_t*) = Frama_C_uintmax_t_interval(0, UINTMAX_MAX);
+          break;
+        case Z:
+          *va_arg(arg, size_t*) = Frama_C_size_t_interval(0, SIZE_MAX);
+          break;
+        case T:
+          *va_arg(arg, ptrdiff_t*) =
+            Frama_C_ptrdiff_t_interval(PTRDIFF_MIN, PTRDIFF_MAX);
+          break;
+        }
+        break;
+      case 'f':
+      case 'F':
+      case 'e':
+      case 'E':
+      case 'g':
+      case 'G':
+      case 'a':
+      case 'A':
+        switch (lm) {
+        case NONE:
+        case L:
+          // no effect
+          *va_arg(arg, double*) = Frama_C_double_interval(-DBL_MAX, DBL_MAX);
+          break;
+        case UPPER_L:
+          // TODO: use Frama_C_long_double_interval when it will be supported
+          {
+            volatile long double vld = 0.0;
+            *va_arg(arg, long double*) = vld;
+          }
+          break;
+        default:
+          // Undefined behavior
+          //@ assert invalid_scanf_specifier: \false;
+          ;
+        }
+        break;
+      case 'c':
+        switch (lm) {
+        case NONE:
+          *va_arg(arg, char*) = Frama_C_char_interval(CHAR_MIN, CHAR_MAX);
+          break;
+        case L:
+          *va_arg(arg, wint_t*) = Frama_C_wint_t_interval(WINT_MIN, WINT_MAX);
+        default:
+          // Undefined behavior
+          //@ assert invalid_scanf_specifier: \false;
+          ;
+        }
+        break;
+      case 's':
+        switch (lm) {
+        case NONE:
+          // TODO: take into account field width
+          Frama_C_make_unknown(va_arg(arg, char*),
+                               Frama_C_size_t_interval(0, SIZE_MAX));
+          break;
+        case L:
+          // TODO: take into account field width
+          Frama_C_make_unknown_wchar(va_arg(arg, wchar_t*),
+                                     Frama_C_size_t_interval(0, SIZE_MAX/sizeof(wchar_t)));
+        default:
+          // Undefined behavior
+          //@ assert invalid_scanf_specifier: \false;
+          ;
+        }
+        break;
+      case 'n':
+        switch (lm) {
+        case NONE:
+          *va_arg(arg, int*) = conversion_counter;
+          break;
+        case HH:
+          *va_arg(arg, char*) = conversion_counter;
+          break;
+        case H:
+          *va_arg(arg, short*) = conversion_counter;
+          break;
+        case L:
+          *va_arg(arg, long*) = conversion_counter;
+          break;
+        case LL:
+        case UPPER_L: // 'Ld' is not in ISO C, but GCC/Clang treat it like 'lld'
+          *va_arg(arg, long long*) = conversion_counter;
+          break;
+        case J:
+          *va_arg(arg, intmax_t*) = conversion_counter;
+          break;
+        case Z:
+          *va_arg(arg, size_t*) = conversion_counter;
+          break;
+        case T:
+          *va_arg(arg, ptrdiff_t*) = conversion_counter;
+          break;
+        }
+        break;
+        //TODO
+      }
+      conversion_counter++;
+    }
+    p++;
+  }
+  return conversion_counter;
+}
+
+int vscanf(const char * restrict format, va_list arg) {
+  return vfscanf(__fc_stdin, format, arg);
+}
+
 __POP_FC_STDLIB
diff --git a/share/libc/stdio.h b/share/libc/stdio.h
index 736bcfa6f6f4e52131b4d68b2a431f809a707fc2..20b060c2f08e9af500b1218d2e9888dddd2ba110 100644
--- a/share/libc/stdio.h
+++ b/share/libc/stdio.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -581,14 +581,15 @@ extern int pclose(FILE *stream);
 // This file may be included by non-POSIX machdeps, which do not define
 // ssize_t, so we must check it
 #ifdef __FC_POSIX_VERSION
-// No specification given; include "stdio.c" to use Frama-C's implementation
-ssize_t getline(char **lineptr, size_t *n, FILE *stream);
+/*@ assigns (*lineptr)[0 .. *n-1], *n, *stream, \result \from *stream; */
+extern ssize_t getline(char **lineptr, size_t *n, FILE *stream);
 #endif
 
 // POSIX extension
 /*@
   requires valid_or_null_buff: buf == \null || \valid((char*)buf + (0 .. size-1));
   requires valid_mode: valid_read_string(mode);
+  allocates buf;
   assigns __fc_errno \from indirect: buf, indirect: size,
                            indirect: mode[0..strlen(mode)];
   assigns \result \from __fc_p_fopen,
@@ -598,7 +599,6 @@ ssize_t getline(char **lineptr, size_t *n, FILE *stream);
   ensures errno_set:
     __fc_errno == \old(errno) ||
     __fc_errno \in {EINVAL, EMFILE, ENOMEM};
-  allocates buf;
 */
 extern FILE *fmemopen(void *restrict buf, size_t size,
                       const char *restrict mode);
@@ -610,14 +610,29 @@ extern FILE *fmemopen(void *restrict buf, size_t size,
 /*@
   requires valid_strp: \valid(strp);
   requires valid_fmt: valid_read_string(fmt);
+  allocates *strp;
   assigns __fc_heap_status \from indirect:fmt[0 ..], __fc_heap_status;
   assigns \result \from indirect:fmt[0 ..], indirect:__fc_heap_status;
   assigns *strp \from fmt[0 ..], indirect:__fc_heap_status;
   //missing: variadic arguments
-  ensures result_error_or_written_byes: \result == -1 || \result >= 0;
+  ensures result_error_or_written_bytes: \result == -1 || \result >= 0;
+*/
+extern int asprintf(char **strp, const char *fmt, ...);
+
+// GNU extension
+/*@
+  requires valid_strp: \valid(strp);
+  requires valid_fmt: valid_read_string(fmt);
   allocates *strp;
+  assigns __fc_heap_status
+    \from indirect:fmt[0 ..], indirect:ap, __fc_heap_status;
+  assigns \result \from indirect:fmt[0 ..], indirect:__fc_heap_status;
+  assigns *strp \from fmt[0 ..], ap, indirect:__fc_heap_status;
+  //missing: variadic arguments
+  ensures result_error_or_written_bytes: \result == -1 || \result >= 0;
 */
-int asprintf(char **strp, const char *fmt, ...);
+extern int vasprintf(char **restrict strp, const char *restrict fmt,
+                     va_list ap);
 
 __END_DECLS
 
diff --git a/share/libc/stdlib.c b/share/libc/stdlib.c
index 7aeb70ccf282c608888dc2b15461c38d842972b5..c3fd0cfcbd05db431d2831e757c924a11a89f637 100644
--- a/share/libc/stdlib.c
+++ b/share/libc/stdlib.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -80,6 +80,10 @@ char *__fc_env[ARG_MAX];
 #define __FC_INITENV_LEN 64
 static char __fc_env_strings[__FC_INITENV_LEN];
 
+/*@
+  assigns __fc_env_strings[0 .. __FC_INITENV_LEN-1], __fc_env[0 .. ARG_MAX - 1]
+    \from Frama_C_entropy_source;
+*/
 static void __fc_initenv() {
   static char init;
   if (!init) {
@@ -124,7 +128,7 @@ int putenv(char *string)
   // 2. key in string found in env ==> modify an existing entry
   if (Frama_C_nondet(0, 1)) {
     if (Frama_C_nondet(0, 1)) {
-      //TODO: errno = ENOMEM;
+      errno = ENOMEM;
       return Frama_C_interval(INT_MIN, INT_MAX); // return a non-zero value
     }
     __fc_env[Frama_C_interval(0, ARG_MAX-1)] = string;
@@ -135,12 +139,12 @@ int putenv(char *string)
 int setenv(const char *name, const char *value, int overwrite)
 {
   if (strchr(name, '=')) {
-    //TODO: errno = EINVAL;
+    errno = EINVAL;
     return -1;
   }
   size_t namelen = strlen(name);
   if (namelen == 0) {
-    //TODO: errno = EINVAL;
+    errno = EINVAL;
     return -1;
   }
 
@@ -151,7 +155,7 @@ int setenv(const char *name, const char *value, int overwrite)
   // 2. found 'name' but will not overwrite
   // 3. did not find name and has available memory
   if (Frama_C_nondet(0, 1)) {
-    //TODO: errno = ENOMEM;
+    errno = ENOMEM;
     return -1;
   } else {
     if (Frama_C_nondet(0, 1)) {
@@ -165,12 +169,12 @@ int setenv(const char *name, const char *value, int overwrite)
 int unsetenv(const char *name)
 {
   if (strchr(name, '=')) {
-    //TODO: errno = EINVAL;
+    errno = EINVAL;
     return -1;
   }
   size_t namelen = strlen(name);
   if (namelen == 0) {
-    //TODO: errno = EINVAL;
+    errno = EINVAL;
     return -1;
   }
 
diff --git a/share/libc/stdlib.h b/share/libc/stdlib.h
index c49c989d98518f085d7578f1f8edea8dd5c82941..5bb3b87913c131e3c35f2ea3a7c73e90cda6937d 100644
--- a/share/libc/stdlib.h
+++ b/share/libc/stdlib.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -70,26 +70,26 @@ typedef struct __fc_lldiv_t {
 #define MB_CUR_MAX __FC_MB_CUR_MAX
 
 /*@
-  requires valid_nptr: \valid_read(nptr); // cannot be precise, valid_read_string too strong
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..];
+  requires valid_nptr: valid_read_string(nptr);
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
  */
 extern double atof(const char *nptr);
 
 /*@
-  requires valid_nptr: \valid_read(nptr); // cannot be precise, valid_read_string too strong
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..];
+  requires valid_nptr: valid_read_string(nptr);
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
  */
 extern int atoi(const char *nptr);
 
 /*@
-  requires valid_nptr: \valid_read(nptr); // cannot be precise, valid_read_string too strong
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..];
+  requires valid_nptr: valid_read_string(nptr);
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
  */
 extern long int atol(const char *nptr);
 
 /*@
-  requires valid_nptr: \valid_read(nptr); // cannot be precise, valid_read_string too strong
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..];
+  requires valid_nptr: valid_read_string(nptr);
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
  */
 extern long long int atoll(const char *nptr);
 
@@ -98,19 +98,21 @@ extern long long int atoll(const char *nptr);
 /*@
   requires valid_string_nptr: valid_read_string(nptr);
   requires separation: \separated(nptr, endptr);
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..];
-  assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr;
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
+  assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:endptr;
   behavior no_storage:
     assumes null_endptr: endptr == \null;
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..];
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
   behavior store_position:
     assumes nonnull_endptr: endptr != \null;
     requires valid_endptr: \valid(endptr);
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..];
-    assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
+    assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:endptr;
     ensures initialization: \initialized(endptr);
     ensures valid_endptr_content: \valid_read(*endptr);
-    ensures position_subset: \subset(*endptr, nptr + (0 ..));
+    ensures endptr_same_base: \base_addr(*endptr) == \base_addr(nptr);
   complete behaviors;
   disjoint behaviors;
 */
@@ -120,19 +122,20 @@ extern double strtod(const char * restrict nptr,
 /*@
   requires valid_string_nptr: valid_read_string(nptr);
   requires separation: \separated(nptr, endptr);
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..];
-  assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr;
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
+  assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:endptr;
   behavior no_storage:
     assumes null_endptr: endptr == \null;
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..];
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
   behavior store_position:
     assumes nonnull_endptr: endptr != \null;
     requires valid_endptr: \valid(endptr);
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..];
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
     assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr;
     ensures initialization: \initialized(endptr);
     ensures valid_endptr_content: \valid_read(*endptr);
-    ensures position_subset: \subset(*endptr, nptr + (0 ..));
+    ensures endptr_same_base: \base_addr(*endptr) == \base_addr(nptr);
   complete behaviors;
   disjoint behaviors;
 */
@@ -142,19 +145,21 @@ extern float strtof(const char * restrict nptr,
 /*@
   requires valid_string_nptr: valid_read_string(nptr);
   requires separation: \separated(nptr, endptr);
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..];
-  assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr;
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
+  assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:endptr;
   behavior no_storage:
     assumes null_endptr: endptr == \null;
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..];
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
   behavior store_position:
     assumes nonnull_endptr: endptr != \null;
     requires valid_endptr: \valid(endptr);
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..];
-    assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)];
+    assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:endptr;
     ensures initialization: \initialized(endptr);
     ensures valid_endptr_content: \valid_read(*endptr);
-    ensures position_subset: \subset(*endptr, nptr + (0 ..));
+    ensures endptr_same_base: \base_addr(*endptr) == \base_addr(nptr);
   complete behaviors;
   disjoint behaviors;
 */
@@ -166,19 +171,24 @@ extern long double strtold(const char * restrict nptr,
   requires valid_string_nptr: valid_read_string(nptr);
   requires separation: \separated(nptr, endptr);
   requires base_range: base == 0 || 2 <= base <= 36;
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
-  assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr, indirect:base;
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:base;
+  assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:endptr, indirect:base;
   behavior no_storage:
     assumes null_endptr: endptr == \null;
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:base;
   behavior store_position:
     assumes nonnull_endptr: endptr != \null;
     requires valid_endptr: \valid(endptr);
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
-    assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr, indirect:base;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:base;
+    assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:endptr, indirect:base;
     ensures initialization: \initialized(endptr);
     ensures valid_endptr_content: \valid_read(*endptr);
-    ensures position_subset: \subset(*endptr, nptr + (0 ..));
+    ensures endptr_same_base: \base_addr(*endptr) == \base_addr(nptr);
   complete behaviors;
   disjoint behaviors;
 */
@@ -191,19 +201,24 @@ extern long int strtol(
   requires valid_string_nptr: valid_read_string(nptr);
   requires separation: \separated(nptr, endptr);
   requires base_range: base == 0 || 2 <= base <= 36;
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
-  assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr, indirect:base;
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:base;
+  assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:endptr, indirect:base;
   behavior no_storage:
     assumes null_endptr: endptr == \null;
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:base;
   behavior store_position:
     assumes nonnull_endptr: endptr != \null;
     requires valid_endptr: \valid(endptr);
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
-    assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr, indirect:base;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:base;
+    assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:endptr, indirect:base;
     ensures initialization: \initialized(endptr);
     ensures valid_endptr_content: \valid_read(*endptr);
-    ensures position_subset: \subset(*endptr, nptr + (0 ..));
+    ensures endptr_same_base: \base_addr(*endptr) == \base_addr(nptr);
   complete behaviors;
   disjoint behaviors;
 */
@@ -216,19 +231,24 @@ extern long long int strtoll(
   requires valid_string_nptr: valid_read_string(nptr);
   requires separation: \separated(nptr, endptr);
   requires base_range: base == 0 || 2 <= base <= 36;
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
-  assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr, indirect:base;
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:base;
+  assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:endptr, indirect:base;
   behavior no_storage:
     assumes null_endptr: endptr == \null;
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:base;
   behavior store_position:
     assumes nonnull_endptr: endptr != \null;
     requires valid_endptr: \valid(endptr);
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
-    assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr, indirect:base;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:base;
+    assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:endptr, indirect:base;
     ensures initialization: \initialized(endptr);
     ensures valid_endptr_content: \valid_read(*endptr);
-    ensures position_subset: \subset(*endptr, nptr + (0 ..));
+    ensures endptr_same_base: \base_addr(*endptr) == \base_addr(nptr);
   complete behaviors;
   disjoint behaviors;
 */
@@ -241,19 +261,24 @@ extern unsigned long int strtoul(
   requires valid_string_nptr: valid_read_string(nptr);
   requires separation: \separated(nptr, endptr);
   requires base_range: base == 0 || 2 <= base <= 36;
-  assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
-  assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr, indirect:base;
+  assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:base;
+  assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                        indirect:endptr, indirect:base;
   behavior no_storage:
     assumes null_endptr: endptr == \null;
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:base;
   behavior store_position:
     assumes nonnull_endptr: endptr != \null;
     requires valid_endptr: \valid(endptr);
-    assigns \result \from indirect:nptr, indirect:nptr[0 ..], indirect:base;
-    assigns *endptr \from nptr, indirect:nptr[0 ..], indirect:endptr, indirect:base;
+    assigns \result \from indirect:nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:base;
+    assigns *endptr \from nptr, indirect:nptr[0 .. strlen(nptr)],
+                          indirect:endptr, indirect:base;
     ensures initialization: \initialized(endptr);
     ensures valid_endptr_content: \valid_read(*endptr);
-    ensures position_subset: \subset(*endptr, nptr + (0 ..));
+    ensures endptr_same_base: \base_addr(*endptr) == \base_addr(nptr);
   complete behaviors;
   disjoint behaviors;
 */
@@ -266,9 +291,10 @@ extern unsigned long long int strtoull(
 const unsigned long __fc_rand_max = __FC_RAND_MAX;
 
 /* ISO C: 7.20.2 */
-/*@ assigns \result \from __fc_random_counter ;
-  @ assigns __fc_random_counter \from __fc_random_counter ;
-  @ ensures result_range: 0 <= \result <= __fc_rand_max ;
+/*@
+  assigns \result \from indirect:__fc_random_counter;
+  assigns __fc_random_counter \from __fc_random_counter;
+  ensures result_range: 0 <= \result <= __fc_rand_max;
 */
 extern int rand(void);
 
@@ -276,7 +302,7 @@ extern int rand(void);
 extern void srand(unsigned int seed);
 
 /*@
-  assigns \result \from __fc_random_counter;
+  assigns \result \from indirect:__fc_random_counter;
   ensures result_range: 0 <= \result <= __fc_rand_max;
 */
 extern long int random(void);
@@ -298,8 +324,9 @@ unsigned short *__fc_p_random48_counter = __fc_random48_counter;
 extern void srand48 (long int seed);
 
 /*@
+  requires valid_seed16v: \valid(seed16v+(0..2));
   requires initialization:initialized_seed16v: \initialized(seed16v+(0..2));
-  assigns __fc_random48_counter[0..2] \from indirect:seed16v[0..2];
+  assigns __fc_random48_counter[0..2] \from seed16v[0..2];
   assigns __fc_random48_init \from \nothing;
   assigns \result \from __fc_p_random48_counter;
   ensures random48_initialized: __fc_random48_init == 1;
@@ -308,7 +335,9 @@ extern void srand48 (long int seed);
 extern unsigned short *seed48(unsigned short seed16v[3]);
 
 /*@
-  assigns __fc_random48_counter[0..2] \from param[0..5];
+  requires valid_param: \valid(param+(0..6));
+  requires initialization:initialized_param: \initialized(param+(0..6));
+  assigns __fc_random48_counter[0..2] \from param[0..6];
   assigns __fc_random48_init \from \nothing;
   ensures random48_initialized: __fc_random48_init == 1;
 */
@@ -323,6 +352,7 @@ extern void lcong48(unsigned short param[7]);
 extern double drand48(void);
 
 /*@
+  requires valid_xsubi: \valid(xsubi+(0..2));
   requires initialization:initialized_xsubi: \initialized(xsubi+(0..2));
   assigns __fc_random48_counter[0..2] \from __fc_random48_counter[0..2];
   assigns \result \from __fc_random48_counter[0..2];
@@ -339,6 +369,7 @@ extern double erand48(unsigned short xsubi[3]);
 extern long int lrand48 (void);
 
 /*@
+  requires valid_xsubi: \valid(xsubi+(0..2));
   requires initialization:initialized_xsubi: \initialized(xsubi+(0..2));
   assigns __fc_random48_counter[0..2] \from __fc_random48_counter[0..2];
   assigns \result \from __fc_random48_counter[0..2];
@@ -355,6 +386,7 @@ extern long int nrand48 (unsigned short xsubi[3]);
 extern long int mrand48 (void);
 
 /*@
+  requires valid_xsubi: \valid(xsubi+(0..2));
   requires initialization:initialized_xsubi: \initialized(xsubi+(0..2));
   assigns __fc_random48_counter[0..2] \from __fc_random48_counter[0..2];
   assigns \result \from __fc_random48_counter[0..2];
@@ -377,8 +409,8 @@ extern long int jrand48 (unsigned short xsubi[3]);
 
   behavior no_allocation:
     assumes cannot_allocate: !is_allocable(nmemb * size);
-    assigns \result \from \nothing;
     allocates \nothing;
+    assigns \result \from \nothing;
     ensures null_result: \result == \null;
 
   complete behaviors;
@@ -395,8 +427,8 @@ extern void *calloc(size_t nmemb, size_t size);
   @   ensures allocation: \fresh(\result,size);
   @ behavior no_allocation:
   @   assumes cannot_allocate: !is_allocable(size);
-  @   assigns \result \from \nothing;
   @   allocates \nothing;
+  @   assigns \result \from \nothing;
   @   ensures null_result: \result==\null;
   @ complete behaviors;
   @ disjoint behaviors;
@@ -412,8 +444,8 @@ extern void *malloc(size_t size);
   @   ensures  freed: \allocable(p);
   @ behavior no_deallocation:
   @   assumes  null_p: p==\null;
-  @   assigns  \nothing;
   @   frees    \nothing;
+  @   assigns  \nothing;
   @ complete behaviors;
   @ disjoint behaviors;
   @*/
@@ -520,8 +552,10 @@ extern char *__fc_env[ARG_MAX];
 
 /*@
   requires valid_name: valid_read_string(name);
-  assigns \result \from __fc_env[0..], indirect:name, name[0 ..];
-  ensures null_or_valid_result: \result == \null || \valid(\result);
+  assigns \result \from __fc_env[0..], indirect:name,
+                        indirect:name[0 .. strlen(name)];
+  ensures null_or_valid_result:
+    \result == \null || (\valid(\result) && valid_read_string(\result));
  */
 extern char *getenv(const char *name);
 
@@ -535,17 +569,51 @@ extern int putenv(char *string);
 /*@
   requires valid_name: valid_read_string(name);
   requires valid_value: valid_read_string(value);
-  assigns \result, __fc_env[0..]
-    \from __fc_env[0..], indirect:name, indirect:name[0 ..],
-          indirect:value, indirect:value[0 ..], indirect:overwrite;
+  allocates __fc_env[0..];
+  assigns \result, __fc_env[0..], __fc_errno
+    \from __fc_env[0..], indirect:name[0 .. strlen(name)],
+    indirect:value[0 .. strlen(value)], indirect:overwrite;
+  assigns __fc_env[0..][0..] \from name[0 .. strlen(name)],
+                                   value[0 .. strlen(value)],
+                                   indirect:__fc_env[0..],
+                                   indirect:overwrite;
   ensures result_ok_or_error: \result == 0 || \result == -1;
+  behavior invalid_name:
+    assumes name_empty_or_with_equals_sign:
+      strlen(name) == 0 || strchr(name, '=');
+    allocates \nothing;
+    assigns \result \from indirect:name[0 .. strlen(name)];
+    assigns __fc_errno \from indirect:name[0 .. strlen(name)];
+    ensures error: \result == -1;
+    ensures errno_set: __fc_errno == EINVAL;
+  behavior out_of_memory:
+    assumes not_enough_memory: !is_allocable(strlen(name) + strlen(value) + 2);
+    allocates \nothing;
+    assigns \result, __fc_errno \from indirect:name[0 .. strlen(name)],
+                                      indirect:value[0 .. strlen(value)],
+                                      indirect:overwrite;
+    ensures error: \result == -1;
+    ensures errno_set: __fc_errno == ENOMEM;
+  behavior ok:
+    assumes name_not_empty: strlen(name) > 0;
+    assumes name_has_no_equals_sign: !strchr(name, '=');
+    assumes enough_memory: is_allocable(strlen(name) + strlen(value) + 2);
+    allocates __fc_env[0..];
+    assigns \result, __fc_env[0..]
+      \from __fc_env[0..], indirect:name[0 .. strlen(name)],
+            indirect:value[0 .. strlen(value)], indirect:overwrite;
+    assigns __fc_env[0..][0..] \from name[0 .. strlen(name)],
+                                     value[0 .. strlen(value)],
+                                     indirect:__fc_env[0..],
+                                     indirect:overwrite;
+    ensures ok: \result == 0;
 */
 extern int setenv(const char *name, const char *value, int overwrite);
 
 /*@
   requires valid_name: valid_read_string(name);
   assigns \result, __fc_env[0..]
-    \from __fc_env[0..], indirect:name, indirect:name[0 ..];
+    \from __fc_env[0..], indirect:name, indirect:name[0 .. strlen(name)];
   ensures result_ok_or_error: \result == 0 || \result == -1;
 */
 extern int unsetenv(const char *name);
@@ -559,7 +627,8 @@ extern void quick_exit(int status) __attribute__ ((__noreturn__));
 /*@
   requires null_or_valid_string_command:
      command == \null || valid_read_string(command);
-  assigns \result \from indirect:command, indirect:command[0 ..];
+  assigns \result \from indirect:command,
+                        indirect:command[0 .. strlen(command)];
 */
 extern int system(const char *command);
 
@@ -638,11 +707,25 @@ extern long int labs(long int j);
  */
 extern long long int llabs(long long int j);
 
-/*@ assigns \result \from numer,denom ; */
+/*@
+  requires denom_nonzero: denom != 0;
+  requires no_overflow: !(numer == INT_MIN && denom == -1);
+  assigns \result \from numer, denom;
+*/
 extern div_t div(int numer, int denom);
-/*@ assigns \result \from numer,denom ; */
+
+/*@
+  requires denom_nonzero: denom != 0;
+  requires no_overflow: !(numer == LONG_MIN && denom == -1);
+  assigns \result \from numer, denom;
+*/
 extern ldiv_t ldiv(long int numer, long int denom);
-/*@ assigns \result \from numer,denom ; */
+
+/*@
+  requires denom_nonzero: denom != 0;
+  requires no_overflow: !(numer == LLONG_MIN && denom == -1);
+  assigns \result \from numer, denom;
+*/
 extern lldiv_t lldiv(long long int numer, long long int denom);
 
 /* ISO C: 7.20.7 */
@@ -716,8 +799,8 @@ extern size_t wcstombs(char * restrict s,
     ensures result_zero: \result == 0;
   behavior no_allocation:
     assumes cannot_allocate: !is_allocable(size);
-    assigns \result \from indirect:alignment;
     allocates \nothing;
+    assigns \result \from indirect:alignment;
     ensures result_non_zero: \result < 0 || \result > 0;
   complete behaviors;
   disjoint behaviors;
@@ -779,14 +862,15 @@ extern int mkstemps(char *templat, int suffixlen);
     assumes valid_file_name: valid_read_string(file_name);
     assumes resolved_name_null: resolved_name == \null;
     assumes cannot_allocate: !is_allocable(PATH_MAX);
-    assigns \result \from \nothing;
     allocates \nothing;
+    assigns \result \from \nothing;
     ensures null_result: \result == \null;
     ensures errno_set: __fc_errno == ENOMEM;
   behavior resolved_name_buffer:
     assumes valid_file_name: valid_read_string(file_name);
     assumes allocated_resolved_name_or_fail:
       \valid(resolved_name+(0 .. PATH_MAX-1));
+    allocates \nothing;
     assigns \result \from resolved_name;
     assigns resolved_name[0 .. PATH_MAX-1] \from indirect:file_name[0..];
     ensures valid_string_resolved_name: valid_string(resolved_name)
@@ -794,15 +878,14 @@ extern int mkstemps(char *templat, int suffixlen);
     // missing: assigns \result,
     //                  resolved_name[0 .. PATH_MAX-1] \from 'filesystem';
     ensures resolved_result: \result == resolved_name;
-    allocates \nothing;
   behavior filesystem_error:
     assumes valid_file_name: valid_read_string(file_name);
+    allocates \nothing;
     assigns \result, __fc_errno
       \from indirect:file_name[0..]; // missing: indirect:'filesystem';
     ensures null_result: \result == \null;
     ensures errno_set:
       __fc_errno \in {EACCES, EIO, ELOOP, ENAMETOOLONG, ENOENT, ENOTDIR};
-    allocates \nothing;
 */
 extern char *realpath(const char *restrict file_name,
                       char *restrict resolved_name);
@@ -811,8 +894,23 @@ extern char *realpath(const char *restrict file_name,
 // This function may allocate memory for the result, which is not supported by
 // some plugins such as Eva. In such cases, it is preferable to use the stub
 // provided in stdlib.c.
+/*@
+  allocates \result;
+  assigns \result \from path[0 .. strlen(path)];
+ */
 extern char *canonicalize_file_name(const char *path);
 
+extern volatile int Frama_C_entropy_source;
+
+// Non-POSIX
+/*@
+  requires valid_p: \valid(((char*)buf) + (0 .. n-1));
+  assigns ((char*)buf)[0 .. n-1] \from Frama_C_entropy_source;
+  assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+  ensures initialization: \initialized(((char*)buf) + (0 .. n-1));
+*/
+void arc4random_buf(void *buf, size_t n);
+
 __END_DECLS
 
 __POP_FC_STDLIB
diff --git a/share/libc/stdnoreturn.h b/share/libc/stdnoreturn.h
index 1672207f62aabf06f8972d29c52c54647b5cb803..3662ed450d3dfbc2c5dd693201e2aa4a226d516e 100644
--- a/share/libc/stdnoreturn.h
+++ b/share/libc/stdnoreturn.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/string.c b/share/libc/string.c
index 192340ce9eb18931d799c13030f7799c576a7e8a..d546b236ceaf813e8204eb1f833a6d5a7a21a596 100644
--- a/share/libc/string.c
+++ b/share/libc/string.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -172,6 +172,9 @@ int memcmp(const void *s1, const void *s2, size_t n)
 
 // NOTE: strcasecmp is in POSIX's strings.h but not in C99
 // auxiliary function for strcasecmp
+/*@
+  assigns \result \from c1, c2;
+*/
 static int char_equal_ignore_case(char c1, char c2)
 {
   if (c1 >= 'A' && c1 <= 'Z') c1 -= ('A' - 'a');
diff --git a/share/libc/string.h b/share/libc/string.h
index 65d9ce4ff02bc1fd2f1bc3b9f3797259de59e009..e6af50f03f3e8ba9d803dce57d37e58e3dfffb78 100644
--- a/share/libc/string.h
+++ b/share/libc/string.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -76,6 +76,7 @@ extern int memcmp (const void *s1, const void *s2, size_t n);
   @ assigns \result \from s, c, ((unsigned char*)s)[0..n-1];
   @ behavior found:
   @   assumes char_found: memchr((char*)s,c,n);
+  @   ensures result_valid_read: \valid_read((char*)\result);
   @   ensures result_same_base: \base_addr(\result) == \base_addr(s);
   @   ensures result_char: *(char*)\result == c;
   @   ensures result_in_str: \forall integer i;
@@ -88,6 +89,22 @@ extern int memcmp (const void *s1, const void *s2, size_t n);
 extern void *memchr(const void *s, int c, size_t n);
 
 // Non-POSIX; GNU extension
+// Note: these specifications are simplified w.r.t memchr's
+/*@
+  requires valid: valid_read_or_empty(s, n);
+  requires initialization: \initialized(((unsigned char*)s)+(0 .. n - 1));
+  requires danglingness: non_escaping(s, n);
+  assigns \result \from s, indirect:c, indirect:((unsigned char*)s)[0..n-1];
+  behavior found:
+    assumes char_found: memchr((char*)s,c,n);
+    ensures result_valid_read: \valid_read((char*)\result);
+    ensures result_same_base: \base_addr(\result) == \base_addr(s);
+  behavior not_found:
+    assumes char_not_found: !memchr((char*)s,c,n);
+    ensures result_null: \result == \null;
+  complete behaviors;
+  disjoint behaviors;
+*/
 extern void *memrchr(const void *s, int c, size_t n);
 
 // Copy memory
@@ -152,7 +169,8 @@ extern size_t strnlen (const char *s, size_t n);
 
 /*@ requires valid_string_s1: valid_read_string(s1);
   @ requires valid_string_s2: valid_read_string(s2);
-  @ assigns \result \from indirect:s1[0..], indirect:s2[0..];
+  @ assigns \result \from indirect:s1[0..strlen(s1)],
+  @                       indirect:s2[0..strlen(s1)];
   @ ensures acsl_c_equiv: \result == strcmp(s1,s2);
   @*/
 extern int strcmp (const char *s1, const char *s2);
@@ -166,187 +184,221 @@ extern int strncmp (const char *s1, const char *s2, size_t n);
 
 /*@ requires valid_string_s1: valid_read_string(s1); // over-strong
   @ requires valid_string_s2: valid_read_string(s2); // over-strong
-  @ assigns \result \from indirect:s1[0..], indirect:s2[0..];
+  @ assigns \result \from indirect:s1[0..strlen(s1)],
+  @                       indirect:s2[0..strlen(s2)]; //missing: \from 'locale'
   @*/
 extern int strcoll (const char *s1, const char *s2);
 
-/*@ requires valid_string_s: valid_read_string(s);
-  @ assigns \result \from s, indirect:s[0..strlen(s)], indirect:c;
-  @ behavior found:
-  @   assumes char_found: strchr(s,c);
-  @   ensures result_char: *\result == (char)c;
-  @   ensures result_same_base: \base_addr(\result) == \base_addr(s);
-  @   ensures result_in_length: s <= \result <= s + strlen(s);
-  @   ensures result_valid_string: valid_read_string(\result);
-  @   ensures result_first_occur: \forall char* p; s<=p<\result ==> *p != (char)c;
-  @ behavior not_found:
-  @   assumes char_not_found: !strchr(s,c);
-  @   ensures result_null: \result == \null;
-  @ behavior default:
-  @   ensures result_null_or_same_base:
-  @     \result == \null || \base_addr(\result) == \base_addr(s);
-  @*/
+/*@
+  requires valid_string_s: valid_read_string(s);
+  assigns \result \from s, indirect:s[0..strlen(s)], indirect:c;
+  behavior found:
+    assumes char_found: strchr(s,c);
+    ensures result_valid_string: valid_read_string(\result);
+    ensures result_char: *\result == (char)c;
+    ensures result_same_base: \base_addr(\result) == \base_addr(s);
+    ensures result_in_length: s <= \result <= s + strlen(s);
+    ensures result_first_occurrence:
+      \forall char* p; s <= p < \result ==> *p != (char)c;
+  behavior not_found:
+    assumes char_not_found: !strchr(s,c);
+    ensures result_null: \result == \null;
+  complete behaviors;
+  disjoint behaviors;
+*/
 extern char *strchr(const char *s, int c);
 
-/*@ requires valid_string_s: valid_read_string(s);
-  @ assigns \result \from s, indirect:s[0..strlen(s)], indirect:c;
-  @ ensures result_same_base: \subset(\result, s+(0..strlen(s)));
-  @*/
+/*@
+  requires valid_string_s: valid_read_string(s);
+  assigns \result \from s, indirect:s[0..strlen(s)], indirect:c;
+  ensures result_valid_string: valid_read_string(\result);
+  ensures result_same_base: \base_addr(\result) == \base_addr(s);
+*/
 extern char *strchrnul(const char *s, int c);
 
-/*@ requires valid_string_s: valid_read_string(s);
-  @ assigns \result \from s, s[0..],c;
-  @ behavior found:
-  @   assumes char_found: strchr(s,c);
-  @   ensures result_char: *\result == c;
-  @   ensures result_same_base: \base_addr(\result) == \base_addr(s);
-  @   ensures result_valid_string: valid_read_string(\result);
-  @ behavior not_found:
-  @   assumes char_not_found: !strchr(s,c);
-  @   ensures result_null: \result == \null;
-  @ behavior default:
-  @   ensures result_null_or_same_base:
-  @     \result == \null || \base_addr(\result) == \base_addr(s);
-  @*/
+/*@
+  requires valid_string_s: valid_read_string(s);
+  assigns \result \from s, indirect:s[0 .. strlen(s)], indirect:c;
+  ensures result_null_or_same_base:
+    \result == \null ||
+    (valid_read_string(\result) && \base_addr(\result) == \base_addr(s));
+*/
 extern char *strrchr(const char *s, int c);
 
-/*@ requires valid_string_s: valid_read_string(s);
-  @ requires valid_string_reject: valid_read_string(reject);
-  @ assigns \result \from indirect:s[0..], indirect:reject[0..];
-  @ ensures result_bounded: 0 <= \result <= strlen(s);
-  @*/
+/*@
+  requires valid_string_s: valid_read_string(s);
+  requires valid_string_reject: valid_read_string(reject);
+  assigns \result \from indirect:s[0..strlen(s)],
+                        indirect:reject[0..strlen(reject)];
+  ensures result_bounded: 0 <= \result <= strlen(s);
+*/
 extern size_t strcspn(const char *s, const char *reject);
 
-/*@ requires valid_string_s: valid_read_string(s);
-  @ requires valid_string_accept: valid_read_string(accept);
-  @ assigns \result \from s[0..], accept[0..];
-  @ assigns \result \from indirect:s[0..], indirect:accept[0..];
-  @ ensures result_bounded: 0 <= \result <= strlen(s);
-  @*/
+/*@
+  requires valid_string_s: valid_read_string(s);
+  requires valid_string_accept: valid_read_string(accept);
+  assigns \result \from indirect:s[0..strlen(s)],
+                        indirect:accept[0..strlen(accept)];
+  ensures result_bounded: 0 <= \result <= strlen(s);
+*/
 extern size_t strspn(const char *s, const char *accept);
 
-/*@ requires valid_string_s: valid_read_string(s);
-  @ requires valid_string_accept: valid_read_string(accept);
-  @ assigns \result \from s, s[0..], accept[0..];
-  @ ensures result_null_or_same_base:
-  @   \result == \null || \base_addr(\result) == \base_addr(s);
-  @*/
+/*@
+  requires valid_string_s: valid_read_string(s);
+  requires valid_string_accept: valid_read_string(accept);
+  assigns \result \from s, indirect:s[0..strlen(s)],
+                        indirect:accept[0..strlen(accept)];
+  ensures result_null_or_same_base:
+    \result == \null ||
+    (valid_read_string(\result) && \base_addr(\result) == \base_addr(s));
+*/
 extern char *strpbrk(const char *s, const char *accept);
 
-/*@ requires valid_string_haystack: valid_read_string(haystack);
-  @ requires valid_string_needle: valid_read_string(needle);
-  @ assigns \result \from haystack, indirect:haystack[0..],
-  @                       indirect:needle[0..];
-  @ ensures result_null_or_in_haystack:
-  @   \result == \null
-  @   || (\subset(\result, haystack+(0..)) && \valid_read(\result)
-  @       && memcmp{Pre,Pre}(\result,needle,strlen(needle)) == 0);
-  @*/
+/*@
+  requires valid_string_haystack: valid_read_string(haystack);
+  requires valid_string_needle: valid_read_string(needle);
+  assigns \result \from haystack, indirect:haystack[0..strlen(haystack)],
+                        indirect:needle[0..strlen(needle)];
+  ensures result_null_or_in_haystack:
+    \result == \null ||
+    (valid_read_string(\result) &&
+     \base_addr(\result) == \base_addr(haystack) &&
+     memcmp{Pre,Pre}(\result,needle,strlen(needle)) == 0);
+*/
 extern char *strstr(const char *haystack, const char *needle);
 
-/*@ requires valid_string_haystack: valid_read_string(haystack);
-  @ requires valid_string_needle: valid_read_string(needle);
-  @ assigns \result \from haystack, indirect:haystack[0..],
-  @                       indirect:needle[0..];
-  @ ensures result_null_or_in_haystack:
-  @   \result == \null
-  @   || (\subset(\result, haystack+(0..)) && \valid_read(\result));
-  @*/
-extern char *strcasestr (const char *haystack, const char *needle);
+/*@
+  requires valid_string_haystack: valid_read_string(haystack);
+  requires valid_string_needle: valid_read_string(needle);
+  assigns \result \from haystack, indirect:haystack[0..strlen(haystack)],
+                        indirect:needle[0..strlen(needle)];
+  ensures result_null_or_in_haystack:
+    \result == \null ||
+    (valid_read_string(\result) &&
+     \base_addr(\result) == \base_addr(haystack));
+  // Note: there is currently no way to concisely write 'memcmp_ignore_case'
+*/
+extern char *strcasestr(const char *haystack, const char *needle);
 
 // internal state of strtok
 char *__fc_strtok_ptr;
 
-/*@ // missing: separation
+/*@
   requires valid_string_delim: valid_read_string(delim);
+  requires separation: \separated(delim+(0..strlen(delim)), s+(0..strlen(s)));
   assigns s[0..] \from s[0..],
-      indirect:s, indirect:__fc_strtok_ptr, indirect:delim[0..];
+      indirect:s, indirect:__fc_strtok_ptr, indirect:delim[0..strlen(delim)];
   assigns __fc_strtok_ptr[0..] \from __fc_strtok_ptr[0..],
-      indirect:s, indirect:__fc_strtok_ptr, indirect:delim[0..];
+      indirect:s, indirect:__fc_strtok_ptr, indirect:delim[0..strlen(delim)];
   assigns \result \from s, __fc_strtok_ptr, indirect:s[0..],
-      indirect:__fc_strtok_ptr[0..], indirect:delim[0..];
+      indirect:__fc_strtok_ptr[0..], indirect:delim[0..strlen(delim)];
   assigns __fc_strtok_ptr \from \old(__fc_strtok_ptr), s,
                                 indirect:__fc_strtok_ptr[0..],
-                                indirect:delim[0..];
+                                indirect:delim[0..strlen(delim)];
   behavior new_str:
     assumes s_not_null: s != \null;
     requires valid_string_s_or_delim_not_found:
       valid_string(s) ||
       (valid_read_string(s) &&
-        \forall int i; 0 <= i < strlen(delim) ==> !strchr(s,delim[i]));
-    assigns __fc_strtok_ptr \from s, indirect:s[0..], indirect:delim[0..];
-    assigns s[0..] \from s[0..], indirect:s, indirect:delim[0..];
-    assigns \result \from s, indirect:s[0..], indirect:delim[0..];
-    ensures result_subset: \result == \null || \subset(\result, s+(0..));
-    ensures ptr_subset: \subset(__fc_strtok_ptr, s+(0..));
+        \forall ℤ i; 0 <= i < strlen(delim) ==> !strchr(s,delim[i]));
+    assigns __fc_strtok_ptr
+      \from s, indirect:s[0..], indirect:delim[0..strlen(delim)];
+    assigns s[0..] \from s[0..], indirect:s, indirect:delim[0..strlen(delim)];
+    assigns \result \from s, indirect:s[0..], indirect:delim[0..strlen(delim)];
+    ensures result_same_base:
+      \result == \null ||
+      (valid_read_string(\result) && \base_addr(\result) == \base_addr(s));
+    ensures ptr_valid_string: valid_read_string(__fc_strtok_ptr);
+    ensures ptr_same_base: \base_addr(__fc_strtok_ptr) == \base_addr(s);
   behavior resume_str:
     assumes s_null: s == \null;
     requires not_first_call: __fc_strtok_ptr != \null;
     assigns __fc_strtok_ptr[0..] \from __fc_strtok_ptr[0..],
                                        indirect:__fc_strtok_ptr,
-                                       indirect:delim[0..];
+                                       indirect:delim[0..strlen(delim)];
     assigns __fc_strtok_ptr \from \old(__fc_strtok_ptr),
                                   indirect:__fc_strtok_ptr[0..],
-                                  indirect:delim[0..];
+                                  indirect:delim[0..strlen(delim)];
     assigns \result \from __fc_strtok_ptr, indirect:__fc_strtok_ptr[0..],
-                          indirect:delim[0..];
-    ensures result_subset: \result == \null ||
-                           \subset(\result, \old(__fc_strtok_ptr)+(0..));
-    ensures ptr_subset: \subset(__fc_strtok_ptr, \old(__fc_strtok_ptr)+(0..));
+                          indirect:delim[0..strlen(delim)];
+    ensures result_same_base:
+      \result == \null ||
+      (valid_read_string(\result) &&
+        \base_addr(\result) == \base_addr(\old(__fc_strtok_ptr)));
+    ensures ptr_valid_string: valid_read_string(__fc_strtok_ptr);
+    ensures ptr_same_base:
+      \base_addr(__fc_strtok_ptr) == \base_addr(\old(__fc_strtok_ptr));
   complete behaviors;
   disjoint behaviors;
 */
 extern char *strtok(char *restrict s, const char *restrict delim);
 
-/*@ // missing: separation
+/*@
   requires valid_string_delim: valid_read_string(delim);
+  requires separation: \separated(delim+(0..strlen(delim)), s+(0..strlen(s)),
+                                  *saveptr+(0..));
   requires valid_saveptr: \valid(saveptr);
   assigns s[0..] \from s[0..],
-      indirect:s, indirect:*saveptr, indirect:delim[0..];
+      indirect:s, indirect:*saveptr, indirect:delim[0..strlen(delim)];
   assigns (*saveptr)[0..] \from (*saveptr)[0..],
-      indirect:s, indirect:*saveptr, indirect:delim[0..];
+      indirect:s, indirect:*saveptr, indirect:delim[0..strlen(delim)];
   assigns \result \from s, *saveptr, indirect:s[0..],
-      indirect:(*saveptr)[0..], indirect:delim[0..];
+      indirect:(*saveptr)[0..], indirect:delim[0..strlen(delim)];
   assigns *saveptr \from \old(*saveptr), s,
                          indirect:(*saveptr)[0..],
-                         indirect:delim[0..];
+                         indirect:delim[0..strlen(delim)];
   behavior new_str:
     assumes s_not_null: s != \null;
     requires valid_string_s_or_delim_not_found:
       valid_string(s) ||
       (valid_read_string(s) &&
-        \forall int i; 0 <= i < strlen(delim) ==> !strchr(s,delim[i]));
-    assigns *saveptr \from s, indirect:s[0..], indirect:delim[0..];
-    assigns s[0..] \from s[0..], indirect:s, indirect:delim[0..];
-    assigns \result \from s, indirect:s[0..], indirect:delim[0..];
-    ensures result_subset: \result == \null || \subset(\result, s+(0..));
-    ensures initialization: \initialized(saveptr);
-    ensures saveptr_subset: \subset(*saveptr, s+(0..));
+        \forall ℤ i; 0 <= i < strlen(delim) ==> !strchr(s,delim[i]));
+    assigns *saveptr
+      \from s, indirect:s[0..], indirect:delim[0..strlen(delim)];
+    assigns s[0..] \from s[0..], indirect:s, indirect:delim[0..strlen(delim)];
+    assigns \result \from s, indirect:s[0..], indirect:delim[0..strlen(delim)];
+    ensures result_same_base:
+      \result == \null ||
+      (valid_read_string(\result) && \base_addr(\result) == \base_addr(s));
+    ensures saveptr_valid_string: valid_read_string(*saveptr);
+    ensures saveptr_same_base: \base_addr(*saveptr) == \base_addr(s);
   behavior resume_str:
     assumes s_null: s == \null;
     requires not_first_call: *saveptr != \null;
     requires initialization:saveptr: \initialized(saveptr);
     assigns (*saveptr)[0..] \from (*saveptr)[0..],
                                        indirect:*saveptr,
-                                       indirect:delim[0..];
+                                       indirect:delim[0..strlen(delim)];
     assigns *saveptr \from \old(*saveptr),
                            indirect:(*saveptr)[0..],
-                           indirect:delim[0..];
+                           indirect:delim[0..strlen(delim)];
     assigns \result \from *saveptr, indirect:(*saveptr)[0..],
-                          indirect:delim[0..];
-    ensures result_subset: \result == \null ||
-                           \subset(\result, \old(*saveptr)+(0..));
-    ensures saveptr_subset: \subset(*saveptr, \old(*saveptr)+(0..));
+                          indirect:delim[0..strlen(delim)];
+    ensures result_same_base:
+      \result == \null ||
+      (valid_read_string(\result) &&
+        \base_addr(\result) == \base_addr(\old(*saveptr)));
+    ensures saveptr_valid_string: valid_read_string(*saveptr);
+    ensures saveptr_same_base:
+      \base_addr(*saveptr) == \base_addr(\old(*saveptr));
   complete behaviors;
   disjoint behaviors;
 */
 extern char *strtok_r(char *restrict s, const char *restrict delim, char **restrict saveptr);
 
-/*@ requires valid_string_stringp: \valid(stringp) && valid_string(*stringp);
-  @ requires valid_string_delim: valid_read_string(delim);
-  @ assigns *stringp \from delim[..], *stringp[..];
-  @ assigns \result \from delim[..], *stringp[..];
-  @*/
+/*@
+  requires valid_stringp: \valid(stringp);
+  assigns *stringp[0..] \from indirect:delim[0..strlen(delim)], *stringp[0..];
+  assigns \result \from *stringp;
+  behavior no_stringp:
+    assumes stringp_null: *stringp == \null;
+    ensures result_null: \result == \null;
+  behavior valid_stringp:
+    assumes stringp_not_null: *stringp != \null;
+    requires valid_string_stringp: valid_string(*stringp);
+    ensures valid_result: valid_string(\result) &&
+                          \base_addr(\result) == \base_addr(*stringp);
+*/
 extern char *strsep (char **stringp, const char *delim);
 
 __FC_EXTERN char __fc_strerror[64];
@@ -420,10 +472,12 @@ size_t strlcpy(char * restrict dest, const char * restrict src, size_t n);
   @*/
 extern char *stpcpy(char *restrict dest, const char *restrict src);
 
-/*@ // missing: separation
+/*@
   @ requires valid_string_src: valid_read_string(src);
   @ requires valid_string_dest: valid_string(dest);
   @ requires room_string: \valid(dest+(0..strlen(dest) + strlen(src)));
+  @ requires separation:
+  @   \separated(dest+(0..strlen(dest)+strlen(src)), src+(0..strlen(src)));
   @ assigns dest[strlen(dest)..strlen(dest) + strlen(src)]
   @   \from src[0..strlen(src)];
   @ ensures sum_of_lengths: strlen(dest) == \old(strlen(dest) + strlen(src));
@@ -435,102 +489,156 @@ extern char *stpcpy(char *restrict dest, const char *restrict src);
   @*/
 extern char *strcat(char *restrict dest, const char *restrict src);
 
-/*@ // missing: separation
-  @ requires valid_nstring_src: valid_read_nstring(src, n);
-  @ requires valid_string_dest: valid_string(dest);
-  @ assigns dest[strlen(dest) .. strlen(dest) + n] \from src[0..n];
-  @ assigns \result \from dest;
-  @ ensures result_ptr: \result == dest;
-  @ behavior complete:
-  @   assumes valid_string_src_fits: valid_read_string(src) && strlen(src) <= n;
-  @   requires room_string: \valid(dest + strlen(dest) + (0 .. strlen(src)));
-  @   assigns dest[strlen(dest)..strlen(dest) + strlen(src)]
-  @   \from src[0..strlen(src)];
-  @   assigns \result \from dest;
-  @   ensures sum_of_lengths: strlen(dest) == \old(strlen(dest) + strlen(src));
-  @ behavior partial:
-  @   assumes valid_string_src_too_large:
-  @     !(valid_read_string(src) && strlen(src) <= n);
-  @   requires room_string: \valid(dest + strlen(dest) + (0 .. n));
-  @   assigns dest[strlen(dest)..strlen(dest) + n]
-  @   \from src[0..strlen(src)];
-  @   assigns \result \from dest;
-  @   ensures sum_of_bounded_lengths: strlen(dest) == \old(strlen(dest)) + n;
-  @*/
+// ISO C23, 7.26.3.2, footnote 378:
+// "A terminating null character is always appended to the result.
+// Thus, the maximum number of characters that can end up in the array pointed
+// to by s1 is strlen(s1)+n+1"
+/*@
+  requires valid_nstring_src: valid_read_nstring(src, n);
+  requires valid_string_dest: valid_string(dest);
+  requires separation:
+    \separated(dest+(0..strlen(dest)+strnlen(src, n)),
+               src+(0..strnlen(src, n)));
+  assigns dest[strlen(dest) .. strlen(dest) + n] \from src[0 .. n-1];
+  assigns \result \from dest;
+  ensures result_ptr: \result == dest;
+  behavior complete:
+    assumes src_fits: strnlen(src, n) < n; // strnlen(src, n) == strlen(src)
+    requires room_string: \valid(dest + strlen(dest) + (0 .. strlen(src)));
+    assigns dest[strlen(dest) .. strlen(dest) + strlen(src)]
+      \from src[0 .. strlen(src)-1];
+    assigns \result \from dest;
+    ensures sum_of_lengths: strlen(dest) == \old(strlen(dest) + strlen(src));
+  behavior partial:
+    assumes src_too_large: strnlen(src, n) == n;
+    requires room_string: \valid(dest + strlen(dest) + (0 .. n));
+    assigns dest[strlen(dest) .. strlen(dest) + n]
+      \from src[0 .. n - 1];
+    assigns \result \from dest;
+    ensures sum_of_bounded_lengths: strlen(dest) == \old(strlen(dest)) + n;
+  complete behaviors;
+  disjoint behaviors;
+*/
 extern char *strncat(char *restrict dest, const char *restrict src, size_t n);
 
 /*@ // Non-POSIX, but often present
-  @ // missing: separation
+  @
   @ requires valid_string_src: valid_read_string(src);
   @ requires valid_string_dest: valid_string(dest);
   @ requires room_nstring: \valid(dest+(0..n-1));
+  @ requires separation:
+  @   \separated(dest+(0..\min(n-1, strlen(dest)+strlen(src))),
+  @              src+(0..strnlen(src, n-1)));
   @ assigns dest[strlen(dest)..n] \from indirect:n, src[0..strlen(src)];
   @ assigns \result \from indirect:src, indirect:src[0..n-1], indirect:n;
   @ ensures bounded_result: \result == strlen(dest) + strlen(src);
   @*/
 extern size_t strlcat(char *restrict dest, const char *restrict src, size_t n);
 
-/*@ // missing: separation
-  @ requires valid_dest: \valid(dest+(0..n - 1));
-  @ requires valid_string_src: valid_read_string(src);
-  @ assigns dest[0..n - 1] \from indirect:src[0..], indirect:n;
-  @ assigns \result \from dest;
-  @*/
-extern size_t strxfrm (char *restrict dest,
-		       const char *restrict src, size_t n);
+/*@ // missing: assigns ... \from 'locale';
+  requires valid_dest: \valid(dest+(0..n - 1));
+  requires valid_string_src: valid_read_string(src);
+  requires separation: \separated(dest+(0..n - 1), src+(0..strlen(src)));
+  assigns dest[0..n - 1] \from src[0..strlen(src)], indirect:n;
+  assigns \result \from indirect:src[0..strlen(src)]; // can be greater than n
+*/
+extern size_t strxfrm(char *restrict dest, const char *restrict src, size_t n);
+
+// Non-POSIX; GNU extension
+/*@
+  requires valid_haystack: \valid_read((char*)haystack + (0 .. haystacklen-1));
+  requires valid_needle: \valid_read((char*)needle + (0 .. needlelen-1));
+  assigns \result \from haystack,
+                        indirect:((char*)haystack)[0 .. haystacklen-1],
+                        indirect:((char*)needle)[0 .. needlelen-1];
+  ensures result_null_or_valid:
+    \result == \null || \valid_read((char*)\result);
+  ensures result_null_or_same_base:
+    \result == \null || \base_addr(\result) == \base_addr(haystack);
+*/
+extern void *memmem(const void *haystack, size_t haystacklen,
+             const void *needle, size_t needlelen);
 
 // Allocate strings
 
-/*@ requires valid_string_s: valid_read_string(s);
-  @ allocates \result;
-  @ assigns \result \from indirect:s[0..strlen(s)], indirect:__fc_heap_status;
-  @ behavior allocation:
-  @   assumes can_allocate: is_allocable(strlen(s));
-  @   assigns __fc_heap_status \from indirect:s, __fc_heap_status;
-  @   assigns \result \from indirect:s[0..strlen(s)], indirect:__fc_heap_status;
-  @   ensures allocation: \fresh(\result,strlen(s));
-  @   ensures result_valid_string_and_same_contents:
-  @     valid_string(\result) && strcmp(\result,s) == 0;
-  @ behavior no_allocation:
-  @   assumes cannot_allocate: !is_allocable(strlen(s));
-  @   assigns \result \from \nothing;
-  @   allocates \nothing;
-  @   ensures result_null: \result == \null;
-  @*/
+/*@
+  requires valid_string_s: valid_read_string(s);
+  allocates \result;
+  assigns \result \from indirect:s[0..strlen(s)], indirect:__fc_heap_status;
+  behavior allocation:
+    assumes can_allocate: is_allocable(strlen(s)+1);
+    assigns __fc_heap_status \from __fc_heap_status,
+                                   indirect:s[0 .. strlen(s)];
+    assigns \result \from indirect:s[0..strlen(s)], indirect:__fc_heap_status;
+    ensures allocation: \fresh(\result,strlen(s)+1);
+    ensures result_valid_string_and_same_contents:
+      valid_string(\result) && strcmp(\result,s) == 0;
+  behavior no_allocation:
+    assumes cannot_allocate: !is_allocable(strlen(s)+1);
+    allocates \nothing;
+    assigns \result \from \nothing;
+    ensures result_null: \result == \null;
+*/
 extern char *strdup (const char *s);
 
-/*@ requires valid_string_s: valid_read_string(s);
-  @ allocates \result;
-  @ assigns \result \from indirect:s[0..strlen(s)], indirect:n,
-  @                       indirect:__fc_heap_status;
-  @ behavior allocation:
-  @   assumes can_allocate: is_allocable(\min(strlen(s), n+1));
-  @   assigns __fc_heap_status \from indirect:s, indirect:n, __fc_heap_status;
-  @   assigns \result \from indirect:s[0..strlen(s)], indirect:n,
-  @                         indirect:__fc_heap_status;
-  @   ensures allocation: \fresh(\result,\min(strlen(s), n+1));
-  @   ensures result_valid_string_bounded_and_same_prefix:
-  @     \valid(\result+(0..\min(strlen(s),n))) &&
-  @     valid_string(\result) && strlen(\result) <= n &&
-  @     strncmp(\result,s,n) == 0;
-  @ behavior no_allocation:
-  @   assumes cannot_allocate: !is_allocable(\min(strlen(s), n+1));
-  @   assigns \result \from \nothing;
-  @   allocates \nothing;
-  @   ensures result_null: \result == \null;
-  @*/
+// From the strndup(3p) POSIX man page:
+// ... strndup() copies at most size plus one bytes into the newly allocated
+// memory, terminating the new string with a NUL character.
+/*@
+  requires valid_string_s: valid_read_string(s);
+  allocates \result;
+  assigns \result \from indirect:s[0..strlen(s)], indirect:n,
+                        indirect:__fc_heap_status;
+  behavior allocation:
+    assumes can_allocate: is_allocable(strnlen(s, n) + 1);
+    assigns __fc_heap_status \from indirect:s, indirect:n, __fc_heap_status;
+    assigns \result \from indirect:s[0 .. strlen(s)], indirect:n,
+                          indirect:__fc_heap_status;
+    ensures allocation: \fresh(\result, strnlen(s, n) + 1);
+    ensures result_valid_string_bounded_and_same_prefix:
+      \valid(\result+(0 .. strnlen(s,n))) &&
+      valid_string(\result) && strlen(\result) <= n &&
+      strncmp(\result,s,n) == 0;
+  behavior no_allocation:
+    assumes cannot_allocate: !is_allocable(strnlen(s, n) + 1);
+    allocates \nothing;
+    assigns \result \from \nothing;
+    ensures result_null: \result == \null;
+*/
 extern char *strndup (const char *s, size_t n);
 
 // More POSIX, non-C99 functions
+/*@
+  requires valid_string_src: valid_read_nstring(src, n);
+  requires valid_dest: \valid(dest+(0 .. n-1));
+  requires separation: \separated(src+(0 .. n-1), dest+(0 .. n-1));
+  assigns dest[0 .. n-1] \from src[0 .. n-1], indirect:n;
+  assigns \result \from dest, indirect:src[0 .. n-1], indirect:n;
+  ensures initialization: \initialized(dest+(0 .. n-1));
+  behavior src_is_a_string:
+    assumes src_has_nul: strlen(src) < n;
+    ensures valid_string_dest: valid_read_string(dest);
+    ensures same_contents: strcmp(dest, src) == 0;
+    ensures dest_nul_padded:
+      \forall integer i; strlen(src) <= i < n ==> dest[i] == 0;
+    ensures result_points_to_nul: \result == dest + strlen(src);
+  behavior src_too_long:
+    assumes src_no_nul: \forall integer i; 0 <= i < n ==> src[i] != 0;
+    ensures same_partial_contents: strncmp(src, dest, n) == 0;
+    ensures result_points_to_end: \result == dest + n;
+*/
 extern char *stpncpy(char *restrict dest, const char *restrict src, size_t n);
+
 //extern int strcoll_l(const char *s1, const char *s2, locale_t locale);
+
 //extern char *strerror_l(int errnum, locale_t locale);
+
 extern int strerror_r(int errnum, char *strerrbuf, size_t buflen);
 
 __FC_EXTERN char __fc_strsignal[64];
 char * const __fc_p_strsignal = __fc_strsignal;
 
-/*@ //missing: requires valid_signal(signum);
+/*@ //missing: requires valid_signal(signum); assigns \from 'locale';
   @ assigns \result \from __fc_p_strsignal, indirect:signum;
   @ ensures result_internal_str: \result == __fc_p_strsignal;
   @ ensures result_nul_terminated: \result[63] == 0;
diff --git a/share/libc/strings.h b/share/libc/strings.h
index 30602ed4d3e8c31953a84526df31fc20bf40aae0..0bc801348bb47d7f95b98116554f69bc85d5d799 100644
--- a/share/libc/strings.h
+++ b/share/libc/strings.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/stropts.h b/share/libc/stropts.h
index 13398b5a9acf097f516ee05703e4b69f093d0031..3caa748f4ebffb388bca497099b09c908e2f6544 100644
--- a/share/libc/stropts.h
+++ b/share/libc/stropts.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/file.h b/share/libc/sys/file.h
index 29c1f32ac633896cff259108f36ec896a9ad80b6..1212079b91c64cf7c46980ede31c32686fb65b24 100644
--- a/share/libc/sys/file.h
+++ b/share/libc/sys/file.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/ioctl.h b/share/libc/sys/ioctl.h
index 8a2737c9b28077cc5918b175212afd1d014cdd9c..c8b73fbb252386453ad3932a147f44923a2d41ba 100644
--- a/share/libc/sys/ioctl.h
+++ b/share/libc/sys/ioctl.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/ipc.h b/share/libc/sys/ipc.h
index b3e3a09f8fddcf0e6ab2a48629717f63b94566a5..ea168c1debd0ae46c11c63f1bad473f2f77a8690 100644
--- a/share/libc/sys/ipc.h
+++ b/share/libc/sys/ipc.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/mman.h b/share/libc/sys/mman.h
index a0337c3e770eef91d4d4843610e6d35af7da4ef5..9285d6250a38446031fe0ce4f424d6f7d8b5c482 100644
--- a/share/libc/sys/mman.h
+++ b/share/libc/sys/mman.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/msg.h b/share/libc/sys/msg.h
index df48f001eaebd8cb42902739622cd352133ada88..0a7f1f28dd9bb5e3976895dcf5bf285faec99a75 100644
--- a/share/libc/sys/msg.h
+++ b/share/libc/sys/msg.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/param.h b/share/libc/sys/param.h
index 8fac1d28fcda6304af55c13bc67b461e7598b36e..701bdfaf7614c33d6aad1f65342668f238e89f72 100644
--- a/share/libc/sys/param.h
+++ b/share/libc/sys/param.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/random.h b/share/libc/sys/random.h
index 1de9d60f4450b71efe85a545f8eed8d402e9a29d..5cd9d4d8f5d765e79fdda2f770c3c249d335e3c0 100644
--- a/share/libc/sys/random.h
+++ b/share/libc/sys/random.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -34,6 +34,11 @@ extern ssize_t getrandom (void *__buffer, size_t __length,
 
 extern int getentropy (void *__buffer, size_t __length);
 
+// Non-POSIX
+#define GRND_NONBLOCK 0x01
+#define GRND_RANDOM 0x02
+#define GRND_INSECURE 0x04
+
 __END_DECLS
 
 __POP_FC_STDLIB
diff --git a/share/libc/sys/resource.h b/share/libc/sys/resource.h
index f4462473839057003ea098c619ba894df5bb9b9d..7e3b6bb4d7c542f492c1ebcb63d0808a015e6eda 100644
--- a/share/libc/sys/resource.h
+++ b/share/libc/sys/resource.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/select.h b/share/libc/sys/select.h
index d19b71305b7f4ed0e298e0bb3a883e2fba65927e..f5f4b18e24c718fd4399a90cd41989ef7398159f 100644
--- a/share/libc/sys/select.h
+++ b/share/libc/sys/select.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/sem.h b/share/libc/sys/sem.h
index 2f0cc8d65ea0577133e2041384533dc4a0060a0e..09b5cc61cbae7a0015fa01250686ccd843d740de 100644
--- a/share/libc/sys/sem.h
+++ b/share/libc/sys/sem.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/sendfile.h b/share/libc/sys/sendfile.h
index bc834435541ef2bdbe2e11920ffe5688e595e1f7..9f9545ea2d8ff8ec9af8918970fa260476db8078 100644
--- a/share/libc/sys/sendfile.h
+++ b/share/libc/sys/sendfile.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/shm.h b/share/libc/sys/shm.h
index c58d1e43b2c261d6257b50690b793f69d1e50f2f..8f373fbe9f891dcc19df95e436f44118a2e8cbfd 100644
--- a/share/libc/sys/shm.h
+++ b/share/libc/sys/shm.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/signal.h b/share/libc/sys/signal.h
index c7a4394ab62b93ba666bce623ffd84006722fea0..b58165979bb030189e672b7c9238bdc4a9f5d882 100644
--- a/share/libc/sys/signal.h
+++ b/share/libc/sys/signal.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/socket.c b/share/libc/sys/socket.c
index e1cfd553a5ad4d178dc01466e84416192b5b8063..2bfb9f7bfb0151adbccae81ac549a826ec521a57 100644
--- a/share/libc/sys/socket.c
+++ b/share/libc/sys/socket.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/socket.h b/share/libc/sys/socket.h
index f96e482a5e5a6ada267a7e4d7f40605abbf8503c..68bbe81b2709f4f8a427e668a84512cffa5b8cff 100644
--- a/share/libc/sys/socket.h
+++ b/share/libc/sys/socket.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/stat.h b/share/libc/sys/stat.h
index 3b18cd4a1b16a426436df8d07bfd5c88a0093a62..7db41d86a842b9f4e8c4c730c3e826479308a081 100644
--- a/share/libc/sys/stat.h
+++ b/share/libc/sys/stat.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/statvfs.h b/share/libc/sys/statvfs.h
index 93958eaa6586f2ff6f77f0555093bdcec4b34eee..c48d398cf7340eebe2881474ba9b68287b75940b 100644
--- a/share/libc/sys/statvfs.h
+++ b/share/libc/sys/statvfs.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/time.h b/share/libc/sys/time.h
index 2fb24e15bf7a58ecef20521c6ca87a4f87c6c2fc..b45dd6b7f7357f53612fd3b6d1f2f8cbf592c6fb 100644
--- a/share/libc/sys/time.h
+++ b/share/libc/sys/time.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/times.h b/share/libc/sys/times.h
index 7a32d885869602df144fb0e6834bf8dad3b6f639..7e28cd3c09699cf9ca413506d4f9441b99002cdd 100644
--- a/share/libc/sys/times.h
+++ b/share/libc/sys/times.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/timex.h b/share/libc/sys/timex.h
index c3980080454a94438aa96e4db96db7803a000746..c5f949742c266a36c7a000e5272f9a9448523a7b 100644
--- a/share/libc/sys/timex.h
+++ b/share/libc/sys/timex.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/types.h b/share/libc/sys/types.h
index 38ae7d90f8b15a832c296f94cc8f0607f4f09dee..53de26f443e307634d9a4085ad6c3f52263bbe8c 100644
--- a/share/libc/sys/types.h
+++ b/share/libc/sys/types.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/uio.h b/share/libc/sys/uio.h
index fec62f64e2c695af2602e9f7d3a0b64850d4894e..ca8e01d61d700154ce91eec50424fa8b08693e6b 100644
--- a/share/libc/sys/uio.h
+++ b/share/libc/sys/uio.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/un.h b/share/libc/sys/un.h
index 6be1d506c8d03f5ad1580b897d93b444372351c9..54f4aafa1a1cd87396dd404d84128832b01ffb3b 100644
--- a/share/libc/sys/un.h
+++ b/share/libc/sys/un.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/utsname.h b/share/libc/sys/utsname.h
index b2cc3f79d373e6a481ea3e687136bf6cd8ef3601..4928c9b9652a67a2349dcbe1739bca2044270fca 100644
--- a/share/libc/sys/utsname.h
+++ b/share/libc/sys/utsname.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/vfs.h b/share/libc/sys/vfs.h
index f2c4f678dcae67a34be84213119fc591fcbf64f0..aa714a5cb105502afe516993f65815c1cd93d3aa 100644
--- a/share/libc/sys/vfs.h
+++ b/share/libc/sys/vfs.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/sys/wait.h b/share/libc/sys/wait.h
index 4ee5ba3a247e539f8e9c80f9a5eb69a1c06ee476..3d8e02e0af60e1fa9c08c47fab9f78f21d63f344 100644
--- a/share/libc/sys/wait.h
+++ b/share/libc/sys/wait.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/syslog.h b/share/libc/syslog.h
index 4060e0783969edc2a6152e9187509c13cb33efb8..21d88f1cb568c311724b33af7ce125fc5823acc5 100644
--- a/share/libc/syslog.h
+++ b/share/libc/syslog.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/tar.h b/share/libc/tar.h
index 08f02f3eb6aec766e96783f6886a46b746acfb49..a5e54154a6736cadf95f2c2911b6cba33bcb3dfc 100644
--- a/share/libc/tar.h
+++ b/share/libc/tar.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/termios.h b/share/libc/termios.h
index 96831504d7b62400280c8b463e6bdff5b7b786fc..dba037a08b72884930aae0bf838fb7ac6cd6d9bd 100644
--- a/share/libc/termios.h
+++ b/share/libc/termios.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/tgmath.h b/share/libc/tgmath.h
index 684e11ed43dc1cf1618563b9df0f118acbcf348a..6ed6b109b70b4023849209091af74fc3077a3ce6 100644
--- a/share/libc/tgmath.h
+++ b/share/libc/tgmath.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/time.c b/share/libc/time.c
index 9c9bdbeb48bbee045cec6a46e66f83a80c2acf06..76b433afbc4735e8235776f9b7f854d08db202ed 100644
--- a/share/libc/time.c
+++ b/share/libc/time.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/time.h b/share/libc/time.h
index a0958995d762046f0bbb91844369da0b190750b9..ae0a660a0b0c93959f17ec6deb05acdeec3115c3 100644
--- a/share/libc/time.h
+++ b/share/libc/time.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/trace.h b/share/libc/trace.h
index fed0346e8e3ff9d550bc9b947f6eef8ad4965b79..4ea9601c6ad4b5390387fe382ac498e3e32068ab 100644
--- a/share/libc/trace.h
+++ b/share/libc/trace.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/ulimit.h b/share/libc/ulimit.h
index d9d9f7d57606c1a02f30cdd3308ba3f578abcebe..d052f7e29dbf825c751e31bc73a6d7976638522d 100644
--- a/share/libc/ulimit.h
+++ b/share/libc/ulimit.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/unistd.c b/share/libc/unistd.c
index e339084604fedc1922367700b8b2d8e4876886e7..8752c2b85705cad97c31a42d01f5d5084511854c 100644
--- a/share/libc/unistd.c
+++ b/share/libc/unistd.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/unistd.h b/share/libc/unistd.h
index 9be09d430cf2857e1dbc173429c9282abef1bb46..a7a15a098885b9e4427ae96970d96d07a41bd87f 100644
--- a/share/libc/unistd.h
+++ b/share/libc/unistd.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/utime.h b/share/libc/utime.h
index aba8a102e558255b32f6676b30fdd27d30122adf..83b509cdaf233e146d38e87bd7f2ac1f1364d795 100644
--- a/share/libc/utime.h
+++ b/share/libc/utime.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/utmp.h b/share/libc/utmp.h
index da34afdeae731edd79d5a4f8e67a740ec6132794..388073413a2e03522ef46263f0fac25ccd95ec47 100644
--- a/share/libc/utmp.h
+++ b/share/libc/utmp.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/utmpx.h b/share/libc/utmpx.h
index 20224a4fcffb35be1c6b329b27fe9775c07877cb..876076f94c28706bd397dafb50fd463b398cfabd 100644
--- a/share/libc/utmpx.h
+++ b/share/libc/utmpx.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/wait.h b/share/libc/wait.h
index 4c3bf2aa7550f8b6ad53253c040333cda10f199d..a36a304ef01363b4424e24f375e3f174b85b820d 100644
--- a/share/libc/wait.h
+++ b/share/libc/wait.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/wchar.c b/share/libc/wchar.c
index 4500a72dedd3bba59580631b1e5bf636f61a4015..830b835d4cda9fd450fb38ee861cbabb8b019733 100644
--- a/share/libc/wchar.c
+++ b/share/libc/wchar.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/wchar.h b/share/libc/wchar.h
index 79b540e4a7e485ceddfc7974a8d4e2334dfdba0c..89bbba4df2e0a158c99d07b13b969683f51a48ba 100644
--- a/share/libc/wchar.h
+++ b/share/libc/wchar.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
@@ -267,6 +267,28 @@ extern wchar_t *fgetws(wchar_t * restrict ws, int n, FILE * restrict stream);
 */
 extern int wcscasecmp(const wchar_t *ws1, const wchar_t *ws2);
 
+/*@
+  requires valid_wstring: valid_read_wstring(ws);
+  allocates \result;
+  assigns \result \from indirect:ws[0..wcslen(ws)], indirect:__fc_heap_status;
+  assigns __fc_heap_status \from indirect:ws[0 .. wcslen(ws)],
+                                 __fc_heap_status;
+  behavior allocation:
+    assumes can_allocate: is_allocable(wcslen(ws));
+    assigns __fc_heap_status \from indirect:ws[0 .. wcslen(ws)],
+                                   __fc_heap_status;
+    assigns \result \from indirect:ws[0..wcslen(ws)], indirect:__fc_heap_status;
+    ensures allocation: \fresh(\result,wcslen(ws) * sizeof(wchar_t));
+    ensures result_valid_string_and_same_contents:
+      valid_wstring(\result) && wcscmp(\result,ws) == 0;
+  behavior no_allocation:
+    assumes cannot_allocate: !is_allocable(wcslen(ws));
+    allocates \nothing;
+    assigns \result \from \nothing;
+    ensures result_null: \result == \null;
+*/
+extern wchar_t *wcsdup(const wchar_t *ws);
+
 /* It is unclear whether these are more often in wchar.h or stdio.h */
 
 extern int fwprintf(FILE * stream, const wchar_t * format, ...);
diff --git a/share/libc/wctype.h b/share/libc/wctype.h
index 9fb20337f2c0415d1af5b1048bb8892214f9225d..8201d10704bafbcb2ded9c3bbe790e1b4dd1f749 100644
--- a/share/libc/wctype.h
+++ b/share/libc/wctype.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/libc/wordexp.h b/share/libc/wordexp.h
index 1debfe15e2268776e6905f39aee1dc1bf492d321..349c94203c390cac0cd87241480b11ecc0f62843 100644
--- a/share/libc/wordexp.h
+++ b/share/libc/wordexp.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/Makefile b/share/machdeps/Makefile
index 5ab36af3da03d87f3de10f582b3c03c2660409de..b78a37cdb64e71dfce6177529079add8ebc152e1 100644
--- a/share/machdeps/Makefile
+++ b/share/machdeps/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/machdeps/make_machdep/alignof_aligned.c b/share/machdeps/make_machdep/alignof_aligned.c
index 8d37ca3c5f94b8f0343dc16b4499710dcd023172..d0d1c4fa6226cfa3a889d0295d6df2432b29ca2c 100644
--- a/share/machdeps/make_machdep/alignof_aligned.c
+++ b/share/machdeps/make_machdep/alignof_aligned.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_double.c b/share/machdeps/make_machdep/alignof_double.c
index 3ad3c9526be103cbb5f4ce11a6ae5d7b83174d13..c21eabc01c61a6ef88d76e11603f068c27ec32d9 100644
--- a/share/machdeps/make_machdep/alignof_double.c
+++ b/share/machdeps/make_machdep/alignof_double.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_float.c b/share/machdeps/make_machdep/alignof_float.c
index 2bbb0bf8967db1baa1a3889a27041d123d5f4e7f..6b7b90b464cc7f123cb973482a5791d8896b8651 100644
--- a/share/machdeps/make_machdep/alignof_float.c
+++ b/share/machdeps/make_machdep/alignof_float.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_fun.c b/share/machdeps/make_machdep/alignof_fun.c
index 0d26a6404280d6eecfe27e0f8eba5c758df8a688..9cb6639726315cdb9bfbd56400ab537dcd9ed609 100644
--- a/share/machdeps/make_machdep/alignof_fun.c
+++ b/share/machdeps/make_machdep/alignof_fun.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_int.c b/share/machdeps/make_machdep/alignof_int.c
index a83f429cd061be487e130f0fc69330cdb8e563a5..80c99950cdcdc55f54e1a785adaaef50b5494aed 100644
--- a/share/machdeps/make_machdep/alignof_int.c
+++ b/share/machdeps/make_machdep/alignof_int.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_long.c b/share/machdeps/make_machdep/alignof_long.c
index f34ec3ca89f349404fbe181edf9c90adc78fb85f..25ff306343c7d30c4ae86a64a1642bcdb8012cbf 100644
--- a/share/machdeps/make_machdep/alignof_long.c
+++ b/share/machdeps/make_machdep/alignof_long.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_longdouble.c b/share/machdeps/make_machdep/alignof_longdouble.c
index 0cd52668fe54cad32a0b0d26429259927365b5e7..76d7ea0c215abb56a18739bea31a06cbd101d36d 100644
--- a/share/machdeps/make_machdep/alignof_longdouble.c
+++ b/share/machdeps/make_machdep/alignof_longdouble.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_longlong.c b/share/machdeps/make_machdep/alignof_longlong.c
index 222eba81362a4089b7af59a5ff0891817be497be..6b74d759306f480265055bf6f77ac5850dc7ded0 100644
--- a/share/machdeps/make_machdep/alignof_longlong.c
+++ b/share/machdeps/make_machdep/alignof_longlong.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_ptr.c b/share/machdeps/make_machdep/alignof_ptr.c
index babe1cd560d7277132648ee2a6396bd2910768a9..3b0747fb65a420a11674326ad8534b166659f896 100644
--- a/share/machdeps/make_machdep/alignof_ptr.c
+++ b/share/machdeps/make_machdep/alignof_ptr.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_short.c b/share/machdeps/make_machdep/alignof_short.c
index 7e1c66cfa417d6a94081d640443911add7c316fa..f35882fad93728821857e69e4a1d2516396d701c 100644
--- a/share/machdeps/make_machdep/alignof_short.c
+++ b/share/machdeps/make_machdep/alignof_short.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/alignof_str.c b/share/machdeps/make_machdep/alignof_str.c
index 51ba68521cd21c26e24fcd5f362f4e4c1cb2cb5b..c5946f9c939148b92072316ce9ccdbf6a1c836c9 100644
--- a/share/machdeps/make_machdep/alignof_str.c
+++ b/share/machdeps/make_machdep/alignof_str.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/char_is_unsigned.c b/share/machdeps/make_machdep/char_is_unsigned.c
index 46ad63d750231360d7f276aa2d62e04f31e5cfd5..cba731756d4eda5d4b422174d7a32f2a01f60dd0 100644
--- a/share/machdeps/make_machdep/char_is_unsigned.c
+++ b/share/machdeps/make_machdep/char_is_unsigned.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/const_string_literals.c b/share/machdeps/make_machdep/const_string_literals.c
index 35fb4e651ec1e4c5ba3f07033d19e1085bb37137..d7787c556735cd701a3105e15efdfda44480fa52 100644
--- a/share/machdeps/make_machdep/const_string_literals.c
+++ b/share/machdeps/make_machdep/const_string_literals.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/errno.c b/share/machdeps/make_machdep/errno.c
index a6c2829d87f7e686c129f4f7c691abc9df57d0c8..8a53e02989b392aadd859cefda25e08673405f9d 100644
--- a/share/machdeps/make_machdep/errno.c
+++ b/share/machdeps/make_machdep/errno.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/has__builtin_va_list.c b/share/machdeps/make_machdep/has__builtin_va_list.c
index 4f2420598eca140e508b6f6259185edadea87388..c577e5655914e54c4c3e50a9545a27b0151f3e97 100644
--- a/share/machdeps/make_machdep/has__builtin_va_list.c
+++ b/share/machdeps/make_machdep/has__builtin_va_list.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/int_fast16_t.c b/share/machdeps/make_machdep/int_fast16_t.c
index 77a451ab2da7c881ce840e8e679aabb89f874444..0cbeecdf6c6e295559fe8b9a5709d5eca52a8357 100644
--- a/share/machdeps/make_machdep/int_fast16_t.c
+++ b/share/machdeps/make_machdep/int_fast16_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/int_fast32_t.c b/share/machdeps/make_machdep/int_fast32_t.c
index fbbfee3a162b972732022954b08a3bd57bcee3ba..f4f38dc5e0ee1b87a63d258bb854577fb4b7e913 100644
--- a/share/machdeps/make_machdep/int_fast32_t.c
+++ b/share/machdeps/make_machdep/int_fast32_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/int_fast64_t.c b/share/machdeps/make_machdep/int_fast64_t.c
index 43b3ce1797a450aa87a14a06646c4a0eb50cbd29..a21a8e9f510ef251ca2c813e02844ea03c4fd33d 100644
--- a/share/machdeps/make_machdep/int_fast64_t.c
+++ b/share/machdeps/make_machdep/int_fast64_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/int_fast8_t.c b/share/machdeps/make_machdep/int_fast8_t.c
index 6d572f914dee75cba1307076181000cea8495ca1..23e40667aad9ff066cd26d4458b169b47b93dd4b 100644
--- a/share/machdeps/make_machdep/int_fast8_t.c
+++ b/share/machdeps/make_machdep/int_fast8_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/intptr_t.c b/share/machdeps/make_machdep/intptr_t.c
index ec1f36e633d82dd9609870cfc937498a15cf661c..36856a80ebf84b6f131f460b789cb39fe72fb08e 100644
--- a/share/machdeps/make_machdep/intptr_t.c
+++ b/share/machdeps/make_machdep/intptr_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/limits_macros.c b/share/machdeps/make_machdep/limits_macros.c
index e6d7abd64c4d6b24b10dfc605bd47da2704f9009..120b3132e3a21faf5e7e078129776545818c5282 100644
--- a/share/machdeps/make_machdep/limits_macros.c
+++ b/share/machdeps/make_machdep/limits_macros.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/little_endian.c b/share/machdeps/make_machdep/little_endian.c
index 2e1404de7a3f0595bab45fd9cdb20dbbbe91ba98..3f02d3f0baf19db7a8173a35bf9086f506d53a3c 100644
--- a/share/machdeps/make_machdep/little_endian.c
+++ b/share/machdeps/make_machdep/little_endian.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/make_machdep.py b/share/machdeps/make_machdep/make_machdep.py
index 999e2d15fbbadb8846d1c8c393b87502e80dd461..5b7ba8c1f9369b4a5ce2fe34bcf50154ea45d075 100755
--- a/share/machdeps/make_machdep/make_machdep.py
+++ b/share/machdeps/make_machdep/make_machdep.py
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/share/machdeps/make_machdep/make_machdep_common.h b/share/machdeps/make_machdep/make_machdep_common.h
index 8688084e084e41f03b2f8b0ec6af9a36d784fd8e..b5d1dba51c7da246284e6496cc23858b45fad973 100644
--- a/share/machdeps/make_machdep/make_machdep_common.h
+++ b/share/machdeps/make_machdep/make_machdep_common.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/nsig.c b/share/machdeps/make_machdep/nsig.c
index e82b4fbe2eba34b9f74dfd6dcb0c7da9ccd53ea4..083c859243464fb57338c4e4375c9c9ff9878636 100644
--- a/share/machdeps/make_machdep/nsig.c
+++ b/share/machdeps/make_machdep/nsig.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/posix_version.c b/share/machdeps/make_machdep/posix_version.c
index bdd131ffc0dace0035d2dcf3b2e6a71b2b1532fd..55231f4dbc5fa1c42a4cfc045abe5a70fe620534 100644
--- a/share/machdeps/make_machdep/posix_version.c
+++ b/share/machdeps/make_machdep/posix_version.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/ptrdiff_t.c b/share/machdeps/make_machdep/ptrdiff_t.c
index 29c9d38d42b5ca332b0111761b323ff69d60b1fc..3f3cc94c4e4edfa18af96e3d9b83694c6579e0cd 100644
--- a/share/machdeps/make_machdep/ptrdiff_t.c
+++ b/share/machdeps/make_machdep/ptrdiff_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sanity_check.c b/share/machdeps/make_machdep/sanity_check.c
index 8e38b55803d1543ab01368a639b9915aea4305e8..868445cb097dab488356b517009a17546c8eccdf 100644
--- a/share/machdeps/make_machdep/sanity_check.c
+++ b/share/machdeps/make_machdep/sanity_check.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sig_atomic_t.c b/share/machdeps/make_machdep/sig_atomic_t.c
index 9141b3d9a7c0261d419d9260bfb449c9a2b7bb78..4823fbd19e62f5f9af6793ad3a8ec5fac37cf9d3 100644
--- a/share/machdeps/make_machdep/sig_atomic_t.c
+++ b/share/machdeps/make_machdep/sig_atomic_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/size_t.c b/share/machdeps/make_machdep/size_t.c
index 13a4685263cda07d1c57d97088bf9ee85f9b59a1..bdb8a6f5a0aca83c9b8cc213ba8e751ce18659ac 100644
--- a/share/machdeps/make_machdep/size_t.c
+++ b/share/machdeps/make_machdep/size_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_double.c b/share/machdeps/make_machdep/sizeof_double.c
index c87c337250d403c4bce05eac6cf3f5197098132b..2797c7b299f58b07fffbcf60d7b2ff5787738b8b 100644
--- a/share/machdeps/make_machdep/sizeof_double.c
+++ b/share/machdeps/make_machdep/sizeof_double.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_float.c b/share/machdeps/make_machdep/sizeof_float.c
index 6de246c1bde90eb86caec97394c703a2b6974c32..002fca05b95c133044388bd6f9efb6db40e152c4 100644
--- a/share/machdeps/make_machdep/sizeof_float.c
+++ b/share/machdeps/make_machdep/sizeof_float.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_fun.c b/share/machdeps/make_machdep/sizeof_fun.c
index daa499b72c920df365de255e1781bddbd0835802..8fc7638f932b094397a10ada61d836ca70f97e54 100644
--- a/share/machdeps/make_machdep/sizeof_fun.c
+++ b/share/machdeps/make_machdep/sizeof_fun.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_int.c b/share/machdeps/make_machdep/sizeof_int.c
index 914fa6af09af11e6d7565b50c24b75ec6e7f5fe2..6835683df1f220a221776dc6190b0a23ab743f4e 100644
--- a/share/machdeps/make_machdep/sizeof_int.c
+++ b/share/machdeps/make_machdep/sizeof_int.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_long.c b/share/machdeps/make_machdep/sizeof_long.c
index a545896ddfcb6d6b26dccddd33268cfebeb87fda..8ce7ff4b2eb4e3b67aa0985906064b9fef198d02 100644
--- a/share/machdeps/make_machdep/sizeof_long.c
+++ b/share/machdeps/make_machdep/sizeof_long.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_longdouble.c b/share/machdeps/make_machdep/sizeof_longdouble.c
index 78922473994cf9d2305f426ab067079b4ba5fe04..6b3d67e8b58a23c5777337f294176940a73c79b1 100644
--- a/share/machdeps/make_machdep/sizeof_longdouble.c
+++ b/share/machdeps/make_machdep/sizeof_longdouble.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_longlong.c b/share/machdeps/make_machdep/sizeof_longlong.c
index 246b21d6fdafe51191d9905439cf5db08b29a5d2..1eb6ba70b59d6855195146904f373b6680c4162c 100644
--- a/share/machdeps/make_machdep/sizeof_longlong.c
+++ b/share/machdeps/make_machdep/sizeof_longlong.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_ptr.c b/share/machdeps/make_machdep/sizeof_ptr.c
index d99d94fbcdde01a34d5d5c5db6d855c079c465ba..5b424e1fce372d8795e74bafdadf1c98c2b5ef8a 100644
--- a/share/machdeps/make_machdep/sizeof_ptr.c
+++ b/share/machdeps/make_machdep/sizeof_ptr.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_short.c b/share/machdeps/make_machdep/sizeof_short.c
index 5287ec206760c0bb43d3e5fd6d06ec016dd819dc..7b631086c49e5fcdcff9c5fb4f00c5d987ba8e49 100644
--- a/share/machdeps/make_machdep/sizeof_short.c
+++ b/share/machdeps/make_machdep/sizeof_short.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/sizeof_void.c b/share/machdeps/make_machdep/sizeof_void.c
index 76db3124db00720802a827e9f7b0cf54d836d7bf..14b80d15264103727993ce26248c8bbe3c9d87bd 100644
--- a/share/machdeps/make_machdep/sizeof_void.c
+++ b/share/machdeps/make_machdep/sizeof_void.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/ssize_t.c b/share/machdeps/make_machdep/ssize_t.c
index 3f8de4170d217c8a600929955bd79e2dc712602b..b5a528a605b07aa4737c294658c991f37b447ce8 100644
--- a/share/machdeps/make_machdep/ssize_t.c
+++ b/share/machdeps/make_machdep/ssize_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/stdio_macros.c b/share/machdeps/make_machdep/stdio_macros.c
index e332c2b35407bc8c29e99d2572cfd39aec6f4679..95c77380561a0e0c272370a69f8e27a1ae88729e 100644
--- a/share/machdeps/make_machdep/stdio_macros.c
+++ b/share/machdeps/make_machdep/stdio_macros.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/stdlib_macros.c b/share/machdeps/make_machdep/stdlib_macros.c
index 88ffd4f8014ff3ab136143ad37e62ca6bb1451b9..1380ecf0ea10fb2c7ff8267a19508a0fd6b68e76 100644
--- a/share/machdeps/make_machdep/stdlib_macros.c
+++ b/share/machdeps/make_machdep/stdlib_macros.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/time_t.c b/share/machdeps/make_machdep/time_t.c
index 2e1b90a172b9856d5053f0cc525c5396d37879f5..11b2be5847535e8f0a31f3cca2d4bc28b62e8b51 100644
--- a/share/machdeps/make_machdep/time_t.c
+++ b/share/machdeps/make_machdep/time_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/uint_fast16_t.c b/share/machdeps/make_machdep/uint_fast16_t.c
index 8b6524211c85d80f4089d79492e89ec7feabc559..66cc8f314f514b804a2a0d79522496248a53c808 100644
--- a/share/machdeps/make_machdep/uint_fast16_t.c
+++ b/share/machdeps/make_machdep/uint_fast16_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/uint_fast32_t.c b/share/machdeps/make_machdep/uint_fast32_t.c
index ff8e7cbe8f5157e82edb98ae4e4d5e63fd034514..2d129c53447a986f45c316ce760003607c8baf18 100644
--- a/share/machdeps/make_machdep/uint_fast32_t.c
+++ b/share/machdeps/make_machdep/uint_fast32_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/uint_fast64_t.c b/share/machdeps/make_machdep/uint_fast64_t.c
index 5dbc103bd28c963d211b051cebf5bf80e3fb18ff..c3a8c031d30d5235308330e803a78914b1be469a 100644
--- a/share/machdeps/make_machdep/uint_fast64_t.c
+++ b/share/machdeps/make_machdep/uint_fast64_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/uint_fast8_t.c b/share/machdeps/make_machdep/uint_fast8_t.c
index d7710d97b006d2a3f28f8eaa16b33af1e0340017..e57106ac4a4a3b0fcf4cb72f57c65fddacbea3d9 100644
--- a/share/machdeps/make_machdep/uint_fast8_t.c
+++ b/share/machdeps/make_machdep/uint_fast8_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/uintptr_t.c b/share/machdeps/make_machdep/uintptr_t.c
index 655dd30616e2fd871f4f156702d71a4ba7eba77c..1e69310e4ec06a8498740779c60c539966cc019f 100644
--- a/share/machdeps/make_machdep/uintptr_t.c
+++ b/share/machdeps/make_machdep/uintptr_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/wchar_t.c b/share/machdeps/make_machdep/wchar_t.c
index ce5b3ae2a74ab4fb8f83f6a227f5aaf174cb9b70..2a95037574d37a6b3f818ef30b41cc8f81b5f5d5 100644
--- a/share/machdeps/make_machdep/wchar_t.c
+++ b/share/machdeps/make_machdep/wchar_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/weof.c b/share/machdeps/make_machdep/weof.c
index f648ef8391c5408c06d27841062afed44ff29a31..030e87f59f4eebdf2754015a3cef7a327d2ea51c 100644
--- a/share/machdeps/make_machdep/weof.c
+++ b/share/machdeps/make_machdep/weof.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/wint_t.c b/share/machdeps/make_machdep/wint_t.c
index bf7486460e5174a58545479652f1f754f6c5a76e..65f019328066ba1fc80b3b71010a071fa9186c5e 100644
--- a/share/machdeps/make_machdep/wint_t.c
+++ b/share/machdeps/make_machdep/wint_t.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/share/machdeps/make_machdep/wordsize.c b/share/machdeps/make_machdep/wordsize.c
index 7279411f73930f030a8f29a523d31d47759ee88f..74d621b1c3912778bee4f4049b64f89a60482675 100644
--- a/share/machdeps/make_machdep/wordsize.c
+++ b/share/machdeps/make_machdep/wordsize.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/dune b/src/dune
index 4e30a8be96104f936abe77828007e05be04e3a6e..cf4d7ccfeb8eacda9543df2d025d25c1c0315f04 100644
--- a/src/dune
+++ b/src/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/init/boot/boot.ml b/src/init/boot/boot.ml
index 75a7e2bee4944ff14c332aeb40169f49f9b70e3b..f24cfca1d6c8e9e2534477226fac6f66bdbf6692 100644
--- a/src/init/boot/boot.ml
+++ b/src/init/boot/boot.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/init/boot/boot.mli b/src/init/boot/boot.mli
index ca925c8c64b9270ba0ff34f78447624b27baa79e..be359ecdb6c8d8f891bcda9d4c7dd2bd65f22c84 100644
--- a/src/init/boot/boot.mli
+++ b/src/init/boot/boot.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/init/boot/dune b/src/init/boot/dune
index 2dd90880b34d919c0a1d8e5923d94ef48b388390..bffcdfef2c82e1a906819faac5d6389d7c9d1a93 100644
--- a/src/init/boot/dune
+++ b/src/init/boot/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/init/dune b/src/init/dune
index a10c21f55224ee9e780edbeabc855b0485c31c70..3f53ac5711cf9bf49d01cbfb4601c857df933daa 100644
--- a/src/init/dune
+++ b/src/init/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/init/frama_c_init.ml b/src/init/frama_c_init.ml
index 64debfcdcc91909d04372940718aec552ba170f7..e1150192ff6343f5b4090fee57ce5893cbb23ac2 100644
--- a/src/init/frama_c_init.ml
+++ b/src/init/frama_c_init.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/init/frama_c_init.mli b/src/init/frama_c_init.mli
index 883c69c81ed1d11d768662d29d0460dc462d29ed..9c8709a3b0ca8bc8ef79da43d54c944d12638752 100644
--- a/src/init/frama_c_init.mli
+++ b/src/init/frama_c_init.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/init/gui_init.mli b/src/init/gui_init.mli
index 56a45f784a3e902e04de85d4befbd9a7d11ba3bd..b21d1d7a0a9aee3e1d2b1254a782d16ea6efe75f 100644
--- a/src/init/gui_init.mli
+++ b/src/init/gui_init.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/init/impl_cmdline/dune b/src/init/impl_cmdline/dune
index 8467d8184fb4ea1c1b03335fa14fdc66d408cfd4..ef8d19ab793585fdaeaaa4877de41f130f2fc956 100644
--- a/src/init/impl_cmdline/dune
+++ b/src/init/impl_cmdline/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/init/impl_cmdline/gui_init.ml b/src/init/impl_cmdline/gui_init.ml
index 76bb8b345d0736d982191673cbee05a8002b7e77..307b707d826a6bd1b1edbd36b857ae7f3819c15c 100644
--- a/src/init/impl_cmdline/gui_init.ml
+++ b/src/init/impl_cmdline/gui_init.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/init/impl_gui/dune b/src/init/impl_gui/dune
index e6c28194ef71dd8611f4aa098827876ebd15b0be..8bd6b547a8c40bc55af2e5249f5d0cc4d5d88048 100644
--- a/src/init/impl_gui/dune
+++ b/src/init/impl_gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/init/impl_gui/gui_init.ml b/src/init/impl_gui/gui_init.ml
index 94e68a6c6cde0b40de9f60d4a091e475129207fe..89d72a91f774eaa358ece2154dfe5d8ff92a2107 100644
--- a/src/init/impl_gui/gui_init.ml
+++ b/src/init/impl_gui/gui_init.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/init/toplevel/toplevel_config.ml b/src/init/toplevel/toplevel_config.ml
index b7eaedc343d73dc3a5f1627e27aebca1f3eb37af..697a2ad40cb44b1bb6e6bf28e947302895947f5a 100644
--- a/src/init/toplevel/toplevel_config.ml
+++ b/src/init/toplevel/toplevel_config.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/parsing/clexer.mli b/src/kernel_internals/parsing/clexer.mli
index 01635d00e89a6fb367813f7ebbe966b0e349f82c..8927f15fdd03bff4ee896d9c62baf0cdab8c4a6e 100644
--- a/src/kernel_internals/parsing/clexer.mli
+++ b/src/kernel_internals/parsing/clexer.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** The C Lexer. *)
diff --git a/src/kernel_internals/parsing/clexer.mll b/src/kernel_internals/parsing/clexer.mll
index 2e95e6c11daa679ce1fe023f70bd838b43cd744f..89dbe33f7d5e5467fd8fe0435d48c6b50a7c882d 100644
--- a/src/kernel_internals/parsing/clexer.mll
+++ b/src/kernel_internals/parsing/clexer.mll
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* FrontC -- lexical analyzer
diff --git a/src/kernel_internals/parsing/cparser.mly b/src/kernel_internals/parsing/cparser.mly
index 0306a989a8023bad4043dc61bca4ea6e4584328f..a7f848039f9ec28bbbc55424809ccf607cfe8e5b 100644
--- a/src/kernel_internals/parsing/cparser.mly
+++ b/src/kernel_internals/parsing/cparser.mly
@@ -39,6 +39,7 @@
 /*                        énergies alternatives)                            */
 /*               and INRIA (Institut National de Recherche en Informatique  */
 /*                          et Automatique).                                */
+/*                                                                          */
 /****************************************************************************/
 
 /*  3.22.99 Hugues Cass<E9> First version.
diff --git a/src/kernel_internals/parsing/dune b/src/kernel_internals/parsing/dune
index bfa9e3a404a65b96ae8d8df4010c44a4dd05d998..121f1903b0cf152504e517f1c829e190ba54bf54 100644
--- a/src/kernel_internals/parsing/dune
+++ b/src/kernel_internals/parsing/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/kernel_internals/parsing/errorloc.ml b/src/kernel_internals/parsing/errorloc.ml
index 9d1e3669dce6fe5e0e3fada852afb769d27be3f0..fcc349385273ad676645cf6457d5b0956eda1e4d 100644
--- a/src/kernel_internals/parsing/errorloc.ml
+++ b/src/kernel_internals/parsing/errorloc.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* Copied and modified from [cil/src/errormsg.ml] *)
diff --git a/src/kernel_internals/parsing/errorloc.mli b/src/kernel_internals/parsing/errorloc.mli
index a83180cd21bda8a38594036ed6a639aae1949399..9fa9f99f1162f0dd144476421401d98a35a2e913 100644
--- a/src/kernel_internals/parsing/errorloc.mli
+++ b/src/kernel_internals/parsing/errorloc.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** The module stores the current file,line, and working directory in a
@@ -74,7 +75,7 @@ val finishParsing: unit -> unit (** Call this function to finish parsing and
     the location will be underlined with [^]
     NB: if the two positions in the location refer to different files, the
     first position will not be considered.
-    @before Frama-C+dev: the function took as argument a single position and
+    @before 29.0-Copper: the function took as argument a single position and
     and an optional [start_line] (as an [int]) to indicate a different starting
     line.
 *)
diff --git a/src/kernel_internals/parsing/lexerhack.ml b/src/kernel_internals/parsing/lexerhack.ml
index 56f5480b1484982651bfadb442b9d0d50da843b4..00bd71caf968469fbe42cec501b3588f4c40fcbc 100644
--- a/src/kernel_internals/parsing/lexerhack.ml
+++ b/src/kernel_internals/parsing/lexerhack.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* We provide here a pointer to a function. It will be set by the lexer and
diff --git a/src/kernel_internals/parsing/lexerhack.mli b/src/kernel_internals/parsing/lexerhack.mli
index 7be70da71c4d2736d7e4b9f8fbf4171ce5f2e394..d660b2f4610b66420c8d1f1f46eda32f492a4ed2 100644
--- a/src/kernel_internals/parsing/lexerhack.mli
+++ b/src/kernel_internals/parsing/lexerhack.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 val add_identifier: (string -> unit) ref
diff --git a/src/kernel_internals/parsing/logic_lexer.mli b/src/kernel_internals/parsing/logic_lexer.mli
index 46ac3889ae0e9d77b1be411d08c9b91587980ea8..5dc9212955a2fdb48b9339192eb237ab24eeedc9 100644
--- a/src/kernel_internals/parsing/logic_lexer.mli
+++ b/src/kernel_internals/parsing/logic_lexer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_internals/parsing/logic_lexer.mll b/src/kernel_internals/parsing/logic_lexer.mll
index bf66ceccfdaf5daf3e4c883cca46b4e7c047e0ec..537af0103aacfd18826560b0927c959574c9f469 100644
--- a/src/kernel_internals/parsing/logic_lexer.mll
+++ b/src/kernel_internals/parsing/logic_lexer.mll
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_internals/parsing/logic_parser.mly b/src/kernel_internals/parsing/logic_parser.mly
index bfe8101644bd220dde607e7693298671320efca9..79d29dce4a3ee1387a36b0a55fe3cf9af7f7a028 100644
--- a/src/kernel_internals/parsing/logic_parser.mly
+++ b/src/kernel_internals/parsing/logic_parser.mly
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA   (Commissariat à l'énergie atomique et aux énergies            */
 /*           alternatives)                                                */
 /*    INRIA (Institut National de Recherche en Informatique et en         */
diff --git a/src/kernel_internals/parsing/logic_preprocess.mli b/src/kernel_internals/parsing/logic_preprocess.mli
index 9bd5ba2de7083f8fc063c2025142f907110406bb..3a8a8173b002de06a27178297478cbb432fef9df 100644
--- a/src/kernel_internals/parsing/logic_preprocess.mli
+++ b/src/kernel_internals/parsing/logic_preprocess.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_internals/parsing/logic_preprocess.mll b/src/kernel_internals/parsing/logic_preprocess.mll
index f973492af2bc13dfd3af16115507721e9908dec6..14bb0bd7262eeb33d6bda56d7c0d4063dff4c97d 100644
--- a/src/kernel_internals/parsing/logic_preprocess.mll
+++ b/src/kernel_internals/parsing/logic_preprocess.mll
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_internals/parsing/parse_env.ml b/src/kernel_internals/parsing/parse_env.ml
index 9600e800f0c1e2cc9588285ae0e9a1992c76da63..3159ce8ab2dbda02d62e78b92ff34a26b6f0c0d8 100644
--- a/src/kernel_internals/parsing/parse_env.ml
+++ b/src/kernel_internals/parsing/parse_env.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/parsing/parse_env.mli b/src/kernel_internals/parsing/parse_env.mli
index 6c64b23ea0046ac24b6ba6e71379cb49a2413721..207a31a2f12126a247bc4818e711cbe7d73aace0 100644
--- a/src/kernel_internals/parsing/parse_env.mli
+++ b/src/kernel_internals/parsing/parse_env.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/parsing/tests/check_logic_parser.ml b/src/kernel_internals/parsing/tests/check_logic_parser.ml
index 8435c5578611286dc8a5dd42015f84e1913f0fd7..c6e38175003456512d90b1857a2ef9223511530f 100644
--- a/src/kernel_internals/parsing/tests/check_logic_parser.ml
+++ b/src/kernel_internals/parsing/tests/check_logic_parser.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/parsing/tests/dune b/src/kernel_internals/parsing/tests/dune
index d77efd63c875dc4d3dd43be7f7f4ed3cb0997954..f4ec5b5e8743c16acbb39ac0ce488696f3becc0e 100644
--- a/src/kernel_internals/parsing/tests/dune
+++ b/src/kernel_internals/parsing/tests/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/kernel_internals/runtime/boot.ml b/src/kernel_internals/runtime/boot.ml
index e93f37b85bd6d346e81e0bf14eaf2c7460b8b218..09b98e9952865ab6afd0c4ebe2ab67b81bcc26d0 100644
--- a/src/kernel_internals/runtime/boot.ml
+++ b/src/kernel_internals/runtime/boot.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/boot.mli b/src/kernel_internals/runtime/boot.mli
index 7655842fb51e08f109189576b6d52596385ff1fe..bf4060ee8207958c23209631234947b97ea854b1 100644
--- a/src/kernel_internals/runtime/boot.mli
+++ b/src/kernel_internals/runtime/boot.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,7 +22,7 @@
 
 (** Frama-C main interface.
     @since Lithium-20081201
-    @before Frama-C+dev it was in a module named Db
+    @before 29.0-Copper it was in a module named Db
     @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf> *)
 module Main : sig
   val extend : (unit -> unit) -> unit
@@ -33,7 +33,7 @@ end
 val play_analysis : unit -> unit
 (** Run all the Frama-C analyses. This function should be called only by
     toplevels.
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val boot : unit -> unit
@@ -41,6 +41,6 @@ val boot : unit -> unit
 
 val set_toplevel: ((unit -> unit) -> unit) -> unit
 (** Changes the toplevel function to run on boot
-    @since Frama-C+dev
-    @before Frama-C+dev it was provided in a different way in Db.Toplevel
+    @since 29.0-Copper
+    @before 29.0-Copper it was provided in a different way in Db.Toplevel
 *)
diff --git a/src/kernel_internals/runtime/dump_config.ml b/src/kernel_internals/runtime/dump_config.ml
index d71ce8d212551cb836bddc25e94fb374f1e81d84..4b12a03e5987469449fb1954717627d656e48578 100644
--- a/src/kernel_internals/runtime/dump_config.ml
+++ b/src/kernel_internals/runtime/dump_config.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/dump_config.mli b/src/kernel_internals/runtime/dump_config.mli
index 6ed2f901c697f3bc463c397f73cd790a3c53cee2..ee34cee19bbbef0883f2a53eb8a8eb5c7e90011b 100644
--- a/src/kernel_internals/runtime/dump_config.mli
+++ b/src/kernel_internals/runtime/dump_config.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/dune b/src/kernel_internals/runtime/dune
index b3fffe3c9ab373057980e873c472aed6b6cff505..d960851d96cfe9b33444f9d19a3860b798a4fde1 100644
--- a/src/kernel_internals/runtime/dune
+++ b/src/kernel_internals/runtime/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/kernel_internals/runtime/fc_config.ml.in b/src/kernel_internals/runtime/fc_config.ml.in
index 790125b2c8241464fb6008b05bff228637308511..833d802008eb533f263a9ebdcff6434ab2f2e23c 100644
--- a/src/kernel_internals/runtime/fc_config.ml.in
+++ b/src/kernel_internals/runtime/fc_config.ml.in
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/fc_config.mli b/src/kernel_internals/runtime/fc_config.mli
index a9ec0d19da29627c1654212fd7540160db70c949..fe303eec5779ce977d9221abc22cf5a7f18992b8 100644
--- a/src/kernel_internals/runtime/fc_config.mli
+++ b/src/kernel_internals/runtime/fc_config.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/machdep.ml b/src/kernel_internals/runtime/machdep.ml
index eb162d73b21764c827c7e5d33bf8b9447b1d0b24..e65d13d8169ef81b0cfa6c05f07d0d2068ca7fbd 100644
--- a/src/kernel_internals/runtime/machdep.ml
+++ b/src/kernel_internals/runtime/machdep.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/machdep.mli b/src/kernel_internals/runtime/machdep.mli
index 90d8718b6984007a1b61a754a9447c6ae4c235b2..d84b3bed6003f44bb8e9583bb20bc2aea535acfa 100644
--- a/src/kernel_internals/runtime/machdep.mli
+++ b/src/kernel_internals/runtime/machdep.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -27,7 +27,7 @@
     required by [share/libc/features.h] and other system-dependent headers.
     @param censored_macros prevents the generation of directives for the
     builtin macros in [mach.custom_defs] whose names match. empty by default.
-    @before Frama-C+dev censored_macros did not exist
+    @before 29.0-Copper censored_macros did not exist
 *)
 val gen_all_defines:
   Format.formatter ->
@@ -38,7 +38,7 @@ val gen_all_defines:
 (** generates a [__fc_machdep.h] file in a temp directory and returns the
     directory name, to be added to the search path for preprocessing stdlib.
     @param see {!gen_all_defines}
-    @before Frama-C+dev censored_macros did not exist.
+    @before 29.0-Copper censored_macros did not exist.
 *)
 val generate_machdep_header:
   ?censored_macros:Datatype.String.Set.t ->
diff --git a/src/kernel_internals/runtime/messages.ml b/src/kernel_internals/runtime/messages.ml
index 0ffcbf01e65b1a56f90a426d37ed09e413ee4f62..02efde6cf3257d07229d1cd6baecc8912bd83e50 100644
--- a/src/kernel_internals/runtime/messages.ml
+++ b/src/kernel_internals/runtime/messages.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/messages.mli b/src/kernel_internals/runtime/messages.mli
index 1520533bc543e124e18ef63c424acc70528b2e4e..6c254c7763e9c9e2513758ad469073a69471a769 100644
--- a/src/kernel_internals/runtime/messages.mli
+++ b/src/kernel_internals/runtime/messages.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/special_hooks.ml b/src/kernel_internals/runtime/special_hooks.ml
index 9c4ebad617365527cf71277e10a5884b17703b79..fe42c94af1e1bf2c2d4e3b78ff277771d186b2a0 100644
--- a/src/kernel_internals/runtime/special_hooks.ml
+++ b/src/kernel_internals/runtime/special_hooks.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/runtime/special_hooks.mli b/src/kernel_internals/runtime/special_hooks.mli
index f81791296fb6b2013dc99255ce08ce8f40aec6d1..f76ee207686c624c519f27facacdd4cf992afe63 100644
--- a/src/kernel_internals/runtime/special_hooks.mli
+++ b/src/kernel_internals/runtime/special_hooks.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/allocates.ml b/src/kernel_internals/typing/allocates.ml
index 922c2fdebd230dd890a58601e7016f6e69dff45a..9555b594082403bdc37aaa54423a9cc59b66d198 100644
--- a/src/kernel_internals/typing/allocates.ml
+++ b/src/kernel_internals/typing/allocates.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/allocates.mli b/src/kernel_internals/typing/allocates.mli
index 7376a31dc485963ad75314f9720f45653dbec7e1..cb634788aed13911f9628548d3c7c573655537bb 100644
--- a/src/kernel_internals/typing/allocates.mli
+++ b/src/kernel_internals/typing/allocates.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/alpha.ml b/src/kernel_internals/typing/alpha.ml
index b4d470ca682c49a31e0f02f6a45fe08c879d9dd7..73e0f238fac115f6e099aa67039368704d021261 100644
--- a/src/kernel_internals/typing/alpha.ml
+++ b/src/kernel_internals/typing/alpha.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 module H = Hashtbl
diff --git a/src/kernel_internals/typing/alpha.mli b/src/kernel_internals/typing/alpha.mli
index 075d2f04f5ee8169510e9534c207c32e75275881..36016c46d6a213e6774f6ecb57ab7c03864519bd 100644
--- a/src/kernel_internals/typing/alpha.mli
+++ b/src/kernel_internals/typing/alpha.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** Alpha conversion. *)
diff --git a/src/kernel_internals/typing/asm_contracts.ml b/src/kernel_internals/typing/asm_contracts.ml
index 5a117f927511e8f2311654d2cd108b9298b3a675..73b20779e7857afb330f45c926d16e683d456a92 100644
--- a/src/kernel_internals/typing/asm_contracts.ml
+++ b/src/kernel_internals/typing/asm_contracts.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/asm_contracts.mli b/src/kernel_internals/typing/asm_contracts.mli
index 5b211c7c8905ec49025674429f911e3d733601f6..e09d280bea40390a0c50262522ffe010f2f8a394 100644
--- a/src/kernel_internals/typing/asm_contracts.mli
+++ b/src/kernel_internals/typing/asm_contracts.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/cabs2cil.ml b/src/kernel_internals/typing/cabs2cil.ml
index d292539ff501de4c8b9f12103d3ee0dd60b00f3c..471bf33f62c10109b6778b760901dc5eb19a9dc3 100644
--- a/src/kernel_internals/typing/cabs2cil.ml
+++ b/src/kernel_internals/typing/cabs2cil.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* Modified by TrustInSoft *)
@@ -4826,7 +4827,8 @@ and doType (ghost:bool) isFuncArg
                    let size_max = Cil.max_unsigned_number size_t in
                    let array_size = Integer.mul i elem_size in
                    if Integer.gt array_size size_max then
-                     Kernel.error ~once:true ~current:true
+                     Kernel.warning ~wkey:Kernel.wkey_large_array
+                       ~once:true ~current:true
                        "Array length is too large.";
                  with
                  | SizeOfError (msg,_) ->
@@ -6463,7 +6465,7 @@ and doExp local_env
              *)
              if not isSpecialBuiltin && not are_ghost then begin
                warn_no_proto f;
-               let typ = TFun (resType, Some [], false,attrs) in
+               let typ = TFun (resType, Some [], false, attrs) in
                Cil.update_var_type f typ;
              end
            | None, _ (* TODO: treat function pointers. *)
@@ -6599,8 +6601,37 @@ and doExp local_env
                    (List.mapi default_argument_promotion args)
                in
                let typ = TFun (resType, Some prm_types, false,attrs) in
+               begin
+                 try
+                   (* Nested calls of a function without a prototype : inner
+                      calls will update [f] type but the information is not
+                      communicated to outer ones, hence [argTypes] is not up to
+                      date and we need to check that types are compatibles
+                      before updating [f] type (see issue-641-implicit-calls.c
+                      test).
+                   *)
+                   ignore(Cil.compatibleTypes f.vtype typ);
+                 with Cannot_combine msg ->
+                   abort_context "nested calls of %s without a prototype and \
+                                  incompatible arguments : %s" f.vname msg
+               end;
                Cil.update_var_type f typ;
                Cil.setFormalsDecl f typ;
+               (* We need to check that the update of [f] did not create
+                  inconsistencies with call' arguments. It can happen when [f]
+                  is used as an lvalue in its own arguments. Updating [f] type
+                  will recursively change the type of [f] inside parameters ,
+                  therefore [f] type is not up to date anymore, etc (see
+                  issue-641-implicit-calls.c test). *)
+               let check_arg e (_, at, _) =
+                 let typ = Cil.typeOf e in
+                 if not @@ Cil_datatype.Typ.equal typ at then
+                   abort_context "call to %s with a reference to itself in its \
+                                  own parameters" f.vname
+               in
+               (* args and prm_types should have the same length here, since
+                  they both come from the same split.  *)
+               List.iter2 check_arg args prm_types;
                (chunk,args)
              end
            | None, _ -> res
diff --git a/src/kernel_internals/typing/cabs2cil.mli b/src/kernel_internals/typing/cabs2cil.mli
index 7ec9c583d594757dcb1bb1f7f8993c50c0163eda..9ef8d8582ff30a53b187b77556ed49bd41b037f8 100644
--- a/src/kernel_internals/typing/cabs2cil.mli
+++ b/src/kernel_internals/typing/cabs2cil.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** Registers a new hook that will be applied each time a side-effect free
diff --git a/src/kernel_internals/typing/cfg.ml b/src/kernel_internals/typing/cfg.ml
index 7da177464c06d83a1dc793427313bd23c4946af4..25843313a2d3d068e0a35213ba544232fe618400 100644
--- a/src/kernel_internals/typing/cfg.ml
+++ b/src/kernel_internals/typing/cfg.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* Authors: Aman Bhargava, S. P. Rahul *)
diff --git a/src/kernel_internals/typing/cfg.mli b/src/kernel_internals/typing/cfg.mli
index b040cda0b17bf99457fdfd0725c04cec53965e1e..6c9f98bda9f94b5d7b670a8c9d0e4000d646387f 100644
--- a/src/kernel_internals/typing/cfg.mli
+++ b/src/kernel_internals/typing/cfg.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** Code to compute the control-flow graph of a function or file.
diff --git a/src/kernel_internals/typing/frontc.ml b/src/kernel_internals/typing/frontc.ml
index d48a945dbd97b587807c0f92c18198ab4e1607d9..069bb6bbbb30e571f206945a675a4d63d52b59fd 100644
--- a/src/kernel_internals/typing/frontc.ml
+++ b/src/kernel_internals/typing/frontc.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 let parse_to_cabs (path : Datatype.Filepath.t) =
diff --git a/src/kernel_internals/typing/frontc.mli b/src/kernel_internals/typing/frontc.mli
index 591aa2013dec6264a1479c00e7f362e3f088cf30..34472791f5ef01fd40f3135092763b7a92fe58e6 100644
--- a/src/kernel_internals/typing/frontc.mli
+++ b/src/kernel_internals/typing/frontc.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** add a syntactic transformation that will be applied to all freshly parsed
diff --git a/src/kernel_internals/typing/ghost_accesses.ml b/src/kernel_internals/typing/ghost_accesses.ml
index 5394ebbc58faf43ad2992b8e5520e0701142b6f1..59886b69cb28210e8c366a02ff621b0be195666e 100644
--- a/src/kernel_internals/typing/ghost_accesses.ml
+++ b/src/kernel_internals/typing/ghost_accesses.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/ghost_accesses.mli b/src/kernel_internals/typing/ghost_accesses.mli
index cf906d4d65861eb0b7dc1ccbc63930f98f3577c3..73f184fe1eeee1e560ad5537c52730e9e464b623 100644
--- a/src/kernel_internals/typing/ghost_accesses.mli
+++ b/src/kernel_internals/typing/ghost_accesses.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/ghost_cfg.ml b/src/kernel_internals/typing/ghost_cfg.ml
index 1ad528ec6dad2771b70c680791743563d8bfdbb1..9b6bab192e5ba9cf6a11d573c45afc863950ed1d 100644
--- a/src/kernel_internals/typing/ghost_cfg.ml
+++ b/src/kernel_internals/typing/ghost_cfg.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/ghost_cfg.mli b/src/kernel_internals/typing/ghost_cfg.mli
index d2f1428184e789caf2f72cbc3768a292c379f59e..6e77ecbb411c54493058d950be5ba773b8533b16 100644
--- a/src/kernel_internals/typing/ghost_cfg.mli
+++ b/src/kernel_internals/typing/ghost_cfg.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/infer_assigns.ml b/src/kernel_internals/typing/infer_assigns.ml
index d1fcbf7536a7288bdbb84cf92ea661a5b0b77038..d08ee3dc9ba141cae71fd4091e7c7a0244c74978 100644
--- a/src/kernel_internals/typing/infer_assigns.ml
+++ b/src/kernel_internals/typing/infer_assigns.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/infer_assigns.mli b/src/kernel_internals/typing/infer_assigns.mli
index 68123c298d68ad1e853b7165b828ae930e3ac84e..f737ff18c56a52116f5fb44edc4bd2219dbfc4cf 100644
--- a/src/kernel_internals/typing/infer_assigns.mli
+++ b/src/kernel_internals/typing/infer_assigns.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/logic_builtin.ml b/src/kernel_internals/typing/logic_builtin.ml
index 03c45e5023eafe2b3c686eb96f98e92a1898786f..d1cf6d7c2701114593d52822b6c1a2399ab81387 100644
--- a/src/kernel_internals/typing/logic_builtin.ml
+++ b/src/kernel_internals/typing/logic_builtin.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_internals/typing/logic_builtin.mli b/src/kernel_internals/typing/logic_builtin.mli
index d43a099a2582b324a3eeae5b56f341b71419d0df..b32f58d2950fddb9a43b0ba021736a6bc17cfc66 100644
--- a/src/kernel_internals/typing/logic_builtin.mli
+++ b/src/kernel_internals/typing/logic_builtin.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_internals/typing/mergecil.ml b/src/kernel_internals/typing/mergecil.ml
index cca4dd7a60ff1f685d7ba89a3f76939a0b4f7a11..61b53f17a3c1c0a7674d056dcaa7efc433e8a981 100644
--- a/src/kernel_internals/typing/mergecil.ml
+++ b/src/kernel_internals/typing/mergecil.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* mergecil.ml *)
diff --git a/src/kernel_internals/typing/mergecil.mli b/src/kernel_internals/typing/mergecil.mli
index ccde88f5c4e1f8c6c8d9310c0ab0b057a02a9be6..4532054c22b6260b93880280c75af82b2e3f53c3 100644
--- a/src/kernel_internals/typing/mergecil.mli
+++ b/src/kernel_internals/typing/mergecil.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (*
diff --git a/src/kernel_internals/typing/oneret.ml b/src/kernel_internals/typing/oneret.ml
index 190753ee6de26af4df7fc3fd4606223db5060b05..c514e9754880be110af5a5e4faf9d1d29bad1c64 100644
--- a/src/kernel_internals/typing/oneret.ml
+++ b/src/kernel_internals/typing/oneret.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 open Cil_types
diff --git a/src/kernel_internals/typing/oneret.mli b/src/kernel_internals/typing/oneret.mli
index 845c74dc833cf1c89f6d156781cf797986311a4c..de5b46fc81d09bf8c750eb21eec11d9b21b8a5c7 100644
--- a/src/kernel_internals/typing/oneret.mli
+++ b/src/kernel_internals/typing/oneret.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (*
diff --git a/src/kernel_internals/typing/populate_spec.ml b/src/kernel_internals/typing/populate_spec.ml
index fa418695b4b000e779bd8238d7382309cdf69f86..faa38bd233a121b754ea5bfba1bc2e50d71fcdf0 100644
--- a/src/kernel_internals/typing/populate_spec.ml
+++ b/src/kernel_internals/typing/populate_spec.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/populate_spec.mli b/src/kernel_internals/typing/populate_spec.mli
index 8624e60f7cc11448fa1ce2012dead7df0a557981..f9d9771c578d3f426647a8cfb5d59ffee65275df 100644
--- a/src/kernel_internals/typing/populate_spec.mli
+++ b/src/kernel_internals/typing/populate_spec.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/rmtmps.ml b/src/kernel_internals/typing/rmtmps.ml
index c07bfae94a550e5184603f83d025b164940c69f1..01c1b346c1d653475d7b488fdbc96ad91133bcd6 100644
--- a/src/kernel_internals/typing/rmtmps.ml
+++ b/src/kernel_internals/typing/rmtmps.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 let dkey = Kernel.dkey_rmtmps
diff --git a/src/kernel_internals/typing/rmtmps.mli b/src/kernel_internals/typing/rmtmps.mli
index 015a4f4dff344aee76e5b7996216088814ccff0e..3693448008d06a2fb1765e3deb79ac1b6e95a53e 100644
--- a/src/kernel_internals/typing/rmtmps.mli
+++ b/src/kernel_internals/typing/rmtmps.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* rmtmps.mli *)
diff --git a/src/kernel_internals/typing/substitute_const_globals.ml b/src/kernel_internals/typing/substitute_const_globals.ml
index 118cf18ed0ef8b400d06c97ce6d6a57322d9ab3a..79fa589fabf3fa0e6f91cc2379af0ccb67d2ce2a 100644
--- a/src/kernel_internals/typing/substitute_const_globals.ml
+++ b/src/kernel_internals/typing/substitute_const_globals.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/substitute_const_globals.mli b/src/kernel_internals/typing/substitute_const_globals.mli
index 70249375968d16abc9d07fb7a19718ee883ebb33..2d7033afdb0b36d21e2802b748923a3ecf187acc 100644
--- a/src/kernel_internals/typing/substitute_const_globals.mli
+++ b/src/kernel_internals/typing/substitute_const_globals.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/translate_lightweight.ml b/src/kernel_internals/typing/translate_lightweight.ml
index 7d6fadf10a93d7f086db4f8a290e8fdc364f098c..5537caaed63a5d876ef716e54a4ff15f2b0ba2ef 100644
--- a/src/kernel_internals/typing/translate_lightweight.ml
+++ b/src/kernel_internals/typing/translate_lightweight.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_internals/typing/translate_lightweight.mli b/src/kernel_internals/typing/translate_lightweight.mli
index 6b3f546057253a06bda6a8e7eac4f5e3c6452ded..60c88ab82ab247c641daca58aa3f1aea7ba16566 100644
--- a/src/kernel_internals/typing/translate_lightweight.mli
+++ b/src/kernel_internals/typing/translate_lightweight.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_internals/typing/unroll_loops.ml b/src/kernel_internals/typing/unroll_loops.ml
index de984c0bd12caa5bc1e0ceb19c82b2470c47590a..6357d6e25cdd60b5e8168ed55d2ab7d94e18ab37 100644
--- a/src/kernel_internals/typing/unroll_loops.ml
+++ b/src/kernel_internals/typing/unroll_loops.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_internals/typing/unroll_loops.mli b/src/kernel_internals/typing/unroll_loops.mli
index b465616b80db93ef4bd40164e0125d0c46adece9..2f2c4a12fe61c76b562303f37a7f0dad1ea60d0d 100644
--- a/src/kernel_internals/typing/unroll_loops.mli
+++ b/src/kernel_internals/typing/unroll_loops.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/abstract_interp.ml b/src/kernel_services/abstract_interp/abstract_interp.ml
index 6434114eb38aaa5f4017454c5820da6b60e18f42..8556519564248f3cd6f260e6479949b4c6e52ee7 100644
--- a/src/kernel_services/abstract_interp/abstract_interp.ml
+++ b/src/kernel_services/abstract_interp/abstract_interp.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/abstract_interp.mli b/src/kernel_services/abstract_interp/abstract_interp.mli
index fa6e2a63d648cfa78270e00cbce21804f406c029..5fcbdcdd7b74c9f0cca30fad29d1a1da287bad9e 100644
--- a/src/kernel_services/abstract_interp/abstract_interp.mli
+++ b/src/kernel_services/abstract_interp/abstract_interp.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/base.ml b/src/kernel_services/abstract_interp/base.ml
index ad0181fd35264e737104c0785d5e5ec46abc9b49..3d078b7596b099606cde16a60dfd1d0f3aaa557f 100644
--- a/src/kernel_services/abstract_interp/base.ml
+++ b/src/kernel_services/abstract_interp/base.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/base.mli b/src/kernel_services/abstract_interp/base.mli
index 71d5db14a4112aee83929df41df5c0b7845f4c87..6a1984a92f6043dae55a2e2a788ecb53eeec8736 100644
--- a/src/kernel_services/abstract_interp/base.mli
+++ b/src/kernel_services/abstract_interp/base.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/cvalue.ml b/src/kernel_services/abstract_interp/cvalue.ml
index 14176234ddcf0ae9b427423b9b9cce1535085240..bd0e040f33fdc691af23237e227e77fe161bfca4 100644
--- a/src/kernel_services/abstract_interp/cvalue.ml
+++ b/src/kernel_services/abstract_interp/cvalue.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/cvalue.mli b/src/kernel_services/abstract_interp/cvalue.mli
index 90bfb1924700f4a5b597d6afdd700718f8ded3cc..c29a49c14ed8e297ae6402eb83c15e974889dba4 100644
--- a/src/kernel_services/abstract_interp/cvalue.mli
+++ b/src/kernel_services/abstract_interp/cvalue.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/eva_lattice_type.ml b/src/kernel_services/abstract_interp/eva_lattice_type.ml
index 37631267aaf0f9a7d97d34a1a8586ba7e0187fdd..9653215b248cedc8615d1b294182e07a3a99fc48 100644
--- a/src/kernel_services/abstract_interp/eva_lattice_type.ml
+++ b/src/kernel_services/abstract_interp/eva_lattice_type.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/fc_float.ml b/src/kernel_services/abstract_interp/fc_float.ml
index 86bab33a0c10ddb666acecd4359b1b1f0a74bbd9..1c66baad15fa4d172881433c38aa3801a797d96f 100644
--- a/src/kernel_services/abstract_interp/fc_float.ml
+++ b/src/kernel_services/abstract_interp/fc_float.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/fc_float.mli b/src/kernel_services/abstract_interp/fc_float.mli
index 9ebcb718e54da2fc137c6663656a58669e628cf5..9f31c1f1dd80efbec127877d862c75a75361a7df 100644
--- a/src/kernel_services/abstract_interp/fc_float.mli
+++ b/src/kernel_services/abstract_interp/fc_float.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/float_interval.ml b/src/kernel_services/abstract_interp/float_interval.ml
index 08c64fb2b9919d5d1ff3d9464d39640d5762f756..81f805900cd55aaa7efe19f8dba4892479e97616 100644
--- a/src/kernel_services/abstract_interp/float_interval.ml
+++ b/src/kernel_services/abstract_interp/float_interval.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/float_interval.mli b/src/kernel_services/abstract_interp/float_interval.mli
index 697c93e81f2b3a35b06d774aa7310265100a104d..6608b5ed5f3150d9ed5e43b78fc78cfbc3db5073 100644
--- a/src/kernel_services/abstract_interp/float_interval.mli
+++ b/src/kernel_services/abstract_interp/float_interval.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/float_interval_sig.ml b/src/kernel_services/abstract_interp/float_interval_sig.ml
index c773db643f8433f19632d2d2394019e7ffdd769d..664489dec9ec7894be42d3ccf2b9f32417790183 100644
--- a/src/kernel_services/abstract_interp/float_interval_sig.ml
+++ b/src/kernel_services/abstract_interp/float_interval_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/float_sig.ml b/src/kernel_services/abstract_interp/float_sig.ml
index d7173c782bca6f1f752f7fdd87fcad45c5e03355..9b0ca2e35355fa579eced3fe5056a1422c2bf935 100644
--- a/src/kernel_services/abstract_interp/float_sig.ml
+++ b/src/kernel_services/abstract_interp/float_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/fval.ml b/src/kernel_services/abstract_interp/fval.ml
index 4dda97a8520b86c2c3e4eb27a456143b30c0b5d4..a447f70ede02f4b7cbf48c81863b7b03ece58bf9 100644
--- a/src/kernel_services/abstract_interp/fval.ml
+++ b/src/kernel_services/abstract_interp/fval.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/fval.mli b/src/kernel_services/abstract_interp/fval.mli
index e81d4d66e20e326f37bc7181d2c46215d5637ee1..26eb04ced404630a7b6fe403e1d1d34d85458e96 100644
--- a/src/kernel_services/abstract_interp/fval.mli
+++ b/src/kernel_services/abstract_interp/fval.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/inout_type.ml b/src/kernel_services/abstract_interp/inout_type.ml
index b2e0ce8b6fc45580517c9f00991b72d2f602fa0f..b0e4f6fa6875ee88bffb3abb42ab4ecd5f90ee97 100644
--- a/src/kernel_services/abstract_interp/inout_type.ml
+++ b/src/kernel_services/abstract_interp/inout_type.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/inout_type.mli b/src/kernel_services/abstract_interp/inout_type.mli
index 42840aefe01563506efe24b45cab131f4c7c7cd1..a2ce934d38dd454d218390bcddfa15512fe5663c 100644
--- a/src/kernel_services/abstract_interp/inout_type.mli
+++ b/src/kernel_services/abstract_interp/inout_type.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_Base.ml b/src/kernel_services/abstract_interp/int_Base.ml
index 60c5bdf16f62bae7566fa6f78aa9bffb876ac40e..48383f18718937a91712d790d4415e2ac45a4582 100644
--- a/src/kernel_services/abstract_interp/int_Base.ml
+++ b/src/kernel_services/abstract_interp/int_Base.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_Base.mli b/src/kernel_services/abstract_interp/int_Base.mli
index e3c13020787ef4a1cff89ad75b599ba2a56aa703..c8c651b2b6177ca2f557e95b69dfb8b91cf26b41 100644
--- a/src/kernel_services/abstract_interp/int_Base.mli
+++ b/src/kernel_services/abstract_interp/int_Base.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_Intervals.ml b/src/kernel_services/abstract_interp/int_Intervals.ml
index cb9f419d7f6ef138035b2937d1815ffd5061b6cc..1ce668c619cada473da8cdb1cf8cc2d84e0750e3 100644
--- a/src/kernel_services/abstract_interp/int_Intervals.ml
+++ b/src/kernel_services/abstract_interp/int_Intervals.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_Intervals.mli b/src/kernel_services/abstract_interp/int_Intervals.mli
index df0514faf1a0943482fdcc244d5f839d90dff12c..05b0cf6f29a14f0897f3929ab0cfb293edc82abb 100644
--- a/src/kernel_services/abstract_interp/int_Intervals.mli
+++ b/src/kernel_services/abstract_interp/int_Intervals.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_Intervals_sig.ml b/src/kernel_services/abstract_interp/int_Intervals_sig.ml
index 80d1d9e6a2dc06fdefaf3f8143a9b460190c79ee..f375f1d8c3d39ef9a9e2a0e93e87fc18bdb35462 100644
--- a/src/kernel_services/abstract_interp/int_Intervals_sig.ml
+++ b/src/kernel_services/abstract_interp/int_Intervals_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_interval.ml b/src/kernel_services/abstract_interp/int_interval.ml
index 02b738f217d265bbce854e76e3a1fce580571163..4ec276b83bb77282cd29d98d1e38549bec679c03 100644
--- a/src/kernel_services/abstract_interp/int_interval.ml
+++ b/src/kernel_services/abstract_interp/int_interval.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_interval.mli b/src/kernel_services/abstract_interp/int_interval.mli
index b07c2784f33df77c2b729de4f62537b93df1baeb..4b14b23dfc2fcaabddfe9bc10c9281a140f70e64 100644
--- a/src/kernel_services/abstract_interp/int_interval.mli
+++ b/src/kernel_services/abstract_interp/int_interval.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_set.ml b/src/kernel_services/abstract_interp/int_set.ml
index 47c3b99595189fb6c8d3d028ffa649fba37b71c6..43f46c43e38f18cc00b5df92c864ccf42085a00f 100644
--- a/src/kernel_services/abstract_interp/int_set.ml
+++ b/src/kernel_services/abstract_interp/int_set.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_set.mli b/src/kernel_services/abstract_interp/int_set.mli
index 46c2219c32fb7cd0fd3c2300f578b8c5320002b4..58a54f05899cf13a077bf28ebc7390f9e63e27a1 100644
--- a/src/kernel_services/abstract_interp/int_set.mli
+++ b/src/kernel_services/abstract_interp/int_set.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_val.ml b/src/kernel_services/abstract_interp/int_val.ml
index 259619512a643712dac569f0afe21ce46d2b972c..ed4c2b7551ea874e91173209e5be2972144b197f 100644
--- a/src/kernel_services/abstract_interp/int_val.ml
+++ b/src/kernel_services/abstract_interp/int_val.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/int_val.mli b/src/kernel_services/abstract_interp/int_val.mli
index ab4f7f2bbe235abaace452f428eb7f6508df940c..23b9e8c376ac3d2f242445116a4ad9fd7ce2cb39 100644
--- a/src/kernel_services/abstract_interp/int_val.mli
+++ b/src/kernel_services/abstract_interp/int_val.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/ival.ml b/src/kernel_services/abstract_interp/ival.ml
index 8e0e9a53d050846eec498a97290d85c1bfe6b9d1..dd3c6a9e3ed1db9fe8fbebe7cd2aa18d56ec5264 100644
--- a/src/kernel_services/abstract_interp/ival.ml
+++ b/src/kernel_services/abstract_interp/ival.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/ival.mli b/src/kernel_services/abstract_interp/ival.mli
index 8216591981a7986682f9027bec16240fb0d78247..aadd4ff07595952ff9b725b57a7df3022fca96f6 100644
--- a/src/kernel_services/abstract_interp/ival.mli
+++ b/src/kernel_services/abstract_interp/ival.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lattice_bounds.ml b/src/kernel_services/abstract_interp/lattice_bounds.ml
index 583d47d1811e751e5e3a1aa9069b11edd55144e8..6ca6bc1eb377457d9fb5e89cab584196cc3a6f82 100644
--- a/src/kernel_services/abstract_interp/lattice_bounds.ml
+++ b/src/kernel_services/abstract_interp/lattice_bounds.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lattice_bounds.mli b/src/kernel_services/abstract_interp/lattice_bounds.mli
index ead45a00fb69b5e5aa017b8608dfa5039d605eb1..903fec7a1db3058103e5c6156cffcb759e4af295 100644
--- a/src/kernel_services/abstract_interp/lattice_bounds.mli
+++ b/src/kernel_services/abstract_interp/lattice_bounds.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lattice_messages.ml b/src/kernel_services/abstract_interp/lattice_messages.ml
index 72dc000c22370832184c867953ac19351a801db2..969b8a61dd96da2583d19b4cf4225906701c3854 100644
--- a/src/kernel_services/abstract_interp/lattice_messages.ml
+++ b/src/kernel_services/abstract_interp/lattice_messages.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lattice_messages.mli b/src/kernel_services/abstract_interp/lattice_messages.mli
index 0a80032e9ce6fa091f5c97880ede67f6044fe827..9cb5cce0628a879bbf70b80c6034f5af5012b34d 100644
--- a/src/kernel_services/abstract_interp/lattice_messages.mli
+++ b/src/kernel_services/abstract_interp/lattice_messages.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lattice_type.ml b/src/kernel_services/abstract_interp/lattice_type.ml
index ce078b5fdb3c55431ad1fbcec0c7c4427bab0480..b8c71884d66d82f1da9104ef69273ff22ed87376 100644
--- a/src/kernel_services/abstract_interp/lattice_type.ml
+++ b/src/kernel_services/abstract_interp/lattice_type.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lmap.ml b/src/kernel_services/abstract_interp/lmap.ml
index e09243ea9c2a696788354c95601053fd8a269e08..148cd8beb4c6ae1f739c2796f8fdafc8da61c180 100644
--- a/src/kernel_services/abstract_interp/lmap.ml
+++ b/src/kernel_services/abstract_interp/lmap.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lmap.mli b/src/kernel_services/abstract_interp/lmap.mli
index 39ee966ba6172b64b45b76b15d6f4c315e920616..18f30c0adcedaae3ec4573727633815ebded9621 100644
--- a/src/kernel_services/abstract_interp/lmap.mli
+++ b/src/kernel_services/abstract_interp/lmap.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lmap_bitwise.ml b/src/kernel_services/abstract_interp/lmap_bitwise.ml
index 4c9571facb09a4bcf13993b9c3fca0bfb4958669..bb23f9710968ebd93933bc1843bbf8d59c0675cd 100644
--- a/src/kernel_services/abstract_interp/lmap_bitwise.ml
+++ b/src/kernel_services/abstract_interp/lmap_bitwise.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lmap_bitwise.mli b/src/kernel_services/abstract_interp/lmap_bitwise.mli
index 399cc469dd88869f9c186c962da84741e3f4322c..ef6adf28c8be16f4ceb87c5f63eb1a7925da5269 100644
--- a/src/kernel_services/abstract_interp/lmap_bitwise.mli
+++ b/src/kernel_services/abstract_interp/lmap_bitwise.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/lmap_sig.ml b/src/kernel_services/abstract_interp/lmap_sig.ml
index f832ab2ba92e20cf6005707594778417256ab57c..d379e52fce0094cce33c1f164a4c936edf70e681 100644
--- a/src/kernel_services/abstract_interp/lmap_sig.ml
+++ b/src/kernel_services/abstract_interp/lmap_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/locations.ml b/src/kernel_services/abstract_interp/locations.ml
index 34594c75acf5a866b7e9a746f8abc9cf9296b1ab..c65885af13a597fbc99e5cdd8fd536a6ae12e5c4 100644
--- a/src/kernel_services/abstract_interp/locations.ml
+++ b/src/kernel_services/abstract_interp/locations.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/locations.mli b/src/kernel_services/abstract_interp/locations.mli
index 3fb04fd17907faa4702db578477c097b10880e04..13631c57589248245cd28e081b91a87b13ac5ffd 100644
--- a/src/kernel_services/abstract_interp/locations.mli
+++ b/src/kernel_services/abstract_interp/locations.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/map_lattice.ml b/src/kernel_services/abstract_interp/map_lattice.ml
index 46c8138c810a831fb0e3ebf926354588849c5788..d6e031f7244f0e73465421885785ffa789e7ca0e 100644
--- a/src/kernel_services/abstract_interp/map_lattice.ml
+++ b/src/kernel_services/abstract_interp/map_lattice.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/map_lattice.mli b/src/kernel_services/abstract_interp/map_lattice.mli
index baed8f769c4bb80eceb05f8048989b2bc586a577..02647ec85e67fbe016e8068f6db9bcd0fa559332 100644
--- a/src/kernel_services/abstract_interp/map_lattice.mli
+++ b/src/kernel_services/abstract_interp/map_lattice.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/offsetmap.ml b/src/kernel_services/abstract_interp/offsetmap.ml
index 3359a012d02299a38bfd84124b21d0696b67ce0b..3b5ca67cc99adcad579cd980791dea983595a2b8 100644
--- a/src/kernel_services/abstract_interp/offsetmap.ml
+++ b/src/kernel_services/abstract_interp/offsetmap.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/offsetmap.mli b/src/kernel_services/abstract_interp/offsetmap.mli
index 604a74a6c922bdd4b3628765b9a0eff99e40070d..51e246111f556cacea0119df4ca1116ec125fde1 100644
--- a/src/kernel_services/abstract_interp/offsetmap.mli
+++ b/src/kernel_services/abstract_interp/offsetmap.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/offsetmap_bitwise_sig.ml b/src/kernel_services/abstract_interp/offsetmap_bitwise_sig.ml
index 8dc44ce4b58505f325f2e90132634c49082e8533..7da3311185ca30c80aeea75b75f4f93dd04a7417 100644
--- a/src/kernel_services/abstract_interp/offsetmap_bitwise_sig.ml
+++ b/src/kernel_services/abstract_interp/offsetmap_bitwise_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/offsetmap_lattice_with_isotropy.ml b/src/kernel_services/abstract_interp/offsetmap_lattice_with_isotropy.ml
index 5a0a99e26e7ad09c73229ea44a40cdfeb221a4c6..d2af70bfbc53d73006482157c34b138d22a553cc 100644
--- a/src/kernel_services/abstract_interp/offsetmap_lattice_with_isotropy.ml
+++ b/src/kernel_services/abstract_interp/offsetmap_lattice_with_isotropy.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/offsetmap_sig.ml b/src/kernel_services/abstract_interp/offsetmap_sig.ml
index 89f8d409a1ffe842da65fc5101df09f4e6e02a1b..d81994f3664e48d1774ddcb0526fcdfd5d4863ae 100644
--- a/src/kernel_services/abstract_interp/offsetmap_sig.ml
+++ b/src/kernel_services/abstract_interp/offsetmap_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/origin.ml b/src/kernel_services/abstract_interp/origin.ml
index fd87a5148a45852f89a9bf5092f2785b3128701c..8da9c71feadbe594a84ff290dd87e88b2c5329b2 100644
--- a/src/kernel_services/abstract_interp/origin.ml
+++ b/src/kernel_services/abstract_interp/origin.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/origin.mli b/src/kernel_services/abstract_interp/origin.mli
index 35d51309cd87b5399935ac3328d2aef244e9f791..80750b39c8d78e6189379ff44ded4e491a0a66f7 100644
--- a/src/kernel_services/abstract_interp/origin.mli
+++ b/src/kernel_services/abstract_interp/origin.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/precise_locs.ml b/src/kernel_services/abstract_interp/precise_locs.ml
index acbc39182e1d794816245e3425207f8ad2a9903a..1a02d409fc7639e57e2b053e9d03a8f5a68adf9a 100644
--- a/src/kernel_services/abstract_interp/precise_locs.ml
+++ b/src/kernel_services/abstract_interp/precise_locs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/precise_locs.mli b/src/kernel_services/abstract_interp/precise_locs.mli
index 52475fba809139f023535a114492dc62ab74790b..2abebccc5036a810c4fbf4cae0f220a6a7deba20 100644
--- a/src/kernel_services/abstract_interp/precise_locs.mli
+++ b/src/kernel_services/abstract_interp/precise_locs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/tr_offset.ml b/src/kernel_services/abstract_interp/tr_offset.ml
index 4f4093907f48e38c81700e6a897d8803693f8b0c..0b680e080b601668f632986855b7d3694894a722 100644
--- a/src/kernel_services/abstract_interp/tr_offset.ml
+++ b/src/kernel_services/abstract_interp/tr_offset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/tr_offset.mli b/src/kernel_services/abstract_interp/tr_offset.mli
index 8b16d56ebda0da7ba18a0b9a989766ce3741a419..4cc86b39cd63c287660a21a2f4ed5e0fa56f289c 100644
--- a/src/kernel_services/abstract_interp/tr_offset.mli
+++ b/src/kernel_services/abstract_interp/tr_offset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/widen_type.ml b/src/kernel_services/abstract_interp/widen_type.ml
index 9ef428654415b873c297613ede50401f19151237..43f1bc3940ecb5a69b3ca319291a158ffd03a82b 100644
--- a/src/kernel_services/abstract_interp/widen_type.ml
+++ b/src/kernel_services/abstract_interp/widen_type.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/abstract_interp/widen_type.mli b/src/kernel_services/abstract_interp/widen_type.mli
index 7eb0a79f3a6ff684222cf510c77a958c5d7c2418..ab264937fb6f246d2acc789512f4ad3570cca878 100644
--- a/src/kernel_services/abstract_interp/widen_type.mli
+++ b/src/kernel_services/abstract_interp/widen_type.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/bit_utils.ml b/src/kernel_services/analysis/bit_utils.ml
index eefbd753e9e57c714df37da57d8ab54c7cf973f4..d2191817962c8076ca6781ef95236e5953301ba1 100644
--- a/src/kernel_services/analysis/bit_utils.ml
+++ b/src/kernel_services/analysis/bit_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/bit_utils.mli b/src/kernel_services/analysis/bit_utils.mli
index 9e85cee42d3ca750f0d9cda1db7330b6978c541b..0e9bfc9202e82d23e11725a7616d682b4abe8438 100644
--- a/src/kernel_services/analysis/bit_utils.mli
+++ b/src/kernel_services/analysis/bit_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/dataflow2.ml b/src/kernel_services/analysis/dataflow2.ml
index 48b2d20a09bccdae01c9a3d0d0f6369194d41b1a..70fb5ffe33dc6c75bf847509bb5f23fc632e6936 100644
--- a/src/kernel_services/analysis/dataflow2.ml
+++ b/src/kernel_services/analysis/dataflow2.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/dataflow2.mli b/src/kernel_services/analysis/dataflow2.mli
index f779ca10787bd575d6deed04d8654e6e2bc52ae0..267c13853d63a95a62dd1d45b2bcc1e546187054 100644
--- a/src/kernel_services/analysis/dataflow2.mli
+++ b/src/kernel_services/analysis/dataflow2.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/dataflows.ml b/src/kernel_services/analysis/dataflows.ml
index 8f0dde149788ded2fd0598e40ecd1c358760b657..ffd8a27cd30f1a8e8080ad5d1af27c18b5b8b4d9 100644
--- a/src/kernel_services/analysis/dataflows.ml
+++ b/src/kernel_services/analysis/dataflows.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 open Ordered_stmt
diff --git a/src/kernel_services/analysis/dataflows.mli b/src/kernel_services/analysis/dataflows.mli
index 438d16c03b7edb9bd75d39b7d9995cdb4e434c31..7012705485379be75714a54caefe096b1681845b 100644
--- a/src/kernel_services/analysis/dataflows.mli
+++ b/src/kernel_services/analysis/dataflows.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** Implementation of data flow analyses over user-supplied domains. *)
diff --git a/src/kernel_services/analysis/destructors.ml b/src/kernel_services/analysis/destructors.ml
index 47f549d68de9c2501a719700da277292139ba8a6..81f9c24b559d1ef79f6ad02f0d97b37330db65c7 100644
--- a/src/kernel_services/analysis/destructors.ml
+++ b/src/kernel_services/analysis/destructors.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/destructors.mli b/src/kernel_services/analysis/destructors.mli
index d542a1864a09c7d1b7977924cf5ff9f8a5b29096..51d8161dec995579ae8fbfe96bdde7065e27be1c 100644
--- a/src/kernel_services/analysis/destructors.mli
+++ b/src/kernel_services/analysis/destructors.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/dominators.ml b/src/kernel_services/analysis/dominators.ml
index 39422f26293a66b26df46f77a546ffec16e9e89b..8dc4629755e990d31dd5a5fc8e46af27c01a2568 100644
--- a/src/kernel_services/analysis/dominators.ml
+++ b/src/kernel_services/analysis/dominators.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/dominators.mli b/src/kernel_services/analysis/dominators.mli
index 2f99feb45237724615a2631f94c0728fe1befffd..55a4e6129e3c7fdf69f9d6ca006f8161b291d0d7 100644
--- a/src/kernel_services/analysis/dominators.mli
+++ b/src/kernel_services/analysis/dominators.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/exn_flow.ml b/src/kernel_services/analysis/exn_flow.ml
index e7ee6430602f511fd401d1f51f35f733215450b9..6e547143aabd00a7dcdcbb399fd44933c218fd89 100644
--- a/src/kernel_services/analysis/exn_flow.ml
+++ b/src/kernel_services/analysis/exn_flow.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/exn_flow.mli b/src/kernel_services/analysis/exn_flow.mli
index 789486db7ccf3c10b3f71db350ec6379dd95a2cf..28be8874c5a1c773d0baf68a2be2468cab391654 100644
--- a/src/kernel_services/analysis/exn_flow.mli
+++ b/src/kernel_services/analysis/exn_flow.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/field.ml b/src/kernel_services/analysis/filter/field.ml
index d7b53d09c64e66c0cae29340445818ce99432278..05eaaef80fbfdcd31cd43bf89a6fe9024b6d8a36 100644
--- a/src/kernel_services/analysis/filter/field.ml
+++ b/src/kernel_services/analysis/filter/field.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/finite.ml b/src/kernel_services/analysis/filter/finite.ml
index 2799fe8141f66bcd6ac703aaf260ba1d92d74245..1d9de4f743d457ed9ed31e7aab0d7f5b06088b24 100644
--- a/src/kernel_services/analysis/filter/finite.ml
+++ b/src/kernel_services/analysis/filter/finite.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/finite.mli b/src/kernel_services/analysis/filter/finite.mli
index 0e6d08866fb1f1f036437c2deb8a0c079562d2f2..c2a59ffcd03b5d58a966990242d322bf93923592 100644
--- a/src/kernel_services/analysis/filter/finite.mli
+++ b/src/kernel_services/analysis/filter/finite.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/linear.ml b/src/kernel_services/analysis/filter/linear.ml
index 1dd2fc44fd08b4f711c79ff02d00d1a97e57bd37..a07fa11be7842f4e38947d829788d0bf94635b09 100644
--- a/src/kernel_services/analysis/filter/linear.ml
+++ b/src/kernel_services/analysis/filter/linear.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/linear.mli b/src/kernel_services/analysis/filter/linear.mli
index 843b2f969f6b3c8fee5aba3108aad7bcd5e45034..b88f0225752cbb93d07fdcbab154e8155cd60990 100644
--- a/src/kernel_services/analysis/filter/linear.mli
+++ b/src/kernel_services/analysis/filter/linear.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/linear_filter.ml b/src/kernel_services/analysis/filter/linear_filter.ml
index d63f8837d6e955a467fbccaabc57e0c42fe8d9c8..9b81f04289fb298e067e8ba3f77c880d50d1cf5b 100644
--- a/src/kernel_services/analysis/filter/linear_filter.ml
+++ b/src/kernel_services/analysis/filter/linear_filter.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/linear_filter.mli b/src/kernel_services/analysis/filter/linear_filter.mli
index 352c681ada85a88ada7861f43dc93fdb57ea658f..a70ae525b915c040393fd6908f7e41dc401494c4 100644
--- a/src/kernel_services/analysis/filter/linear_filter.mli
+++ b/src/kernel_services/analysis/filter/linear_filter.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/linear_filter_test.ml b/src/kernel_services/analysis/filter/linear_filter_test.ml
index f239d3adbeefad5443c3761cb5adb613c2516253..8b40a6c6f4a8394954b7d9dd5fb67aa35314ce43 100644
--- a/src/kernel_services/analysis/filter/linear_filter_test.ml
+++ b/src/kernel_services/analysis/filter/linear_filter_test.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/linear_filter_test.mli b/src/kernel_services/analysis/filter/linear_filter_test.mli
index e973f651b1aef8f89f6fc9c1e2a110da2801685f..7aa8d66b0203cfd7d52cd6c5c81356656ca7937b 100644
--- a/src/kernel_services/analysis/filter/linear_filter_test.mli
+++ b/src/kernel_services/analysis/filter/linear_filter_test.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/nat.ml b/src/kernel_services/analysis/filter/nat.ml
index 28e197482e85b7fad514d2dcec7c6f425506cee1..fd808501f446e86f37fca9f1415d6eab4fef1832 100644
--- a/src/kernel_services/analysis/filter/nat.ml
+++ b/src/kernel_services/analysis/filter/nat.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/filter/nat.mli b/src/kernel_services/analysis/filter/nat.mli
index 2bc2534b7908e7c65568c5fcd4b4090061e04c7b..16d779b49ae5c9d8dbf03dbc405ddd3d96d8e1d8 100644
--- a/src/kernel_services/analysis/filter/nat.mli
+++ b/src/kernel_services/analysis/filter/nat.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/interpreted_automata.ml b/src/kernel_services/analysis/interpreted_automata.ml
index d63c829b13b33ccf0bf7af0088cbc56e7907873d..4330418f551dae8d41c1d5e7b89fff6f114bb770 100644
--- a/src/kernel_services/analysis/interpreted_automata.ml
+++ b/src/kernel_services/analysis/interpreted_automata.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -123,6 +123,34 @@ module Vertex = Datatype.Make_with_collections
       let pretty fmt v = Format.pp_print_int fmt v.vertex_key
     end)
 
+module Transition = Datatype.Make (struct
+    include Datatype.Serializable_undefined
+    type t = vertex transition
+    let name = "Interpreted_automata.Transition"
+    let reprs = [Skip]
+    let pretty fmt =
+      let open Format in
+      let print_var_list fmt l =
+        Pretty_utils.pp_list ~sep:", " Printer.pp_varinfo fmt l
+      and pretty_kind fmt = function
+        | Invariant -> Format.pp_print_string fmt "Invariant"
+        | Assert -> Format.pp_print_string fmt "Assert"
+        | Assume -> Format.pp_print_string fmt "Assume"
+        | Check -> Format.pp_print_string fmt "Check"
+      in function
+        | Skip -> ()
+        | Return (None,_) -> fprintf fmt "return"
+        | Return (Some exp,_) -> fprintf fmt "return %a" Printer.pp_exp exp
+        | Guard (exp,Then,_) -> Printer.pp_exp fmt exp
+        | Guard (exp,Else,_) -> fprintf fmt "!(%a)" Printer.pp_exp exp
+        | Prop (a,_) ->
+          fprintf fmt "%a: %a"
+            pretty_kind a.kind Printer.pp_identified_predicate a.predicate
+        | Instr (instr,_) -> Printer.pp_instr fmt instr
+        | Enter (b) -> fprintf fmt "Enter %a" print_var_list b.blocals
+        | Leave (b)  -> fprintf fmt "Exit %a" print_var_list b.blocals
+  end)
+
 module Edge =
 struct
   include Datatype.Make_with_collections
@@ -140,7 +168,7 @@ struct
         let equal e1 e2 =
           e1.edge_key = e2.edge_key &&
           Kernel_function.equal e1.edge_kf e2.edge_kf
-        let pretty fmt e = Format.pp_print_int fmt e.edge_key
+        let pretty fmt e = Transition.pretty fmt e.edge_transition
       end)
   let default = dummy_edge
 end
@@ -704,34 +732,41 @@ end
 (* --- Extract exit strategy                                          --- *)
 (* ---------------------------------------------------------------------- *)
 
-let exit_strategy graph component =
-  let head, l = match component with
-    | Wto.Component (v, w) -> v, Wto.Node (v) :: w
-    | Wto.Node (v) -> v, [component]
-  in
-  (* Build a table of vertices that should not be passed through to get
-     a path to an exit. At the begining it only contains the component head. *)
-  let table = Hashtbl.create (G.nb_vertex graph) in
-  Hashtbl.add table head ();
-  (* Filter elements at the top level of the wto, in reverse order *)
-  let rec f acc = function
-    | [] -> acc
-    | Wto.Node v :: l ->
-      if List.for_all (Hashtbl.mem table) (G.succ graph v) then
-        (Hashtbl.add table v (); f acc l)
-      else
-        f (Wto.Node v :: acc) l
-    | Wto.Component (v, w) :: l ->
-      let vertices = v :: Wto.flatten w in (* All vertices of the sub wto *)
-      List.iter (fun v -> Hashtbl.add table v ()) vertices; (* Temporarilly add them *)
-      let succs = List.flatten (List.map (G.succ graph) vertices) in
-      if List.for_all (Hashtbl.mem table) succs then
-        f acc l
-      else (
-        List.iter (Hashtbl.remove table) vertices; (* Undo *)
-        f (Wto.Component (v, w) :: acc) l)
-  in
-  f [] (List.rev l)
+module Algorithms (G : Graph.Sig.G) =
+struct
+  let exit_strategy graph component =
+    let head, l = match component with
+      | Wto.Component (v, w) -> v, Wto.Node (v) :: w
+      | Wto.Node (v) -> v, [component]
+    in
+    (* Build a table of vertices that should not be passed through to get
+       a path to an exit. At the begining it only contains the component head. *)
+    let table = Hashtbl.create (G.nb_vertex graph) in
+    Hashtbl.add table head ();
+    (* Filter elements at the top level of the wto, in reverse order *)
+    let rec f acc = function
+      | [] -> acc
+      | Wto.Node v :: l ->
+        if List.for_all (Hashtbl.mem table) (G.succ graph v) then
+          (Hashtbl.add table v (); f acc l)
+        else
+          f (Wto.Node v :: acc) l
+      | Wto.Component (v, w) :: l ->
+        let vertices = v :: Wto.flatten w in (* All vertices of the sub wto *)
+        List.iter (fun v -> Hashtbl.add table v ()) vertices; (* Temporarilly add them *)
+        let succs = List.flatten (List.map (G.succ graph) vertices) in
+        if List.for_all (Hashtbl.mem table) succs then
+          f acc l
+        else (
+          List.iter (Hashtbl.remove table) vertices; (* Undo *)
+          f (Wto.Component (v, w) :: acc) l)
+    in
+    f [] (List.rev l)
+end
+
+let exit_strategy =
+  let module Algorithms = Algorithms (G) in
+  Algorithms.exit_strategy
 
 
 (* ---------------------------------------------------------------------- *)
@@ -745,43 +780,17 @@ type 'a labeling =
   | `Custom of Format.formatter -> 'a -> unit
   ]
 
-let pretty_kind fmt = function
-  | Invariant -> Format.pp_print_string fmt "Invariant"
-  | Assert -> Format.pp_print_string fmt "Assert"
-  | Assume -> Format.pp_print_string fmt "Assume"
-  | Check -> Format.pp_print_string fmt "Check"
-
-let pretty_transition fmt t =
-  let open Format in
-  let print_var_list fmt l =
-    Pretty_utils.pp_list ~sep:", " Printer.pp_varinfo fmt l
-  in
-  begin match t with
-    | Skip -> ()
-    | Return (None,_) -> fprintf fmt "return"
-    | Return (Some exp,_) -> fprintf fmt "return %a" Printer.pp_exp exp
-    | Guard (exp,Then,_) -> Printer.pp_exp fmt exp
-    | Guard (exp,Else,_) -> fprintf fmt "!(%a)" Printer.pp_exp exp
-    | Prop (a,_) ->
-      fprintf fmt "%a: %a"
-        pretty_kind a.kind Printer.pp_identified_predicate a.predicate
-    | Instr (instr,_) -> Printer.pp_instr fmt instr
-    | Enter (b) -> fprintf fmt "Enter %a" print_var_list b.blocals
-    | Leave (b)  -> fprintf fmt "Exit %a" print_var_list b.blocals
-  end
-
-let pretty_edge fmt t = pretty_transition fmt t.edge_transition
-
-module MakeDot
+module Dot
     (V: sig
-       include Datatype.S_with_collections
+       include Hashtbl.HashedType
+       val pretty: Format.formatter -> t -> unit
        val start_of: t -> stmt option
      end)
-    (G: Graph.Sig.I
-     with type V.t = V.t
-      and type E.t = V.t * V.t edge * V.t
-      and type V.label = V.t
-      and type E.label = V.t edge)
+    (E: sig
+       type t
+       val pretty: Format.formatter -> t -> unit
+     end)
+    (G: Graph.Sig.G with type V.t = V.t and type E.t = V.t * E.t * V.t)
 = struct
 
   let htmllabel fmt =
@@ -822,7 +831,7 @@ module MakeDot
     in
     (* Build vertex attributes and subgraphs from wto if present *)
     let open Graph.Graphviz.DotAttributes in
-    let module Table = V.Hashtbl in
+    let module Table = FCHashtbl.Make (V) in
     let subgraphs = Table.create (G.nb_vertex g) in
     let tag =
       let c = ref 0 in
@@ -872,7 +881,7 @@ module MakeDot
           with Not_found -> None
         let default_edge_attributes _g = []
         let edge_attributes (v1,e,v2) =
-          htmllabel "%a" pretty_edge e ::
+          htmllabel "%a" E.pretty e ::
           if Table.mem subgraphs v1 && Table.mem subgraphs v2 then
             let (_,_,c1,_) = Table.find subgraphs v1 in
             let (_,_,c2,head2) = Table.find subgraphs v2 in
@@ -885,7 +894,7 @@ module MakeDot
 end
 
 module GDot =
-  MakeDot(struct include Vertex let start_of v = v.vertex_start_of end)(G)
+  Dot(struct include Vertex let start_of v = v.vertex_start_of end)(Edge)(G)
 
 let output_to_dot out_channel ?labeling ?wto g =
   GDot.output_to_dot  out_channel ?labeling ?wto g.graph
@@ -1098,10 +1107,10 @@ module UnrollUnnatural  = struct
 
 
   module GDot =
-    MakeDot(struct
+    Dot(struct
       include Version
       let start_of (v,_) = v.vertex_start_of
-    end)(G)
+    end)(Edge)(G)
 
   let output_to_dot out_channel ?labeling ?wto g =
     GDot.output_to_dot  out_channel ?labeling ?wto g
diff --git a/src/kernel_services/analysis/interpreted_automata.mli b/src/kernel_services/analysis/interpreted_automata.mli
index b12dd9c6f0227bd108560e882ad3e8c05f7a195b..9f7eb9bd8126197890c610050b6b332b10a986c6 100644
--- a/src/kernel_services/analysis/interpreted_automata.mli
+++ b/src/kernel_services/analysis/interpreted_automata.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -97,8 +97,6 @@ type 'vertex transition =
 
 and guard_kind = Then | Else
 
-val pretty_transition: vertex transition Pretty_utils.formatter
-
 type 'vertex edge = private {
   edge_kf : Cil_types.kernel_function;
   edge_key : int;
@@ -107,8 +105,6 @@ type 'vertex edge = private {
   edge_loc : location;
 }
 
-val pretty_edge: vertex edge Pretty_utils.formatter
-
 module G : Graph.Sig.I
   with type V.t = vertex
    and  type E.t = vertex * vertex edge * vertex
@@ -287,6 +283,29 @@ module UnrollUnnatural : sig
 end
 
 
+(** Generic versions of the algorithms on dataflow graphs *)
+
+module Algorithms (G : Graph.Sig.G) : sig
+  val exit_strategy : G.t -> G.V.t Wto.component -> G.V.t Wto.partition
+end
+
+module Dot
+    (V: sig
+       include Hashtbl.HashedType
+       val pretty: Format.formatter -> t -> unit
+       val start_of: t -> stmt option
+     end)
+    (E: sig
+       type t
+       val pretty: Format.formatter -> t -> unit
+     end)
+    (G: Graph.Sig.G with type V.t = V.t and type E.t = V.t * E.t * V.t) : sig
+  val output_to_dot :
+    out_channel -> ?labeling:V.t labeling -> ?wto:V.t Wto.partition ->
+    G.t -> unit
+end
+
+
 (** Dataflow computation: simple data-flow analysis using interpreted automata.
     See tests/misc/interpreted_automata_dataflow.ml for a complete example
     using this dataflow computation. *)
diff --git a/src/kernel_services/analysis/logic_deps.ml b/src/kernel_services/analysis/logic_deps.ml
index 58ebef5f16c0ea0fd1ae7e7c92c294efbe1af1d2..1c63dce0dc75107ec85e104ced60da12bd970168 100644
--- a/src/kernel_services/analysis/logic_deps.ml
+++ b/src/kernel_services/analysis/logic_deps.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/logic_deps.mli b/src/kernel_services/analysis/logic_deps.mli
index 3797ef9c37dd165b595fc408f17f4d6af7a561d8..d0db985efe97c93227a17e39c029cbfcf70a5eed 100644
--- a/src/kernel_services/analysis/logic_deps.mli
+++ b/src/kernel_services/analysis/logic_deps.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/loop.ml b/src/kernel_services/analysis/loop.ml
index ffff3f38bb1271ac740439be4ee12187f9f3c249..ccb3fb7429259c600ca5b94f3ff8aed8d6fbf005 100644
--- a/src/kernel_services/analysis/loop.ml
+++ b/src/kernel_services/analysis/loop.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/loop.mli b/src/kernel_services/analysis/loop.mli
index 8005cf584f6c5545f19defdde1febc576164737c..4e9fea4e1e5bdd657025095eb1a95d77c5cd3e23 100644
--- a/src/kernel_services/analysis/loop.mli
+++ b/src/kernel_services/analysis/loop.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/ordered_stmt.ml b/src/kernel_services/analysis/ordered_stmt.ml
index a355ff86a6fca7980a6fba0a636630cf0a42bcb6..0d13a33d429704a922c730f69f99bfac7bd591cb 100644
--- a/src/kernel_services/analysis/ordered_stmt.ml
+++ b/src/kernel_services/analysis/ordered_stmt.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/ordered_stmt.mli b/src/kernel_services/analysis/ordered_stmt.mli
index ff076c19e9ec7658a93cbd3dbf272e0b39e2971e..ac10008784a9dad29031908db813d7d71559da61 100644
--- a/src/kernel_services/analysis/ordered_stmt.mli
+++ b/src/kernel_services/analysis/ordered_stmt.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/service_graph.ml b/src/kernel_services/analysis/service_graph.ml
index b2be47c4a41c7dc8ba18dc34bd4fe7aaf3ad2d77..6e00f14762aa14f0a0fd177577f43ca51fd9f125 100644
--- a/src/kernel_services/analysis/service_graph.ml
+++ b/src/kernel_services/analysis/service_graph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/service_graph.mli b/src/kernel_services/analysis/service_graph.mli
index 4d6b80a94bc245b43b6335964cf13148ad3ba4d9..9487d77faad9edf18a4cb6cfbab29cc6ef7e221f 100644
--- a/src/kernel_services/analysis/service_graph.mli
+++ b/src/kernel_services/analysis/service_graph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/stmts_graph.ml b/src/kernel_services/analysis/stmts_graph.ml
index 7efadadef7645597e36bd50887242fa8836ec8fe..3b8beac54f3834b93be372cac1b4c35dc1667ac2 100644
--- a/src/kernel_services/analysis/stmts_graph.ml
+++ b/src/kernel_services/analysis/stmts_graph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/stmts_graph.mli b/src/kernel_services/analysis/stmts_graph.mli
index 3c0c106ddfa9025d856eaba394de1d94a659b679..df4bf453cc9a87d514ce509f7d90195e38938450 100644
--- a/src/kernel_services/analysis/stmts_graph.mli
+++ b/src/kernel_services/analysis/stmts_graph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/undefined_sequence.ml b/src/kernel_services/analysis/undefined_sequence.ml
index 7f447b56f789835cdf3e58979c895ae1bc88a0e8..292f4560d285566ebac666cbeadb75751777488a 100644
--- a/src/kernel_services/analysis/undefined_sequence.ml
+++ b/src/kernel_services/analysis/undefined_sequence.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/undefined_sequence.mli b/src/kernel_services/analysis/undefined_sequence.mli
index 5d6156c6f5384fbcef7f2acbdb48b3470d729eb1..b27cd719116d690089b0674b6baba5ecaa2690d5 100644
--- a/src/kernel_services/analysis/undefined_sequence.mli
+++ b/src/kernel_services/analysis/undefined_sequence.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/wto_statement.ml b/src/kernel_services/analysis/wto_statement.ml
index 6f247d031d26025155b398bf722c24253ac744f5..7af5790dab8f14606501b47fc6997c296cda9a8d 100644
--- a/src/kernel_services/analysis/wto_statement.ml
+++ b/src/kernel_services/analysis/wto_statement.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/analysis/wto_statement.mli b/src/kernel_services/analysis/wto_statement.mli
index d0386ba5f29c70523051dbc0c2ff3d4802d88576..67c0422bfbd541cae9b5dc6044bcc63600b64b9c 100644
--- a/src/kernel_services/analysis/wto_statement.mli
+++ b/src/kernel_services/analysis/wto_statement.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_building/cil_builder.ml b/src/kernel_services/ast_building/cil_builder.ml
index c5be5ea50a70034ccd074c6fb6ffb33babcae54a..13f288d71dffc8539adf116607fb51fa4e5b4c0e 100644
--- a/src/kernel_services/ast_building/cil_builder.ml
+++ b/src/kernel_services/ast_building/cil_builder.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_building/cil_builder.mli b/src/kernel_services/ast_building/cil_builder.mli
index 3fc834764bf35489b0574c7edca8cb40f2fc3837..fefc42f6df91d9ee732e14b8851890b8ec507a50 100644
--- a/src/kernel_services/ast_building/cil_builder.mli
+++ b/src/kernel_services/ast_building/cil_builder.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/alarms.ml b/src/kernel_services/ast_data/alarms.ml
index 1fbd95cf54409731a14b92c32289277fb255c55b..90da2d64d11eef95d0db9b51cdb6963782a62e09 100644
--- a/src/kernel_services/ast_data/alarms.ml
+++ b/src/kernel_services/ast_data/alarms.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/alarms.mli b/src/kernel_services/ast_data/alarms.mli
index fdb3b567ec95078824a15f287674661da96e5fe9..246199052071f6c30096e7742b17cfc5d1664634 100644
--- a/src/kernel_services/ast_data/alarms.mli
+++ b/src/kernel_services/ast_data/alarms.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/annotations.ml b/src/kernel_services/ast_data/annotations.ml
index a33ba44e4a4086fda409023222c21278420b60db..44e170a706037d3d1d0a4f36b195dba00521578a 100644
--- a/src/kernel_services/ast_data/annotations.ml
+++ b/src/kernel_services/ast_data/annotations.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/annotations.mli b/src/kernel_services/ast_data/annotations.mli
index 17b568e01cc5bd05ed5fa572b5532a6d8deb2410..628d7f690491c15236bfe18b28a69d7e4826c584 100644
--- a/src/kernel_services/ast_data/annotations.mli
+++ b/src/kernel_services/ast_data/annotations.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -228,24 +228,24 @@ val iter_behaviors:
   (funbehavior -> unit) -> kernel_function -> unit
 (** Iter on the behaviors of the given kernel function.
     @since Fluorine-20130401
-    @before Frama-C+dev previous version was behaving as
+    @before 29.0-Copper previous version was behaving as
     {!iter_behaviors_by_emitter} *)
 
 val fold_behaviors:
   (funbehavior -> 'a -> 'a) -> kernel_function -> 'a -> 'a
 (** Fold on the behaviors of the given kernel function.
-    @before Frama-C+dev previous version was behaving as
+    @before 29.0-Copper previous version was behaving as
     {!fold_behaviors_by_emitter} *)
 
 val iter_behaviors_by_emitter:
   (Emitter.t -> funbehavior -> unit) -> kernel_function -> unit
 (** Iter on the behaviors, for each emitter, of the given kernel function.
-    @since Frama-C+dev *)
+    @since 29.0-Copper *)
 
 val fold_behaviors_by_emitter:
   (Emitter.t -> funbehavior -> 'a -> 'a) -> kernel_function -> 'a -> 'a
 (** Fold on the behaviors, for each emitter, of the given kernel function.
-    @since Frama-C+dev *)
+    @since 29.0-Copper *)
 
 val iter_complete:
   (Emitter.t -> string list -> unit) -> kernel_function -> unit
diff --git a/src/kernel_services/ast_data/ast.ml b/src/kernel_services/ast_data/ast.ml
index a82bc9dcb91442b46af1cffba408f9872b1be578..0efd2a914145390064e50e7cec3d46b5cf62188d 100644
--- a/src/kernel_services/ast_data/ast.ml
+++ b/src/kernel_services/ast_data/ast.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/ast.mli b/src/kernel_services/ast_data/ast.mli
index 91af6eee3877c09136f9eaba81cae42a4e183693..8895a2a803d9c93b539c0bbde054852b033cf3a9 100644
--- a/src/kernel_services/ast_data/ast.mli
+++ b/src/kernel_services/ast_data/ast.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/cil_types.ml b/src/kernel_services/ast_data/cil_types.ml
index af831a23c675d94768ad7bace30206f7d9276cb0..aa3daab36e81dd122dbacefe4d25bf289e79b2a0 100644
--- a/src/kernel_services/ast_data/cil_types.ml
+++ b/src/kernel_services/ast_data/cil_types.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** The Abstract Syntax of CIL.
diff --git a/src/kernel_services/ast_data/globals.ml b/src/kernel_services/ast_data/globals.ml
index a00dfdb4662fc5738fd63fb21504f599f8e3b96d..00b99c33f22c9b067e2a3413463557b9de2ca8b8 100644
--- a/src/kernel_services/ast_data/globals.ml
+++ b/src/kernel_services/ast_data/globals.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/globals.mli b/src/kernel_services/ast_data/globals.mli
index 940b83e14bc1ad2c740de4739f32ab66e9306339..3cca4aa443212ca46be4adbbae79338d1d2021ee 100644
--- a/src/kernel_services/ast_data/globals.mli
+++ b/src/kernel_services/ast_data/globals.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/kernel_function.ml b/src/kernel_services/ast_data/kernel_function.ml
index 64b0286d4a82c8f010c03b35e7adfa1fb0c34e82..cf77f0439392beb1154edd9001b49c8df132b91b 100644
--- a/src/kernel_services/ast_data/kernel_function.ml
+++ b/src/kernel_services/ast_data/kernel_function.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/kernel_function.mli b/src/kernel_services/ast_data/kernel_function.mli
index 223ce2eef90b24686e30c1db415038599cc3ae92..c7017e3421b8ad57fea641653be18d3564220930 100644
--- a/src/kernel_services/ast_data/kernel_function.mli
+++ b/src/kernel_services/ast_data/kernel_function.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/property.ml b/src/kernel_services/ast_data/property.ml
index b2a6b81c89d2c60913d947393d01d3cf34b958c2..4789db180f66dcdf1ec164bde8bea36fa34bbfa3 100644
--- a/src/kernel_services/ast_data/property.ml
+++ b/src/kernel_services/ast_data/property.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/property.mli b/src/kernel_services/ast_data/property.mli
index 1fc7d1d7ddedf6fc0a71f34cf136dbb33d30c2d6..90d5044211b9ed9383c2cc9e4f3b3b10ad8402b0 100644
--- a/src/kernel_services/ast_data/property.mli
+++ b/src/kernel_services/ast_data/property.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -508,14 +508,14 @@ val get_kf: identified_property -> kernel_function option
 val get_ir: identified_property -> identified_reachable
 (** For a given property, returns its corresponding [kernel_function], [kinstr]
     and program point.
-    @since Frama-C+dev *)
+    @since 29.0-Copper *)
 
 val get_prog_state: identified_property -> identified_reachable
 (** Uses [get_ir]. If [ir_kf] is [Some kf] and [ir_kinstr] is
     [Kglobal], we try to attach a statement depending on [ir_program_point] :
     the first statement of [kf] for [Before], the return statement of kf for
     [After].
-    @since Frama-C+dev *)
+    @since 29.0-Copper *)
 
 val get_behavior: identified_property -> funbehavior option
 val get_names: identified_property -> string list
diff --git a/src/kernel_services/ast_data/property_status.ml b/src/kernel_services/ast_data/property_status.ml
index 84e7344d83f1af74440c3bc0ec2f9769f8c77a0a..9edd052f73c7d3b92e52182c388f71f2313f4ae0 100644
--- a/src/kernel_services/ast_data/property_status.ml
+++ b/src/kernel_services/ast_data/property_status.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/property_status.mli b/src/kernel_services/ast_data/property_status.mli
index ae4bec8424330e57a20d14eace6c1df68e175bc6..50f1d2e243d623914852fb08312c055f27bc53c4 100644
--- a/src/kernel_services/ast_data/property_status.mli
+++ b/src/kernel_services/ast_data/property_status.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/statuses_by_call.ml b/src/kernel_services/ast_data/statuses_by_call.ml
index 5af0893cbc75ac15af59b33abd24af7ced016b96..f79dbc2f0ac4ef9cf6c2afdae33146a814a7ab73 100644
--- a/src/kernel_services/ast_data/statuses_by_call.ml
+++ b/src/kernel_services/ast_data/statuses_by_call.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_data/statuses_by_call.mli b/src/kernel_services/ast_data/statuses_by_call.mli
index 0d313fb4364ceab7502e624212833a73db69a588..e4b4ec860254cfaa1dc6566d1f1953e5dc8843e8 100644
--- a/src/kernel_services/ast_data/statuses_by_call.mli
+++ b/src/kernel_services/ast_data/statuses_by_call.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/cabs_debug.ml b/src/kernel_services/ast_printing/cabs_debug.ml
index 73ca361655af50be9ebb07e75942df5d062e32c9..ce7e22042261fa1652328a58eb02fbddadc24b9b 100644
--- a/src/kernel_services/ast_printing/cabs_debug.ml
+++ b/src/kernel_services/ast_printing/cabs_debug.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/cabs_debug.mli b/src/kernel_services/ast_printing/cabs_debug.mli
index fae397a8850f2ce27a1d687664d2032fe7faefe5..f41c3b1b620ff1f4659927d6921b9ec7bfb72e38 100644
--- a/src/kernel_services/ast_printing/cabs_debug.mli
+++ b/src/kernel_services/ast_printing/cabs_debug.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/cil_descriptive_printer.ml b/src/kernel_services/ast_printing/cil_descriptive_printer.ml
index 9aad492989c67bb9d97ea6b6f50f2fd532419c83..096e4de12aaa31a31c966ba6f0876446a1536f42 100644
--- a/src/kernel_services/ast_printing/cil_descriptive_printer.ml
+++ b/src/kernel_services/ast_printing/cil_descriptive_printer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/cil_descriptive_printer.mli b/src/kernel_services/ast_printing/cil_descriptive_printer.mli
index 99837067aea5944c79098fae25f4a95739291a89..6b20678afb372b010f0b753dc6ead8f8526c97cd 100644
--- a/src/kernel_services/ast_printing/cil_descriptive_printer.mli
+++ b/src/kernel_services/ast_printing/cil_descriptive_printer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/cil_printer.ml b/src/kernel_services/ast_printing/cil_printer.ml
index cf4e8133a8752c34cff9882a3dd2bcb23e09fe14..0f1baeb7c2027fd32ee8f90aeb75ee9cc6f9145f 100644
--- a/src/kernel_services/ast_printing/cil_printer.ml
+++ b/src/kernel_services/ast_printing/cil_printer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -341,14 +341,15 @@ module Precedence = struct
     | Const _ -> 0                        (* Constants *)
 
   let rec getParenthLevelLogic = function
-    | Trange _ -> upperLevel
     | Tlambda _ | Tlet _ -> binderLevel
-    | TBinOp(LAnd, _,_) -> and_level
+    | Tif (_, _, _)  -> questionLevel
     | TBinOp(LOr, _,_) -> or_level
+    | TBinOp(LAnd, _,_) -> and_level
     (* Bit operations. *)
     | TBinOp((BOr|BXor|BAnd),_,_) -> bitwiseLevel
     | Tapp({ l_var_info },[],[_;_])
-      when l_var_info.lv_name = "\\concat" -> bitwiseLevel
+      when l_var_info.lv_name = "\\repeat" || l_var_info.lv_name = "\\concat" ->
+      bitwiseLevel
     (* Comparisons *)
     | TBinOp((Eq|Ne|Gt|Lt|Ge|Le),_,_) -> comparativeLevel
     (* Additive. Shifts can have higher level than + or - but I want parentheses
@@ -357,8 +358,6 @@ module Precedence = struct
               PlusPI|Shiftlt|Shiftrt),_,_) -> additiveLevel
     (* Multiplicative *)
     | TBinOp((Div|Mod|Mult),_,_) -> multiplicativeLevel
-    | Tapp({ l_var_info },[],[_;_])
-      when l_var_info.lv_name = "\\repeat" -> bitwiseLevel
     (* Unary *)
     | TCast(false,_,_)
     | TAddrOf(_)
@@ -377,12 +376,14 @@ module Precedence = struct
     | Tblock_length _ | Tbase_addr _ | Toffset _ | Tat (_, _)
     | Tunion _ | Tinter _
     | TUpdate _ | Ttypeof _ | Ttype _ -> applicationLevel
+    | TCast (true,_,e) -> (getParenthLevelLogic e.term_node) + 1
     | TLval(TVar _, TNoOffset) -> 0        (* Plain variables *)
+    (* Trange always requires parenthesis, except inside indexes. These cases
+       are handled in [term_node] and [term_offset] functions. *)
+    | Trange _ -> 0
     (* Constructions that do not require parentheses *)
     | TConst _
     | Tnull | TLval (TResult _,TNoOffset) | Tcomprehension _  | Tempty_set -> 0
-    | Tif (_, _, _)  -> questionLevel
-    | TCast (true,_,e) -> (getParenthLevelLogic e.term_node) + 1
 
   (* Create an expression of the same shape, and use {!getParenthLevel} *)
   let getParenthLevelAttrParam = function
@@ -2436,7 +2437,7 @@ class cil_printer () = object (self)
     begin match t.term_name with
       | [] -> self#term_node fmt t
       | _ :: _ ->
-        fprintf fmt "(@[%a:@ %a@])"
+        fprintf fmt "(@[<2>%a:@ %a@])"
           (Pretty_utils.pp_list ~sep:":@ " self#name) t.term_name
           self#term_node t
     end;
@@ -2517,6 +2518,14 @@ class cil_printer () = object (self)
         self#term_binop LAnd
         self#tand_list l
 
+  method private range fmt (low, high) =
+    let pp_opt = Pretty_utils.pp_opt ~pre:"" ~suf:"" in
+    fprintf fmt "@[%a..%a@]"
+      (pp_opt
+         (fun fmt v -> Format.fprintf fmt "%a " (self#term_prec Precedence.upperLevel) v)) low
+      (pp_opt
+         (fun fmt v -> Format.fprintf fmt "@ %a" (self#term_prec Precedence.upperLevel) v)) high;
+
   method term_node fmt t =
     let current_level = Precedence.getParenthLevelLogic t.term_node in
     let term = self#term_prec current_level in
@@ -2631,11 +2640,7 @@ class cil_printer () = object (self)
         (Pretty_utils.pp_opt
            (fun fmt p -> fprintf fmt ";@ %a" self#predicate p)) p
     | Trange(low,high) ->
-      fprintf fmt "@[%a..%a@]"
-        (Pretty_utils.pp_opt
-           (fun fmt v -> Format.fprintf fmt "%a " term v)) low
-        (Pretty_utils.pp_opt
-           (fun fmt v -> Format.fprintf fmt "@ %a" term v)) high;
+      fprintf fmt "(%a)" self#range (low, high)
     | Tlet(def,body) ->
       assert
         (Kernel.verify (def.l_labels = [])
@@ -2699,6 +2704,17 @@ class cil_printer () = object (self)
       fprintf fmt ".%a%a" self#field fi self#term_offset o
     | TModel (mi,o) ->
       fprintf fmt ".%a%a" self#model_field mi self#term_offset o
+    | TIndex({term_node = Trange(low,high); term_name; _},o) ->
+      (* Make sure range names are printed (as in [self#term]). *)
+      let aux fmt () =
+        match term_name with
+        | [] -> self#range fmt (low, high)
+        | _ :: _ ->
+          fprintf fmt "@[<2>%a:@ (%a)@]"
+            (Pretty_utils.pp_list ~sep:":@ " self#name) term_name
+            self#range (low, high)
+      in
+      fprintf fmt "[%a]%a" aux () self#term_offset o
     | TIndex(e,o) -> fprintf fmt "[%a]%a" self#term e self#term_offset o
 
   method term_lhost fmt (lh:term_lhost) =
diff --git a/src/kernel_services/ast_printing/cil_printer.mli b/src/kernel_services/ast_printing/cil_printer.mli
index da8d631bd98c67f4faf765f79e409c2011fb1229..a710c1d66e6f3f8b632a13f81fabffaa089678f9 100644
--- a/src/kernel_services/ast_printing/cil_printer.mli
+++ b/src/kernel_services/ast_printing/cil_printer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/cil_types_debug.ml b/src/kernel_services/ast_printing/cil_types_debug.ml
index a452c07e658e829a69867386a165711590eac7bb..05b20100bcd7fc590286082dd44ea4601035536d 100644
--- a/src/kernel_services/ast_printing/cil_types_debug.ml
+++ b/src/kernel_services/ast_printing/cil_types_debug.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/cil_types_debug.mli b/src/kernel_services/ast_printing/cil_types_debug.mli
index 3a0fbb3d918b1e8d9d78df11e43f00402124e726..7998dfb1d740497012a2c0be2ec4583b55d22937 100644
--- a/src/kernel_services/ast_printing/cil_types_debug.mli
+++ b/src/kernel_services/ast_printing/cil_types_debug.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/cprint.ml b/src/kernel_services/ast_printing/cprint.ml
index b9de6911561698d1a951e2be6a7ae506f4002e59..726864b24c343e33238b37d8701b6025d170fc30 100644
--- a/src/kernel_services/ast_printing/cprint.ml
+++ b/src/kernel_services/ast_printing/cprint.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* cprint -- pretty printer of C program from abstract syntax
diff --git a/src/kernel_services/ast_printing/cprint.mli b/src/kernel_services/ast_printing/cprint.mli
index 448ad7258a1bdf7ad844ecce487220b76dd30f6c..9c1c948629a450000748df3e3a664e04a1d490ee 100644
--- a/src/kernel_services/ast_printing/cprint.mli
+++ b/src/kernel_services/ast_printing/cprint.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** Printers for the Cabs AST *)
diff --git a/src/kernel_services/ast_printing/description.ml b/src/kernel_services/ast_printing/description.ml
index 1f56133bb6710db8353a941b24e6f782f1c81acc..53d007c1f2dc87132ae953d738b5068e3faa4a0d 100644
--- a/src/kernel_services/ast_printing/description.ml
+++ b/src/kernel_services/ast_printing/description.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/description.mli b/src/kernel_services/ast_printing/description.mli
index fbb3e7c088d1849ab573cb0430e3e813e2f7679f..46c80a3376080eedc4fad1d2e151ca4077d2e8b1 100644
--- a/src/kernel_services/ast_printing/description.mli
+++ b/src/kernel_services/ast_printing/description.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/logic_print.ml b/src/kernel_services/ast_printing/logic_print.ml
index 17808d4c97039c9bd102910256457a3cb19d3eba..8eb0730f39d8f72b13c4bec441b2b97e141ab92c 100644
--- a/src/kernel_services/ast_printing/logic_print.ml
+++ b/src/kernel_services/ast_printing/logic_print.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_printing/logic_print.mli b/src/kernel_services/ast_printing/logic_print.mli
index e0f9e6a4b0a8fbd574a53d366a26f857bd13a854..eb0cf3082887a671bd02821e68be1c2212d5c712 100644
--- a/src/kernel_services/ast_printing/logic_print.mli
+++ b/src/kernel_services/ast_printing/logic_print.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_printing/printer.ml b/src/kernel_services/ast_printing/printer.ml
index 5285e633a715d7e2ae47ef870b178601bbe4da6f..7c50dafb7adbc9f6fec297c626b63d1495ef7077 100644
--- a/src/kernel_services/ast_printing/printer.ml
+++ b/src/kernel_services/ast_printing/printer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/printer.mli b/src/kernel_services/ast_printing/printer.mli
index 4ac76c058eb1bb898a5201fd8838e65f0295324d..5222be7f2a8e4bf65f08eefd34827a727a1cbaa6 100644
--- a/src/kernel_services/ast_printing/printer.mli
+++ b/src/kernel_services/ast_printing/printer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/printer_api.ml b/src/kernel_services/ast_printing/printer_api.ml
index 8762c2688e1e70f6880b00ca84580b8329a938df..7a83f84d9d6c0059e118960feb089285f677611c 100644
--- a/src/kernel_services/ast_printing/printer_api.ml
+++ b/src/kernel_services/ast_printing/printer_api.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/printer_builder.ml b/src/kernel_services/ast_printing/printer_builder.ml
index 7a2dda14c7cfc896bd9334f0a69d4645338eaafc..41f146aca83b654c09956566440657669f7834a5 100644
--- a/src/kernel_services/ast_printing/printer_builder.ml
+++ b/src/kernel_services/ast_printing/printer_builder.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/printer_builder.mli b/src/kernel_services/ast_printing/printer_builder.mli
index 9a817d00604b8e118cef89907d486b992f54e64d..328509b03a00ce6726b675c30fd8fcc8851b86d3 100644
--- a/src/kernel_services/ast_printing/printer_builder.mli
+++ b/src/kernel_services/ast_printing/printer_builder.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/printer_tag.ml b/src/kernel_services/ast_printing/printer_tag.ml
index c7426ea39503228914fa76db8c3d137150584257..b849b8f00b613b59d8d9d04d9e29bbbeb10fde06 100644
--- a/src/kernel_services/ast_printing/printer_tag.ml
+++ b/src/kernel_services/ast_printing/printer_tag.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_printing/printer_tag.mli b/src/kernel_services/ast_printing/printer_tag.mli
index d6cc26b363816df680ba8040903de942ab879f43..1deb8cf729085cf49dedb33b87e0c6aba8799db4 100644
--- a/src/kernel_services/ast_printing/printer_tag.mli
+++ b/src/kernel_services/ast_printing/printer_tag.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/acsl_extension.ml b/src/kernel_services/ast_queries/acsl_extension.ml
index 531cf8474504001994f5b096c92b6f86f3b72efe..5b75815f9c2bc165e44e407e5c74764a7b86222e 100644
--- a/src/kernel_services/ast_queries/acsl_extension.ml
+++ b/src/kernel_services/ast_queries/acsl_extension.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -37,6 +37,24 @@ type extension_visitor =
 type extension_printer =
   Printer_api.extensible_printer_type -> Format.formatter ->
   acsl_extension_kind -> unit
+type extension_same =
+  acsl_extension_kind -> acsl_extension_kind -> Ast_diff.is_same_env -> bool
+
+type register_extension =
+  plugin:string -> string ->
+  ?preprocessor:extension_preprocessor -> extension_typer ->
+  ?visitor:extension_visitor ->
+  ?printer:extension_printer -> ?short_printer:extension_printer ->
+  ?is_same_ext:extension_same -> bool ->
+  unit
+
+type register_extension_block =
+  plugin: string -> string ->
+  ?preprocessor:extension_preprocessor_block -> extension_typer_block ->
+  ?visitor:extension_visitor ->
+  ?printer:extension_printer -> ?short_printer:extension_printer ->
+  ?is_same_ext:extension_same -> bool -> unit
+
 type extension_single = {
   preprocessor: extension_preprocessor ;
   typer: extension_typer ;
@@ -53,6 +71,7 @@ type extension_common = {
   printer: extension_printer ;
   short_printer: extension_printer ;
   plugin: string;
+  is_same_ext: extension_same;
 }
 
 let default_printer printer fmt = function
@@ -64,6 +83,19 @@ let default_printer printer fmt = function
 
 let default_short_printer name _printer fmt _ext_kind = Format.fprintf fmt "%s" name
 
+let rec default_is_same_ext ext1 ext2 env =
+  match ext1, ext2 with
+  | Ext_id n1, Ext_id n2 -> n1 = n2
+  | Ext_terms l1, Ext_terms l2 ->
+    Ast_diff.is_same_list Ast_diff.is_same_term l1 l2 env
+  | Ext_preds l1, Ext_preds l2 ->
+    Ast_diff.is_same_list Ast_diff.is_same_predicate l1 l2 env
+  | Ext_annot(s1,l1), Ext_annot(s2,l2) ->
+    s1 = s2 && Ast_diff.is_same_list default_is_same_ext_kind l1 l2 env
+  | (Ext_id _ | Ext_terms _ | Ext_preds _ | Ext_annot _), _ -> false
+and default_is_same_ext_kind ext1 ext2 env =
+  default_is_same_ext ext1.ext_kind ext2.ext_kind env
+
 let make
     ~plugin
     name category
@@ -72,9 +104,10 @@ let make
     ?(visitor=fun _ _ -> Cil.DoChildren)
     ?(printer=default_printer)
     ?(short_printer=default_short_printer name)
+    ?(is_same_ext=default_is_same_ext)
     status : extension_single*extension_common =
   { preprocessor; typer; status},
-  { category; visitor; printer; short_printer; plugin }
+  { category; visitor; printer; short_printer; plugin; is_same_ext }
 
 let make_block
     ~plugin
@@ -84,9 +117,10 @@ let make_block
     ?(visitor=fun _ _ -> Cil.DoChildren)
     ?(printer=default_printer)
     ?(short_printer=default_short_printer name)
+    ?(is_same_ext=default_is_same_ext)
     status : extension_block*extension_common =
   { preprocessor; typer; status},
-  { category; visitor; printer; short_printer; plugin }
+  { category; visitor; printer; short_printer; plugin; is_same_ext }
 
 module Extensions = struct
   (*hash table for  category, visitor, printer and short_printer of extensions*)
@@ -119,10 +153,10 @@ module Extensions = struct
   let is_extension_block = Hashtbl.mem ext_block_tbl
 
   let register cat ~plugin name
-      ?preprocessor typer ?visitor ?printer ?short_printer status =
+      ?preprocessor typer ?visitor ?printer ?short_printer ?is_same_ext status =
     let info1,info2 =
       make ~plugin name cat ?preprocessor typer
-        ?visitor ?printer ?short_printer status
+        ?visitor ?printer ?short_printer ?is_same_ext status
     in
     if is_extension name then
       Kernel.warning ~wkey:Kernel.wkey_acsl_extension
@@ -135,10 +169,10 @@ module Extensions = struct
       end
 
   let register_block cat ~plugin name
-      ?preprocessor typer ?visitor ?printer ?short_printer status =
+      ?preprocessor typer ?visitor ?printer ?short_printer ?is_same_ext status =
     let info1,info2 =
       make_block ~plugin name cat ?preprocessor typer
-        ?visitor ?printer ?short_printer status
+        ?visitor ?printer ?short_printer ?is_same_ext status
     in
     if is_extension name then
       Kernel.warning ~wkey:Kernel.wkey_acsl_extension
@@ -207,6 +241,10 @@ module Extensions = struct
     let pp = (find_common name).short_printer in
     Format.fprintf fmt "%a" (pp printer) kind
 
+  let is_same_ext name ext1 ext2 =
+    let is_same = (find_common name).is_same_ext in
+    is_same ext1 ext2
+
   let extension_from name = (find_common name).plugin
 end
 
@@ -245,4 +283,6 @@ let () =
     ~visit: Extensions.visit ;
   Cil_printer.set_extension_handler
     ~print: Extensions.print
-    ~short_print:Extensions.short_print
+    ~short_print:Extensions.short_print;
+  Ast_diff.set_extension_diff
+    ~is_same_ext: Extensions.is_same_ext
diff --git a/src/kernel_services/ast_queries/acsl_extension.mli b/src/kernel_services/ast_queries/acsl_extension.mli
index bfa774c28deecd40fe1a215f3e431e95c3b933bd..05fc80c89312da72e64f2edaedacae7a9aefd5c9 100644
--- a/src/kernel_services/ast_queries/acsl_extension.mli
+++ b/src/kernel_services/ast_queries/acsl_extension.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -51,11 +51,15 @@ type extension_printer =
   Printer_api.extensible_printer_type -> Format.formatter ->
   acsl_extension_kind -> unit
 
+(** type of functions that compare two extensions (with the same keyword)
+    to decide if they're identical or not. See {!Ast_diff} for more information.
+    @since 29.0-Copper
+*)
+type extension_same =
+  acsl_extension_kind -> acsl_extension_kind -> Ast_diff.is_same_env -> bool
 
-(** [register_behavior
-      ~plugin name ~preprocessor typer ~visitor ~printer ~short_printer status]
-    registers new ACSL extension to be used in function contracts with name
-    [name] and plugin [plugin].
+(** type of functions that register new ACSL extensions to be used in place of
+    various kinds of ACSL annotations.
 
     The labelled parameter [plugin] is used to specify which plugin registers
     this new extension. It can be used, together with the syntax
@@ -84,6 +88,11 @@ type extension_printer =
     behavior for the ACSL extension. By default, it just prints the [name]. It
     is for example used for the filetree in the GUI.
 
+    The optional [is_same_ext] parameter allows checking whether two versions
+    of the extended annotation are identical or not during a run of
+    {!Ast_diff.compare_ast}. By default, [Ast_diff] will compare the lists
+    of terms/predicates.
+
     The [status] indicates whether the extension can be assigned a property
     status or not.
 
@@ -100,89 +109,47 @@ type extension_printer =
       | [] -> let id = !count in incr count; Ext_id id
       | _ -> typing_context.error loc "expecting a predicate after keyword FOO"
     let () =
-      Acsl_extension.register_behavior ~pugin:"myplugin" "FOO" foo_typer false
+      Acsl_extension.register_behavior ~plugin:"myplugin" "FOO" foo_typer false
     ]
-    @before Frama-C+dev the parameter [plugin] was not present
+    @before 29.0-Copper parameters [plugin] and [is_same_ext] were not present
     @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
 *)
-val register_behavior:
+type register_extension =
   plugin:string -> string ->
   ?preprocessor:extension_preprocessor -> extension_typer ->
   ?visitor:extension_visitor ->
-  ?printer:extension_printer -> ?short_printer:extension_printer -> bool ->
+  ?printer:extension_printer -> ?short_printer:extension_printer ->
+  ?is_same_ext:extension_same -> bool ->
   unit
 
-(** Registers extension for global annotation. See {!register_behavior}.
-
-    @before Frama-C+dev the parameter [plugin] was not present
-    @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
-*)
-val register_global:
-  plugin:string -> string ->
-  ?preprocessor:extension_preprocessor -> extension_typer ->
-  ?visitor:extension_visitor ->
-  ?printer:extension_printer -> ?short_printer:extension_printer -> bool ->
-  unit
-
-(** Registers extension for global block annotation. See {!register_behavior}.
-
-    @before Frama-C+dev the parameter [plugin] was not present
-    @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
-*)
-val register_global_block:
-  plugin:string -> string ->
+(** same as {!register_extension}, but for extensions that parse an axiomatic
+    block, resulting in a {!Cil_types.Ext_annot}. *)
+type register_extension_block =
+  plugin: string -> string ->
   ?preprocessor:extension_preprocessor_block -> extension_typer_block ->
   ?visitor:extension_visitor ->
-  ?printer:extension_printer -> ?short_printer:extension_printer -> bool ->
-  unit
-
-(** Registers extension for code annotation to be evaluated at _current_
-    program point. See {!register_behavior}.
+  ?printer:extension_printer -> ?short_printer:extension_printer ->
+  ?is_same_ext:extension_same -> bool -> unit
 
-    @before Frama-C+dev the parameter [plugin] was not present
-    @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
-*)
-val register_code_annot:
-  plugin:string -> string ->
-  ?preprocessor:extension_preprocessor -> extension_typer ->
-  ?visitor:extension_visitor ->
-  ?printer:extension_printer -> ?short_printer:extension_printer -> bool ->
-  unit
+(** Register a behavior extension, i.e. new clauses of contracts *)
+val register_behavior: register_extension
 
-(** Registers extension for code annotation to be evaluated for the _next_
-    statement. See {!register_behavior}.
+(** Register extension for global annotation. *)
+val register_global: register_extension
 
-    @before Frama-C+dev the parameter [plugin] was not present
-    @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
-*)
-val register_code_annot_next_stmt:
-  plugin:string -> string ->
-  ?preprocessor:extension_preprocessor -> extension_typer ->
-  ?visitor:extension_visitor ->
-  ?printer:extension_printer -> ?short_printer:extension_printer -> bool ->
-  unit
+(** Registers extension for global block annotation. *)
+val register_global_block: register_extension_block
 
-(** Registers extension for loop annotation. See {!register_behavior}.
+(** Registers extension for code annotation to be evaluated at _current_
+    program point. *)
+val register_code_annot: register_extension
 
-    @before Frama-C+dev the parameter [plugin] was not present
-    @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
-*)
-val register_code_annot_next_loop:
-  plugin:string -> string ->
-  ?preprocessor:extension_preprocessor -> extension_typer ->
-  ?visitor:extension_visitor ->
-  ?printer:extension_printer -> ?short_printer:extension_printer -> bool ->
-  unit
+(** Registers extension for code annotation to be evaluated for the _next_
+    statement. *)
+val register_code_annot_next_stmt: register_extension
 
-(** Registers extension both for code and loop annotations.
-    See {!register_behavior}.
+(** Registers extension for loop annotation. *)
+val register_code_annot_next_loop: register_extension
 
-    @before Frama-C+dev the parameter [plugin] was not present
-    @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
-*)
-val register_code_annot_next_both:
-  plugin:string -> string ->
-  ?preprocessor:extension_preprocessor -> extension_typer ->
-  ?visitor:extension_visitor ->
-  ?printer:extension_printer -> ?short_printer:extension_printer -> bool ->
-  unit
+(** Registers extension both for code and loop annotations. *)
+val register_code_annot_next_both: register_extension
diff --git a/src/kernel_services/ast_queries/ast_diff.ml b/src/kernel_services/ast_queries/ast_diff.ml
index d5d4be2b0deef73be005da9d3116789304d06264..af74c4dd1fe05e464c10874b8088be4c8f54379a 100644
--- a/src/kernel_services/ast_queries/ast_diff.ml
+++ b/src/kernel_services/ast_queries/ast_diff.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -195,6 +195,17 @@ type is_same_env =
     enumitem: enumitem Cil_datatype.Enumitem.Map.t;
   }
 
+let is_same_acsl_extension_kind:
+  (string->acsl_extension_kind->acsl_extension_kind->is_same_env->bool) ref
+  = Extlib.mk_fun "Ast_diff.is_same_acsl_extension"
+
+let set_extension_diff ~is_same_ext =
+  is_same_acsl_extension_kind := is_same_ext
+
+let is_same_acsl_extension ext1 ext2 env =
+  ext1.ext_name = ext2.ext_name &&
+  !is_same_acsl_extension_kind ext1.ext_name ext1.ext_kind ext2.ext_kind env
+
 module type Correspondence_table = sig
   include State_builder.Hashtbl
   val pretty_data: Format.formatter -> data -> unit
@@ -257,6 +268,9 @@ let make_correspondence candidate has_same_spec code_corres =
   | true, ((`Body_changed|`Callees_changed) as c) ->
     `Partial(candidate, c)
 
+let make_body_correspondence has_same_spec code_corres =
+  if has_same_spec then code_corres else `Body_changed
+
 let (&&>) (res,env) f =
   match res with
   | `Body_changed -> `Body_changed, env
@@ -693,9 +707,8 @@ and is_same_behavior b b' env =
   is_same_list is_same_identified_predicate b.b_assumes b'.b_assumes env &&
   is_same_list is_same_post_cond b.b_post_cond b'.b_post_cond env &&
   is_same_assigns b.b_assigns b'.b_assigns env &&
-  is_same_allocation b.b_allocation b'.b_allocation env
-(* TODO: also consider ACSL extensions, with the help of the plugins
-   that handle them. *)
+  is_same_allocation b.b_allocation b'.b_allocation env &&
+  is_same_list is_same_acsl_extension b.b_extended b'.b_extended env
 
 and is_same_variant (v,m) (v',m') env =
   is_same_term v v' env && is_same_opt is_matching_logic_info m m' env
@@ -757,7 +770,10 @@ and is_same_code_annotation a a' env =
   | AAllocation(bhvs, a), AAllocation(bhvs',a') ->
     is_same_behavior_set bhvs bhvs' && is_same_allocation a a' env
   | APragma p, APragma p' -> is_same_pragma p p' env
-  | AExtended _, AExtended _ -> true (*TODO: checks also for extended clauses*)
+  | AExtended (bhvs, is_next, ext),
+    AExtended (bhvs', is_next', ext') ->
+    is_same_behavior_set bhvs bhvs' && is_next = is_next' &&
+    is_same_acsl_extension ext ext' env
   | (AAssert _ | AStmtSpec _ | AInvariant _ | AVariant _ | AAssigns _
     | AAllocation _ | APragma _ | AExtended _), _ -> false
 
@@ -1151,8 +1167,9 @@ and is_same_stmt s s' env =
         | _ -> `Body_changed, env
       end else `Body_changed, env
   in
-  let res = make_correspondence s' annot_res code_res in
-  Stmt.add s res; code_res, env
+  let corres = make_correspondence s' annot_res code_res in
+  let res = make_body_correspondence annot_res code_res in
+  Stmt.add s corres; res, env
 
 (* is_same_block will return its modified environment in order
    to update correspondence table with respect to locals, in case
@@ -1532,9 +1549,8 @@ let rec gannot_correspondence =
     ignore (logic_info_correspondence ~loc li empty_env)
   | Dmodel_annot (mi,loc) ->
     ignore (model_info_correspondence ~loc mi)
-  | Dextended _ -> ()
-(* TODO: provide mechanism for extension themselves
-   to give relevant information. *)
+  | Dextended _ -> () (* TODO: as for lemmas, we don't really have a structure
+                         where to look for a matching extended annotation. *)
 
 let global_correspondence g =
   match g with
diff --git a/src/kernel_services/ast_queries/ast_diff.mli b/src/kernel_services/ast_queries/ast_diff.mli
index fd4e9af7bbd12722c77c6055446ebad2589b1d97..c0350ab97c3c5ba0b4a813ec5ec8e74537e4c7ab 100644
--- a/src/kernel_services/ast_queries/ast_diff.mli
+++ b/src/kernel_services/ast_queries/ast_diff.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -117,6 +117,24 @@ module Fundec:
   Correspondence_table
   with type key = fundec and type data = fundec correspondence
 
+(** map of symbols currently under comparison,
+    with their correspondence status so far *)
+type is_same_env
+
+val is_same_list:
+  ('a -> 'a -> is_same_env -> bool) -> 'a list -> 'a list -> is_same_env -> bool
+
+val is_same_term: term -> term -> is_same_env -> bool
+
+val is_same_predicate: predicate -> predicate -> is_same_env -> bool
+
+(** access custom comparison functions for ACSL extensions *)
+val set_extension_diff:
+  is_same_ext:
+    (string ->
+     acsl_extension_kind -> acsl_extension_kind -> is_same_env -> bool)
+  -> unit
+
 (** performs a comparison of AST between the current and the original
     project, which must have been set beforehand.
 *)
diff --git a/src/kernel_services/ast_queries/ast_info.ml b/src/kernel_services/ast_queries/ast_info.ml
index b9da577467a961ca1a8e3b2c7ebbaf1cd577df51..21ab7361014b2f111f5c0932bc0f28d9ede50b2d 100644
--- a/src/kernel_services/ast_queries/ast_info.ml
+++ b/src/kernel_services/ast_queries/ast_info.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/ast_info.mli b/src/kernel_services/ast_queries/ast_info.mli
index 771f071232a5cf47d5b2d2feb75f59bb744021a2..fa7bdf4f85548fc44b0480e7dd41f931cc67ddb1 100644
--- a/src/kernel_services/ast_queries/ast_info.mli
+++ b/src/kernel_services/ast_queries/ast_info.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -232,7 +232,7 @@ module Function: sig
   val get_id: cil_function -> int
 
   val get_statics: fundec -> varinfo list
-  (** @since Frama-C+dev *)
+  (** @since 29.0-Copper *)
 
 end
 
@@ -242,43 +242,43 @@ end
 
 val start_with_frama_c: string -> bool
 (** @return true if the given string starts with ["Frama_C_"].
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val is_show_each_builtin: string -> bool
 (** @return true if the given string starts with ["Frama_C_show_each"].
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val is_domain_show_each_builtin: string -> bool
 (** @return true if the given string starts with ["Frama_C_domain_show_each"].
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val is_dump_each_builtin: string -> bool
 (** @return true if the given string starts with ["Frama_C_dump_each"].
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val is_dump_file_builtin: string -> bool
 (** @return true if the given string starts with ["Frama_C_dump_each_file"].
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val is_split_builtin: string -> bool
 (** @return true if the given string starts with ["Frama_C_builtin_split"].
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val start_with_frama_c_builtin: string -> bool
 (** @return true if the given string starts with ["Frama_C_"].
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val is_frama_c_builtin: varinfo -> bool
 (** @return true if {!start_with_frama_c_builtin} or
     {!Cil_builtins.has_fc_builtin_attr} are true.
-    @before Frama-C+dev Behave like {!start_with_frama_c_builtin}.
+    @before 29.0-Copper Behave like {!start_with_frama_c_builtin}.
 *)
 
 (*
diff --git a/src/kernel_services/ast_queries/cil.ml b/src/kernel_services/ast_queries/cil.ml
index 8b56456895353c6aad9a4dac4f3e5c1197b1d490..2de503910f92d466c89b6d93f5c578c886090c12 100644
--- a/src/kernel_services/ast_queries/cil.ml
+++ b/src/kernel_services/ast_queries/cil.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* Modified by TrustInSoft *)
@@ -5919,6 +5920,11 @@ let getCompField cinfo fieldName =
     (fun fi -> fi.fname = fieldName)
     (Option.value ~default:[] cinfo.cfields)
 
+let getCompType typ =
+  match unrollTypeSkel typ with
+  | TComp(comp,_) -> comp
+  | _ -> raise Not_found
+
 let sameSizeInt ?(machdep=false) (ik1 : ikind) (ik2 : ikind) =
   if machdep then bytesSizeOfInt ik1 == bytesSizeOfInt ik2
   else
@@ -6133,7 +6139,7 @@ let combineTypesGen ?emitwith (combF : combineFunction)
             warning
               ~wkey:Kernel.wkey_int_conversion
               ~current:true
-              "Integer compatibily is machine-dependent : %a and %a\n"
+              "Integer compatibility is machine-dependent: %a and %a\n"
               Cil_datatype.Typ.pretty oldt Cil_datatype.Typ.pretty t;
             result k oldk
           end
diff --git a/src/kernel_services/ast_queries/cil.mli b/src/kernel_services/ast_queries/cil.mli
index c0e5ba3f9540e337238d48eda30483007399b3ff..f39332dfbd8e58788cd8cf63424d606c16af3296 100644
--- a/src/kernel_services/ast_queries/cil.mli
+++ b/src/kernel_services/ast_queries/cil.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** CIL main API.
@@ -657,6 +658,8 @@ val lenOfArray64: exp option -> Integer.t
 (** Return a named fieldinfo in compinfo, or raise Not_found *)
 val getCompField: compinfo -> string -> fieldinfo
 
+(** Return the compinfo of the typ, or raise Not_found *)
+val getCompType: typ -> compinfo
 
 (** A datatype to be used in conjunction with [existsType] *)
 type existsAction =
@@ -729,7 +732,7 @@ val combineAttributes : combineWhat -> attribute list -> attributes -> attribute
     recursive definition.
 
     @since 28.0-Nickel
-    @before Frama-C+dev [strictReturnTypes] was not named and [strictInteger]
+    @before 29.0-Copper [strictReturnTypes] was not named and [strictInteger]
     not present in {!typ_combine}.
 *)
 type combineFunction =
@@ -769,7 +772,7 @@ type combineFunction =
     @raise Cannot_combine with an explanation when the type cannot be combined.
 
     @since 28.0-Nickel
-    @before Frama-C+dev [strictInteger (true)] and [strictReturnTypes (false)]
+    @before 29.0-Copper [strictInteger (true)] and [strictReturnTypes (false)]
             were optional
 *)
 val combineTypesGen : ?emitwith:(Log.event -> unit) -> combineFunction ->
@@ -780,7 +783,7 @@ val combineTypesGen : ?emitwith:(Log.event -> unit) -> combineFunction ->
     global symbols are equal, then they are the same object.
 
     @since 28.0-Nickel
-    @before Frama-C+dev [strictInteger (true)] was not present and left with its
+    @before 29.0-Copper [strictInteger (true)] was not present and left with its
     default value in combineTypesGen.
 *)
 val combineTypes : ?strictInteger:bool -> ?strictReturnTypes:bool ->
@@ -1079,7 +1082,7 @@ val constFoldToInt: ?machdep:bool -> exp -> Integer.t option
 val constFoldTermNodeAtTop:  term_node -> term_node
 
 (** Do constant folding on an term.
-    @before Frama-C+Dev takes a boolean [machdep] to decide if we actually do
+    @before 29.0-Copper takes a boolean [machdep] to decide if we actually do
             the fold or not. *)
 val constFoldTerm: term -> term
 
diff --git a/src/kernel_services/ast_queries/cil_builtins.ml b/src/kernel_services/ast_queries/cil_builtins.ml
index c80b32e7484b1a703e85d748253a8919524fe330..fe00e5c8871f02bceb86ab7fcfbdf65ca32c0526 100644
--- a/src/kernel_services/ast_queries/cil_builtins.ml
+++ b/src/kernel_services/ast_queries/cil_builtins.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 open Cil_datatype
diff --git a/src/kernel_services/ast_queries/cil_builtins.mli b/src/kernel_services/ast_queries/cil_builtins.mli
index 45b02173c47744a19146fab35cc6eff13c84dbf8..ca5ff1cbd912c1e69493fa6e6368f0ea8a91badc 100644
--- a/src/kernel_services/ast_queries/cil_builtins.mli
+++ b/src/kernel_services/ast_queries/cil_builtins.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 open Cil_types
@@ -58,12 +59,12 @@ module Frama_c_builtins:
 
 val is_builtin: varinfo -> bool
 (** @return true if {!has_fc_builtin_attr} or {!is_special_builtin} are true.
-    @before Frama-C+dev Only check for {!has_fc_builtin_attr}.
+    @before 29.0-Copper Only check for {!has_fc_builtin_attr}.
     @since Fluorine-20130401 *)
 
 val has_fc_builtin_attr: varinfo -> bool
 (** @return true if the given variable has a FC_BUILTIN attribute
-    @since Frama-C+dev *)
+    @since 29.0-Copper *)
 
 val is_unused_builtin: varinfo -> bool
 (** @return true if the given variable refers to a Frama-C builtin that
diff --git a/src/kernel_services/ast_queries/cil_const.ml b/src/kernel_services/ast_queries/cil_const.ml
index 74176389529633084c020817c49adeda2c550253..bd4d41d64ce8c58ccc6f9b5170858c3aee2e8f27 100644
--- a/src/kernel_services/ast_queries/cil_const.ml
+++ b/src/kernel_services/ast_queries/cil_const.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 open Cil_types
diff --git a/src/kernel_services/ast_queries/cil_const.mli b/src/kernel_services/ast_queries/cil_const.mli
index 47f7659a34e8c63dfc10af4537b4a585c0974f09..5edd0ba2b30af51dbd07a165e677c06ccdcb0745 100644
--- a/src/kernel_services/ast_queries/cil_const.mli
+++ b/src/kernel_services/ast_queries/cil_const.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** Smart constructors for some CIL data types *)
diff --git a/src/kernel_services/ast_queries/cil_datatype.ml b/src/kernel_services/ast_queries/cil_datatype.ml
index db09087044fe133b44ff32614c6fd002c806af7b..e6eb376929273f6cd6b9ca712c98b480611f4e3c 100644
--- a/src/kernel_services/ast_queries/cil_datatype.ml
+++ b/src/kernel_services/ast_queries/cil_datatype.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -674,7 +674,8 @@ module Typeinfo =
 
 module Exp = struct
   let pretty_ref = ref (fun _ _ -> assert false)
-  let dummy = { eid = -1; enode = Const (CStr ""); eloc = Location.unknown }
+  let zero = CInt64 (Integer.zero, IChar, None)
+  let dummy = { eid = -1; enode = Const zero; eloc = Location.unknown }
   include Make_with_collections
       (struct
         include Datatype.Undefined
diff --git a/src/kernel_services/ast_queries/cil_datatype.mli b/src/kernel_services/ast_queries/cil_datatype.mli
index 871b05809f5fec3455b2b9793486372047fa1637..3e83fb181b5df9076b47317d62204a23b9bdf46f 100644
--- a/src/kernel_services/ast_queries/cil_datatype.mli
+++ b/src/kernel_services/ast_queries/cil_datatype.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/cil_state_builder.ml b/src/kernel_services/ast_queries/cil_state_builder.ml
index 0a8bb8d3861d34da775af1ef7984667ca82ad8eb..3fc50fbdb0e4c7627b9f35c4b2930a7676df5339 100644
--- a/src/kernel_services/ast_queries/cil_state_builder.ml
+++ b/src/kernel_services/ast_queries/cil_state_builder.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/cil_state_builder.mli b/src/kernel_services/ast_queries/cil_state_builder.mli
index 5602930d32a2eec11bd2079eb77dada9fc0d55ba..f7d736a5c78ee11ce14b31c8d638f4d1dde4bb76 100644
--- a/src/kernel_services/ast_queries/cil_state_builder.mli
+++ b/src/kernel_services/ast_queries/cil_state_builder.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/current_loc.ml b/src/kernel_services/ast_queries/current_loc.ml
index c3c8dcbe115c7585068fab0375f7161982a2eac5..593029df88f42586838e94441ffdd09ef5a19dad 100644
--- a/src/kernel_services/ast_queries/current_loc.ml
+++ b/src/kernel_services/ast_queries/current_loc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/current_loc.mli b/src/kernel_services/ast_queries/current_loc.mli
index 824f0b08719284da1162565e6ccd77cd16abd328..fb1f8ce3ad7a7d1b93e96cbd674c8638cc72d5c8 100644
--- a/src/kernel_services/ast_queries/current_loc.mli
+++ b/src/kernel_services/ast_queries/current_loc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/dyncall.ml b/src/kernel_services/ast_queries/dyncall.ml
index dd04b7a66a24aa5e23edfbdbff67656f2fac4719..33c4789286e99f7965cf4e45c88685ff623c0410 100644
--- a/src/kernel_services/ast_queries/dyncall.ml
+++ b/src/kernel_services/ast_queries/dyncall.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/dyncall.mli b/src/kernel_services/ast_queries/dyncall.mli
index 935bb46b851fc9356eb3ff091919e1dcc9b768bd..1f9b679024472463e60a2061b07ac941ac4e3b81 100644
--- a/src/kernel_services/ast_queries/dyncall.mli
+++ b/src/kernel_services/ast_queries/dyncall.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/file.ml b/src/kernel_services/ast_queries/file.ml
index 767326d15211bf2413fc5b63c332321b781ac14d..ad01c4a10bd0ba58dfc305d162c260c6068ae3f3 100644
--- a/src/kernel_services/ast_queries/file.ml
+++ b/src/kernel_services/ast_queries/file.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/file.mli b/src/kernel_services/ast_queries/file.mli
index 84ef54bc2b93ac4a6a814e57f7f53b1a29ee8aa1..71522e5e2951d31b84c50feac5550c999d1b92ca 100644
--- a/src/kernel_services/ast_queries/file.mli
+++ b/src/kernel_services/ast_queries/file.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/filecheck.ml b/src/kernel_services/ast_queries/filecheck.ml
index 891a2394b1970e1e017adeed3274f822dcfcaea6..e867089860ec36283d7e7c5b1358126a5d9c975a 100644
--- a/src/kernel_services/ast_queries/filecheck.ml
+++ b/src/kernel_services/ast_queries/filecheck.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/filecheck.mli b/src/kernel_services/ast_queries/filecheck.mli
index b91185757c340f7660c2582c37d0b614fcf89ef0..373f215554d44c2f22f3783bfce5091b8c0608dc 100644
--- a/src/kernel_services/ast_queries/filecheck.mli
+++ b/src/kernel_services/ast_queries/filecheck.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/json_compilation_database.ml b/src/kernel_services/ast_queries/json_compilation_database.ml
index f55e58ce24d9cd3e789567a3b6673dd1e2afc496..fe6eb59f9d71663d942f0f3e46bd587c4aef6b2a 100644
--- a/src/kernel_services/ast_queries/json_compilation_database.ml
+++ b/src/kernel_services/ast_queries/json_compilation_database.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/json_compilation_database.mli b/src/kernel_services/ast_queries/json_compilation_database.mli
index bc8257b25dd454fb79dc9b8ba262f0ee98cef832..eae940633680cfe7bc0f1dda9aeda64dce47c7a1 100644
--- a/src/kernel_services/ast_queries/json_compilation_database.mli
+++ b/src/kernel_services/ast_queries/json_compilation_database.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/logic_const.ml b/src/kernel_services/ast_queries/logic_const.ml
index 34d0e0a7f32341891ae1e395b6cf66aa4bb235cf..6f8cc32aa3047d8977cc1ca2c9c55354e7dd8260 100644
--- a/src/kernel_services/ast_queries/logic_const.ml
+++ b/src/kernel_services/ast_queries/logic_const.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_queries/logic_const.mli b/src/kernel_services/ast_queries/logic_const.mli
index 748caf38800455a099d282b8217bce62af8cdcab..01448f53738a7a080ca6f81193aea6ab149c537e 100644
--- a/src/kernel_services/ast_queries/logic_const.mli
+++ b/src/kernel_services/ast_queries/logic_const.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_queries/logic_env.ml b/src/kernel_services/ast_queries/logic_env.ml
index caeb0bacae4e856031d7b8dd39263080b1d41052..f6c3d366337b3ba83800c1a1787078d12a32b107 100644
--- a/src/kernel_services/ast_queries/logic_env.ml
+++ b/src/kernel_services/ast_queries/logic_env.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_queries/logic_env.mli b/src/kernel_services/ast_queries/logic_env.mli
index 377fe8b74d867a2c48df6423c8d5bf3bab2e3f6b..c84b4872d93b34ff1ef2c1799651149cc00cd391 100644
--- a/src/kernel_services/ast_queries/logic_env.mli
+++ b/src/kernel_services/ast_queries/logic_env.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_queries/logic_parse_string.ml b/src/kernel_services/ast_queries/logic_parse_string.ml
index 70044ef01a90cd0cd0b6a7533cf5d5ad15800006..f7ea6404e5b3a35bd09fea74c8a62d6e79b22bd8 100644
--- a/src/kernel_services/ast_queries/logic_parse_string.ml
+++ b/src/kernel_services/ast_queries/logic_parse_string.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/logic_parse_string.mli b/src/kernel_services/ast_queries/logic_parse_string.mli
index aae2e1ad2218498c4bd46d30e9839bbf954db185..19348b7be9805643e25f692df10a52cc66f7be44 100644
--- a/src/kernel_services/ast_queries/logic_parse_string.mli
+++ b/src/kernel_services/ast_queries/logic_parse_string.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/logic_to_c.ml b/src/kernel_services/ast_queries/logic_to_c.ml
index 971013e57574174953aa5bd169e8adc7d5857dd6..3fe95d67f7c3f97bb231f1d5e141f2b12c38ed8b 100644
--- a/src/kernel_services/ast_queries/logic_to_c.ml
+++ b/src/kernel_services/ast_queries/logic_to_c.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/logic_to_c.mli b/src/kernel_services/ast_queries/logic_to_c.mli
index 6254e86bb5c67cc91adece06d852fc8499ceb1c5..7285b30dd68fa0dd953e165c70bd6245c202a42d 100644
--- a/src/kernel_services/ast_queries/logic_to_c.mli
+++ b/src/kernel_services/ast_queries/logic_to_c.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_queries/logic_typing.ml b/src/kernel_services/ast_queries/logic_typing.ml
index 1ad0b7ba8fad1c4ed14fcfaad10411372b7653c9..cb18e76893f995df9046975c33132ff4f1b9ca18 100644
--- a/src/kernel_services/ast_queries/logic_typing.ml
+++ b/src/kernel_services/ast_queries/logic_typing.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_queries/logic_typing.mli b/src/kernel_services/ast_queries/logic_typing.mli
index 077a2556faf4addf7c12432356341e5152e06902..b1b29a889bfa8bbd453c4e0a271ec540911264c6 100644
--- a/src/kernel_services/ast_queries/logic_typing.mli
+++ b/src/kernel_services/ast_queries/logic_typing.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
@@ -281,7 +281,7 @@ val append_pre_label: Lenv.t -> Lenv.t
 val append_init_label: Lenv.t -> Lenv.t
 
 (** returns the builtin label corresponding to the given name if it exists
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 val builtin_label: string -> logic_builtin_label option
 
diff --git a/src/kernel_services/ast_queries/logic_utils.ml b/src/kernel_services/ast_queries/logic_utils.ml
index 06e5268adf3cdcd0679914e629c4edd29986c374..7d43c5cb2aac0210cf28e992340746724eb7d86b 100644
--- a/src/kernel_services/ast_queries/logic_utils.ml
+++ b/src/kernel_services/ast_queries/logic_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_queries/logic_utils.mli b/src/kernel_services/ast_queries/logic_utils.mli
index e59cab55aae0adb48c4c34ce54c01e55b259b223..62ace3c9ccfc6dec17e9c6f08ae0ae48a63a2e8f 100644
--- a/src/kernel_services/ast_queries/logic_utils.mli
+++ b/src/kernel_services/ast_queries/logic_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/ast_transformations/clone.ml b/src/kernel_services/ast_transformations/clone.ml
index 1938854f0ad671a9587ccce575c36e19326c4181..c5d8b09129ad8c0dff6d821bcb80da809e555f31 100644
--- a/src/kernel_services/ast_transformations/clone.ml
+++ b/src/kernel_services/ast_transformations/clone.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_transformations/clone.mli b/src/kernel_services/ast_transformations/clone.mli
index f76a8d2a2a2f3b1e71d0b06c0294385d9a9cb5bd..2a800674a6e8002e37d9d7b370ab1fb636eae104 100644
--- a/src/kernel_services/ast_transformations/clone.mli
+++ b/src/kernel_services/ast_transformations/clone.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_transformations/contract_special_float.ml b/src/kernel_services/ast_transformations/contract_special_float.ml
index 83f4d4343af62ae65d87ba7fe5e894ea73c0d7d1..3bd7e151997a0ef6e6deb76f1bf95d4caeb68eee 100644
--- a/src/kernel_services/ast_transformations/contract_special_float.ml
+++ b/src/kernel_services/ast_transformations/contract_special_float.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_transformations/contract_special_float.mli b/src/kernel_services/ast_transformations/contract_special_float.mli
index 95885aac890503e37f8fe8578b7e36514b46f8d6..e957691a9ff9bef0f245bba15d0740d350bb037d 100644
--- a/src/kernel_services/ast_transformations/contract_special_float.mli
+++ b/src/kernel_services/ast_transformations/contract_special_float.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_transformations/filter.ml b/src/kernel_services/ast_transformations/filter.ml
index cb75d926227697bc365f178a554ab56431e8b255..ca1caf592ccbd382831c3db020987721ab423d75 100644
--- a/src/kernel_services/ast_transformations/filter.ml
+++ b/src/kernel_services/ast_transformations/filter.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_transformations/filter.mli b/src/kernel_services/ast_transformations/filter.mli
index fd0c28c34f553f22b13ce50f5b398acc2fafd27a..185763f1ff6bb0db7b2fff6497e41afea8a9e7f2 100644
--- a/src/kernel_services/ast_transformations/filter.mli
+++ b/src/kernel_services/ast_transformations/filter.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_transformations/inline.ml b/src/kernel_services/ast_transformations/inline.ml
index 8e8e2ab803457bdb2cd380f0d9b8947e776e19e4..1d4dc2b59eb8c532efa5dcde6ed7542ea8ea1548 100644
--- a/src/kernel_services/ast_transformations/inline.ml
+++ b/src/kernel_services/ast_transformations/inline.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/ast_transformations/inline.mli b/src/kernel_services/ast_transformations/inline.mli
index 3215075874d53bbfc303f7422cfd0c0d1fd71d74..917c14f9604166fffacb23d8862b60ade0548193 100644
--- a/src/kernel_services/ast_transformations/inline.mli
+++ b/src/kernel_services/ast_transformations/inline.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/cmdline.ml b/src/kernel_services/cmdline_parameters/cmdline.ml
index 12274d0673e9bb3be853fac1719dd98803315353..501fe71dc71c07ff4887b4f3ace7fc43606adb8e 100644
--- a/src/kernel_services/cmdline_parameters/cmdline.ml
+++ b/src/kernel_services/cmdline_parameters/cmdline.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/cmdline.mli b/src/kernel_services/cmdline_parameters/cmdline.mli
index 8eab81613f3c84f90ef46cc851986f01a8e989e3..0b40f1459b61ef7bab66fedac8253f01ec97dc3c 100644
--- a/src/kernel_services/cmdline_parameters/cmdline.mli
+++ b/src/kernel_services/cmdline_parameters/cmdline.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/parameter_builder.ml b/src/kernel_services/cmdline_parameters/parameter_builder.ml
index 95f2a78c7d5a62aad8be4912184283de3dd30ac8..2c8544e8f2571a06e9fe2780e0f9706f372bb64e 100644
--- a/src/kernel_services/cmdline_parameters/parameter_builder.ml
+++ b/src/kernel_services/cmdline_parameters/parameter_builder.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/parameter_builder.mli b/src/kernel_services/cmdline_parameters/parameter_builder.mli
index 7e0e933bd266ff2adeaf3711c9c59193cbab88ef..2ebbd5fab217da4a991849ab934c63187f39bf0a 100644
--- a/src/kernel_services/cmdline_parameters/parameter_builder.mli
+++ b/src/kernel_services/cmdline_parameters/parameter_builder.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/parameter_category.ml b/src/kernel_services/cmdline_parameters/parameter_category.ml
index e972a1c5e4ea200e23338ad9011fd2d99ee94ef4..8c7038bef4a5c7ad560a96744b423dc841bb1f48 100644
--- a/src/kernel_services/cmdline_parameters/parameter_category.ml
+++ b/src/kernel_services/cmdline_parameters/parameter_category.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/parameter_category.mli b/src/kernel_services/cmdline_parameters/parameter_category.mli
index 9b787d6b3b2622f8e62b29707365a6a5a99339ff..b81cfb7a366db6879b7457ea5f259ca471f09fc6 100644
--- a/src/kernel_services/cmdline_parameters/parameter_category.mli
+++ b/src/kernel_services/cmdline_parameters/parameter_category.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/parameter_customize.ml b/src/kernel_services/cmdline_parameters/parameter_customize.ml
index d4fa664dea94c2a579886bfd1b49e1fd13ce3bb3..e15aa04427b6dd07fca27f6e4e519225b9700b70 100644
--- a/src/kernel_services/cmdline_parameters/parameter_customize.ml
+++ b/src/kernel_services/cmdline_parameters/parameter_customize.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/parameter_customize.mli b/src/kernel_services/cmdline_parameters/parameter_customize.mli
index 028e50b34d4ba62a30c1725124ba85d8b3c13240..af819c479038dfa5b2439da838eccb1d0b78dbe3 100644
--- a/src/kernel_services/cmdline_parameters/parameter_customize.mli
+++ b/src/kernel_services/cmdline_parameters/parameter_customize.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/parameter_sig.ml b/src/kernel_services/cmdline_parameters/parameter_sig.ml
index e6f7335c2c0d1275724ce71a31168e9be132a242..c07ef6b5afc0021aa92676853801dc1eacc6deb0 100644
--- a/src/kernel_services/cmdline_parameters/parameter_sig.ml
+++ b/src/kernel_services/cmdline_parameters/parameter_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -286,12 +286,12 @@ module type Custom = sig
   val set_possible_values: string list -> unit
   (** Set what are the acceptable values for this parameter.
       If the given list is empty, then all values are acceptable.
-      @since Frama-C+dev *)
+      @since 29.0-Copper *)
 
   val get_possible_values: unit -> string list
   (** What are the acceptable values for this parameter.
       If the returned list is empty, then all values are acceptable.
-      @since Frama-C+dev *)
+      @since 29.0-Copper *)
 end
 
 (* ************************************************************************** *)
@@ -574,7 +574,7 @@ module type Builder = sig
     end): Filepath
 
   (** Allow using custom types as parameters.
-      @since Frama-c+dev *)
+      @since 29.0-Copper *)
   module Custom(X: sig
       include Input_with_arg
       include Datatype.S
@@ -586,7 +586,7 @@ module type Builder = sig
   (** A fixed set of possible values, represented by a type [t], intended to be
       a variant with only a finite number of possible constructions.
       Note that [t] must be comparable using [Stdlib.compare].
-      @since Frama-c+dev *)
+      @since 29.0-Copper *)
   module Enum(X : sig
       include Input_with_arg
       type t
diff --git a/src/kernel_services/cmdline_parameters/parameter_state.ml b/src/kernel_services/cmdline_parameters/parameter_state.ml
index 9e2e1ea79c7a1d064f6056becf116b5f607107df..1af5b9f13eee909db9bf6601cf6f47fc89996a80 100644
--- a/src/kernel_services/cmdline_parameters/parameter_state.ml
+++ b/src/kernel_services/cmdline_parameters/parameter_state.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/parameter_state.mli b/src/kernel_services/cmdline_parameters/parameter_state.mli
index d63395bf73fec709413077367ae09707643208be..f1bd8cde8d393347194f93a5bc53d60091be96db 100644
--- a/src/kernel_services/cmdline_parameters/parameter_state.mli
+++ b/src/kernel_services/cmdline_parameters/parameter_state.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/typed_parameter.ml b/src/kernel_services/cmdline_parameters/typed_parameter.ml
index e07b29ddee1888325f9c05ee4a1a172635db9b6e..cdde505a5a20b5a741fd6037a0a7a079feda70f5 100644
--- a/src/kernel_services/cmdline_parameters/typed_parameter.ml
+++ b/src/kernel_services/cmdline_parameters/typed_parameter.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/cmdline_parameters/typed_parameter.mli b/src/kernel_services/cmdline_parameters/typed_parameter.mli
index 9dd9e4baa70c682251ad72a0825f2d91fb2a25f5..5d5541f37cb4eef53bf20d336ddf80ff70522636 100644
--- a/src/kernel_services/cmdline_parameters/typed_parameter.mli
+++ b/src/kernel_services/cmdline_parameters/typed_parameter.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/parsetree/cabs.ml b/src/kernel_services/parsetree/cabs.ml
index 9b45e7218e37672f6f18c3a7cd66d5d83121122b..bf4c553242b148658dd3bcb034d44a07f75f34e2 100644
--- a/src/kernel_services/parsetree/cabs.ml
+++ b/src/kernel_services/parsetree/cabs.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** Untyped AST.
diff --git a/src/kernel_services/parsetree/cabshelper.ml b/src/kernel_services/parsetree/cabshelper.ml
index f575cd30f7165b8f97c40fc7decb588525d9036a..e557a91dd58ac448771aea22a2932df7ea4374cc 100644
--- a/src/kernel_services/parsetree/cabshelper.ml
+++ b/src/kernel_services/parsetree/cabshelper.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 open Cabs
diff --git a/src/kernel_services/parsetree/cabshelper.mli b/src/kernel_services/parsetree/cabshelper.mli
index 5485c1b58377881bee36766299b982ba95e97065..1b1fbfc418e10678b55f071583a1ea8dab6f9fc9 100644
--- a/src/kernel_services/parsetree/cabshelper.mli
+++ b/src/kernel_services/parsetree/cabshelper.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (** Helper functions for Cabs *)
diff --git a/src/kernel_services/parsetree/logic_ptree.ml b/src/kernel_services/parsetree/logic_ptree.ml
index ce029977c03ae5616bb80d31f239a5b53257ac57..aeb6da19615b9c4372765f8f6c82c4f47339f420 100644
--- a/src/kernel_services/parsetree/logic_ptree.ml
+++ b/src/kernel_services/parsetree/logic_ptree.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/plugin_entry_points/async.ml b/src/kernel_services/plugin_entry_points/async.ml
index 62b272ad7100315bd248f10ec47249546c5ed7b4..ec794899920da000b635bffa98698a392831f3f6 100644
--- a/src/kernel_services/plugin_entry_points/async.ml
+++ b/src/kernel_services/plugin_entry_points/async.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/plugin_entry_points/async.mli b/src/kernel_services/plugin_entry_points/async.mli
index 0775c22c8be984380185674ded31a12a209058e3..1daeb95b11dc17b3e329deed14c362c26d64ee9f 100644
--- a/src/kernel_services/plugin_entry_points/async.mli
+++ b/src/kernel_services/plugin_entry_points/async.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -21,8 +21,8 @@
 (**************************************************************************)
 
 (** Module dedicated to asynchronous actions.
-    @since Frama-C+dev
-    @before Frama-C+dev these features were in a module named Db
+    @since 29.0-Copper
+    @before 29.0-Copper these features were in a module named Db
 *)
 
 (** Registered daemon on progress. *)
diff --git a/src/kernel_services/plugin_entry_points/db.ml b/src/kernel_services/plugin_entry_points/db.ml
index e1d0d1816d585b87c87ca8047d9e5d02890cafd2..b88d32647914c29e4503ba69d7cf4020890fc490 100644
--- a/src/kernel_services/plugin_entry_points/db.ml
+++ b/src/kernel_services/plugin_entry_points/db.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/plugin_entry_points/db.mli b/src/kernel_services/plugin_entry_points/db.mli
index f30706002fe4c71b1eaab8ec6695fd2026268a38..93558db217ce6583e560b751fd2e724735acccae 100644
--- a/src/kernel_services/plugin_entry_points/db.mli
+++ b/src/kernel_services/plugin_entry_points/db.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,10 +22,10 @@
 
 (** DEPRECATED Frama-C main interface.
     @since Lithium-20081201
-    @deprecated Frama-C+dev Use module {!Boot.Main} *)
+    @deprecated 29.0-Copper Use module {!Boot.Main} *)
 module Main: sig
   val extend : (unit -> unit) -> unit
   [@@ deprecated "Use module Boot.Main"]
   (** Register a function to be called by the Frama-C main entry point.
-      @deprecated Frama-C+dev Use module {!Boot.Main} *)
+      @deprecated 29.0-Copper Use module {!Boot.Main} *)
 end
diff --git a/src/kernel_services/plugin_entry_points/dynamic.ml b/src/kernel_services/plugin_entry_points/dynamic.ml
index c984ba9a656af3eedaf32ed24e6f75928d4fd438..cc95ee4b7bb853d1db8b96409f3a0e0ca1e0cae1 100644
--- a/src/kernel_services/plugin_entry_points/dynamic.ml
+++ b/src/kernel_services/plugin_entry_points/dynamic.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -129,20 +129,16 @@ let load_module m =
   let base,ext = split_ext m in
   match ext with
   | ".ml" ->
-    Klog.error "Script loading has been deprecated in favor of the load of script libraries (see section \"Loading Single OCaml Files as Plug-ins\" in the Frama-C user manual for an alternative)."
+    Klog.error "Script loading has been removed; see section \"Loading Single OCaml Files as Plug-ins\" in the Frama-C user manual for an alternative."
   | _ ->
     begin
       (* load object or compile script or find package *)
       match is_object base with
       | Some file -> dynlib_module (Filename.basename base) file
       | None ->
-        match is_file base ".ml" with
-        | Some _ ->
-          Klog.error "Script loading has been deprecated in favor of the command frama-c-init-plugin"
-        | None ->
-          if is_package m && Dune_site_plugins.V1.available m then load_packages [m]
-          else
-            load_plugin m
+        if is_package m && Dune_site_plugins.V1.available m then load_packages [m]
+        else
+          load_plugin m
     end
 
 let () = Printexc.register_printer (function
diff --git a/src/kernel_services/plugin_entry_points/dynamic.mli b/src/kernel_services/plugin_entry_points/dynamic.mli
index 2569facff139dea41cffecf539f159f5aaf82962..57d10e0497ba1f27e81606df06ee4deafd678291 100644
--- a/src/kernel_services/plugin_entry_points/dynamic.mli
+++ b/src/kernel_services/plugin_entry_points/dynamic.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/plugin_entry_points/emitter.ml b/src/kernel_services/plugin_entry_points/emitter.ml
index 6f7d97ede62c54916d8c6240da514fbadc68e11b..bb1e7c2c1c8f303fbb75916670cd8bbd5ea951c1 100644
--- a/src/kernel_services/plugin_entry_points/emitter.ml
+++ b/src/kernel_services/plugin_entry_points/emitter.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/plugin_entry_points/emitter.mli b/src/kernel_services/plugin_entry_points/emitter.mli
index 4cb00c4330bb1d39151f24f02fb0841e21f7d908..50af54907556ef7230b3d595a9a4768fb044f5b4 100644
--- a/src/kernel_services/plugin_entry_points/emitter.mli
+++ b/src/kernel_services/plugin_entry_points/emitter.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/plugin_entry_points/kernel.ml b/src/kernel_services/plugin_entry_points/kernel.ml
index 9ed122b0ae07c15fc3b1afd59a9cc4db889cc89c..3ff75f40f3f26a1cf725b91259b5698966c22d39 100644
--- a/src/kernel_services/plugin_entry_points/kernel.ml
+++ b/src/kernel_services/plugin_entry_points/kernel.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -157,6 +157,9 @@ let () = set_warn_status wkey_ghost_bad_use Log.Werror
 let wkey_acsl_float_compare = register_warn_category "acsl-float-compare"
 let () = set_warn_status wkey_acsl_float_compare Log.Winactive
 
+let wkey_large_array = register_warn_category "too-large-array"
+let () = set_warn_status wkey_large_array Log.Werror
+
 let wkey_conditional_feature =
   register_warn_category "parser:conditional-feature"
 
diff --git a/src/kernel_services/plugin_entry_points/kernel.mli b/src/kernel_services/plugin_entry_points/kernel.mli
index f612e3809413713f0feb64588865ed3e852b18ec..8d4f1b47e79dd226d3e29c18508bedf45e474369 100644
--- a/src/kernel_services/plugin_entry_points/kernel.mli
+++ b/src/kernel_services/plugin_entry_points/kernel.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -145,12 +145,12 @@ val wkey_annot_error: warn_category
 
 val wkey_plugin_not_loaded: warn_category
 (** Warning related to not loaded plugins.
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val wkey_extension_unknown: warn_category
 (** Warning related to the use of an unregistered ACSL extension.
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val wkey_ghost_already_ghost: warn_category
@@ -162,6 +162,8 @@ val wkey_ghost_bad_use: warn_category
 
 val wkey_acsl_float_compare: warn_category
 
+val wkey_large_array: warn_category
+
 val wkey_conditional_feature: warn_category
 (** parsing feature that is only supported in specific modes
     (e.g. C11, gcc, ...). *)
diff --git a/src/kernel_services/plugin_entry_points/log.ml b/src/kernel_services/plugin_entry_points/log.ml
index 7ebcab452aa143a6475491be1570d120cce9a8e8..e7bc30058f83198965a9eedca5778345b28653c4 100644
--- a/src/kernel_services/plugin_entry_points/log.ml
+++ b/src/kernel_services/plugin_entry_points/log.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/plugin_entry_points/log.mli b/src/kernel_services/plugin_entry_points/log.mli
index fa1565aa321a9f9916861cdb87cf920619d00533..d9edffdc5e6080af494920f9076ddcb5a031e6c1 100644
--- a/src/kernel_services/plugin_entry_points/log.mli
+++ b/src/kernel_services/plugin_entry_points/log.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/plugin_entry_points/plugin.ml b/src/kernel_services/plugin_entry_points/plugin.ml
index 909fd31f8cf21cddb752fcbd4afc5657eb4621fb..8ed97729a29b2f52953d487f16b4fb484e891332 100644
--- a/src/kernel_services/plugin_entry_points/plugin.ml
+++ b/src/kernel_services/plugin_entry_points/plugin.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/plugin_entry_points/plugin.mli b/src/kernel_services/plugin_entry_points/plugin.mli
index cacb40761b1b57a4ca6a11cde9da4f00c1d9cb3b..887bdc5befc77e2ff76837694e78a33d6a24b97f 100644
--- a/src/kernel_services/plugin_entry_points/plugin.mli
+++ b/src/kernel_services/plugin_entry_points/plugin.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/visitors/cabsvisit.ml b/src/kernel_services/visitors/cabsvisit.ml
index 357a69cd0979d5996008036ed5711af71f4b44da..d5a7fe9ae3d10bd455ccced764fec7f3d86270d7 100644
--- a/src/kernel_services/visitors/cabsvisit.ml
+++ b/src/kernel_services/visitors/cabsvisit.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* cabsvisit.ml *)
diff --git a/src/kernel_services/visitors/cabsvisit.mli b/src/kernel_services/visitors/cabsvisit.mli
index 0714cf8e4fc52248aec49d9fbe1851f9871924bc..253492ab625008fa6663464042feea224652bb98 100644
--- a/src/kernel_services/visitors/cabsvisit.mli
+++ b/src/kernel_services/visitors/cabsvisit.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (* cabsvisit.mli *)
diff --git a/src/kernel_services/visitors/visitor.ml b/src/kernel_services/visitors/visitor.ml
index 32487e3fa067cba9526f03cb0f299b560b452381..80a1138f6e890002fd0ef41e2604695ee1362dc6 100644
--- a/src/kernel_services/visitors/visitor.ml
+++ b/src/kernel_services/visitors/visitor.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/visitors/visitor.mli b/src/kernel_services/visitors/visitor.mli
index c3923794a177dbd5ad1d06f446cd814d9d5ff322..eca72cf55800c688ca5bb1e54cee94c5bcfad607 100644
--- a/src/kernel_services/visitors/visitor.mli
+++ b/src/kernel_services/visitors/visitor.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/kernel_services/visitors/visitor_behavior.ml b/src/kernel_services/visitors/visitor_behavior.ml
index 07d8058fa7acf0ba934f0b88cc2ea6d94763c961..641fdde7a13c6936a813f7078676667ad9ce45f8 100644
--- a/src/kernel_services/visitors/visitor_behavior.ml
+++ b/src/kernel_services/visitors/visitor_behavior.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/kernel_services/visitors/visitor_behavior.mli b/src/kernel_services/visitors/visitor_behavior.mli
index 2dca240dcefbd479bdcaff7fd05c495e43bd7d7d..5e946ce8c32e9acd2c234cb879ddcb07e9214b37 100644
--- a/src/kernel_services/visitors/visitor_behavior.mli
+++ b/src/kernel_services/visitors/visitor_behavior.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/libraries/datatype/datatype.ml b/src/libraries/datatype/datatype.ml
index e226fc30fd723d91ca853c2942836ff091f19361..9f4f4b7994e952ef9758f08195e999f178616566 100644
--- a/src/libraries/datatype/datatype.ml
+++ b/src/libraries/datatype/datatype.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/datatype.mli b/src/libraries/datatype/datatype.mli
index 571c5f296b1a36ee40ea9bbe829359b61094a97a..843394efa1bc04ea9ada838914471cd41af617e1 100644
--- a/src/libraries/datatype/datatype.mli
+++ b/src/libraries/datatype/datatype.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/descr.ml b/src/libraries/datatype/descr.ml
index 425934cc1d153576f53823e954d0de4cc6c40730..3eb778cb0dc77d54ba8dc2dfe495671eaabcc697 100644
--- a/src/libraries/datatype/descr.ml
+++ b/src/libraries/datatype/descr.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/descr.mli b/src/libraries/datatype/descr.mli
index e8328180f486a493dd15e5ec06c31ff3c4de0f5a..cdd25748ced79c7ac196cb01cb77230ea2afbcbd 100644
--- a/src/libraries/datatype/descr.mli
+++ b/src/libraries/datatype/descr.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/structural_descr.ml b/src/libraries/datatype/structural_descr.ml
index 62f0b5c8ffcd9681e74c9f156d8c11bfd67a2efc..4220b06264666bc226b163a5550c44c24406bb5b 100644
--- a/src/libraries/datatype/structural_descr.ml
+++ b/src/libraries/datatype/structural_descr.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/structural_descr.mli b/src/libraries/datatype/structural_descr.mli
index c9ab2d510f1bf0d9a9ce403c5a7899c8f78af4bb..5d1eeb3da932964fd12cdc817ddd780e8f56cace 100644
--- a/src/libraries/datatype/structural_descr.mli
+++ b/src/libraries/datatype/structural_descr.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/tests/dune b/src/libraries/datatype/tests/dune
index 27e386ff6c7a6c872f75f2f021750d1e6d55c69c..56679ef2ae89be6a229e778459077e8cb5af42e3 100644
--- a/src/libraries/datatype/tests/dune
+++ b/src/libraries/datatype/tests/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/libraries/datatype/type.ml b/src/libraries/datatype/type.ml
index 80f0cafe92a0e89a9c4bb64403c09617e9bda38c..c88a9caea21b7bd2e70be745282fe1372493b0b6 100644
--- a/src/libraries/datatype/type.ml
+++ b/src/libraries/datatype/type.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/type.mli b/src/libraries/datatype/type.mli
index 6f9b20465d0e43b9b6884eee816a24aafd3bae29..92ad148031835f9392a55121ec926e16ed5c38f6 100644
--- a/src/libraries/datatype/type.mli
+++ b/src/libraries/datatype/type.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/unmarshal_z.ml b/src/libraries/datatype/unmarshal_z.ml
index fe23d288cfa85bef20d155e35672963af576c093..f6605712023678e5b4c530feca01726fea0ebd5f 100644
--- a/src/libraries/datatype/unmarshal_z.ml
+++ b/src/libraries/datatype/unmarshal_z.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/datatype/unmarshal_z.mli b/src/libraries/datatype/unmarshal_z.mli
index 3e06af79ecc451ffa181423285c056072bb4fc82..a4668743aede1c15251a511348919c68e30075bc 100644
--- a/src/libraries/datatype/unmarshal_z.mli
+++ b/src/libraries/datatype/unmarshal_z.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/project.ml b/src/libraries/project/project.ml
index 1e37bc97e87e0abd97016bdf339e827b78d0a63a..6e61f48dda7702ec75f373bf6a28489a189e413c 100644
--- a/src/libraries/project/project.ml
+++ b/src/libraries/project/project.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/project.mli b/src/libraries/project/project.mli
index 8acd4c38013b4a056b6cbbb5e25d269233d6d380..802deecdde94bb2eb4bee3ab8e5a119c850def2d 100644
--- a/src/libraries/project/project.mli
+++ b/src/libraries/project/project.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/project_skeleton.ml b/src/libraries/project/project_skeleton.ml
index db61faff9a3a9106f6a410a37b069df640b54edc..117344bf22051f2fe0d6fb22b36533b7df1449c0 100644
--- a/src/libraries/project/project_skeleton.ml
+++ b/src/libraries/project/project_skeleton.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/project_skeleton.mli b/src/libraries/project/project_skeleton.mli
index 67c6e00eac1ae4f9fd38c889c91efa3eabcaf1e7..c6c7e4b8969b8f41ade21c8286f5ea263ac1fb27 100644
--- a/src/libraries/project/project_skeleton.mli
+++ b/src/libraries/project/project_skeleton.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/state.ml b/src/libraries/project/state.ml
index 1c40f7694f14e12b158e4e673451f96f4508f185..03d7239459873f168f0f3a5fe8cfb9a6daa9b67b 100644
--- a/src/libraries/project/state.ml
+++ b/src/libraries/project/state.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/state.mli b/src/libraries/project/state.mli
index 2ca0649a01c9789326509fde5140596f1d176152..dfd49c8b55e1a6f86ab05b44fdb9b090e73fe6d8 100644
--- a/src/libraries/project/state.mli
+++ b/src/libraries/project/state.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/state_builder.ml b/src/libraries/project/state_builder.ml
index 231dae0d4a6f80b181125d185a98c0fdcafb40be..fcf4dee17629b0a08f476ce5c4544f66205a4703 100644
--- a/src/libraries/project/state_builder.ml
+++ b/src/libraries/project/state_builder.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/state_builder.mli b/src/libraries/project/state_builder.mli
index 10bbb9e968622ebbe64792f4f2c0d4ad083688c9..af34bfc8c80de114a7ff139e1318ef9707e58b16 100644
--- a/src/libraries/project/state_builder.mli
+++ b/src/libraries/project/state_builder.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -508,7 +508,7 @@ module type Counter = sig
       @since Fluorine-20130401 *)
 
   (** Resets the counter to 0.
-      @since Frama-C+dev *)
+      @since 29.0-Copper *)
   val reset: unit -> unit
 
   val self: State.t
diff --git a/src/libraries/project/state_dependency_graph.ml b/src/libraries/project/state_dependency_graph.ml
index 883a4efa9db6e8790c4b02f724ad96881cf62aad..5525ef53ef81e0745324d351cee2f82255640203 100644
--- a/src/libraries/project/state_dependency_graph.ml
+++ b/src/libraries/project/state_dependency_graph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/state_dependency_graph.mli b/src/libraries/project/state_dependency_graph.mli
index 46b9c0c99fcaf764e041925db153606e1a83bc63..715bc6320a4cba5c75064671c29c1b8ac4871c7c 100644
--- a/src/libraries/project/state_dependency_graph.mli
+++ b/src/libraries/project/state_dependency_graph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/state_selection.ml b/src/libraries/project/state_selection.ml
index 42f6f4bc932cec9cac461453e14b821d8e776b0b..edb879a5bd707abed0f854e6f77652b0ae7a1375 100644
--- a/src/libraries/project/state_selection.ml
+++ b/src/libraries/project/state_selection.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/project/state_selection.mli b/src/libraries/project/state_selection.mli
index 228e8e37fcc2351d26f47d0dc5a2feea9abec448..e34ae948675c57e3bbf4d5ed8cbd1500211235d7 100644
--- a/src/libraries/project/state_selection.mli
+++ b/src/libraries/project/state_selection.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/bvars.ml b/src/libraries/qed/bvars.ml
index 951b113f4a523cbe73814622aa15dd0a2fc118f1..81c4cbf95e9009b280f1a7651240124630e1d053 100644
--- a/src/libraries/qed/bvars.ml
+++ b/src/libraries/qed/bvars.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/bvars.mli b/src/libraries/qed/bvars.mli
index 2d19c94118926135aae531e520f24b45d2b52d9d..9ec7ec32d784901a8ac4e7c0a05a939001d747c9 100644
--- a/src/libraries/qed/bvars.mli
+++ b/src/libraries/qed/bvars.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/cache.ml b/src/libraries/qed/cache.ml
index c6844033fa6f4b8223cd30333cb54552040d5619..5d644d63a2e76d0ee93ac57c0d4048bb1037632d 100644
--- a/src/libraries/qed/cache.ml
+++ b/src/libraries/qed/cache.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/cache.mli b/src/libraries/qed/cache.mli
index e571bde74cd088aed54d93a5e4a4ab67be905bb9..bd8336b55d1afb7e2d1bd9e56726a1deb40985f0 100644
--- a/src/libraries/qed/cache.mli
+++ b/src/libraries/qed/cache.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/collection.ml b/src/libraries/qed/collection.ml
index 503d3107498e87d40fe4bec7a794bdb5ba3c5d47..0accbb0498ee5cb6084e02be256d7ad65366e8c5 100644
--- a/src/libraries/qed/collection.ml
+++ b/src/libraries/qed/collection.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/collection.mli b/src/libraries/qed/collection.mli
index e536bfdf96092d8a3e0d9148239e1d31371d0eca..2609b1bc56b8cfff347ceeda621646b774b7ebf1 100644
--- a/src/libraries/qed/collection.mli
+++ b/src/libraries/qed/collection.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/dune b/src/libraries/qed/dune
index 2ec392daf3151fa35482df0955451e198d552c4a..52fc5464ae62aac08f9fb52c391e4f3d558c7397 100644
--- a/src/libraries/qed/dune
+++ b/src/libraries/qed/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/libraries/qed/dune-project b/src/libraries/qed/dune-project
index 5fcdf50816c8fbd22bd335cc68b34981a1147737..99f008db00923fff53e6c87b87cff9a93e69eec2 100644
--- a/src/libraries/qed/dune-project
+++ b/src/libraries/qed/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/libraries/qed/engine.ml b/src/libraries/qed/engine.ml
index 82398e2560e27c7c03ca29940648942155056cfa..961af1194bf08c81edffd034e4eb9c5272471710 100644
--- a/src/libraries/qed/engine.ml
+++ b/src/libraries/qed/engine.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/export.ml b/src/libraries/qed/export.ml
index a552b5dd14185a698b920612185d6d160a252072..b3c13dd9cc79b534f5b581b017ad82a92d62fe0e 100644
--- a/src/libraries/qed/export.ml
+++ b/src/libraries/qed/export.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/export.mli b/src/libraries/qed/export.mli
index 8dd538662434eb8fa702988b486c388dae417ffa..797a68643e8e04a3557ed1d7c9e31ca6800f0d74 100644
--- a/src/libraries/qed/export.mli
+++ b/src/libraries/qed/export.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/export_why3.ml b/src/libraries/qed/export_why3.ml
index ca36d41d0b65948d37c65fdb09ca724cf9f3b6dd..5a60d4d1ee8583501a285ee70c66ad9dd25bde34 100644
--- a/src/libraries/qed/export_why3.ml
+++ b/src/libraries/qed/export_why3.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/export_why3.mli b/src/libraries/qed/export_why3.mli
index 2e5ce0a7c6a45cf7451f8c3e308f6ceb92067ebd..40cd7e5343770bdce453d36e553a955f18db2bbb 100644
--- a/src/libraries/qed/export_why3.mli
+++ b/src/libraries/qed/export_why3.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/export_whycore.ml b/src/libraries/qed/export_whycore.ml
index bf7d186eaaf57199bd3887423f1003da11300db4..5e4cbc1566a2ce24b79f17d82c5c819c3fa3a447 100644
--- a/src/libraries/qed/export_whycore.ml
+++ b/src/libraries/qed/export_whycore.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/export_whycore.mli b/src/libraries/qed/export_whycore.mli
index 5cf5087a5f715b83c72375949cd3ba18c01eb16f..847b0fb4e0bc7cb1d830a2b2fbd4f98d7666791e 100644
--- a/src/libraries/qed/export_whycore.mli
+++ b/src/libraries/qed/export_whycore.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/hcons.ml b/src/libraries/qed/hcons.ml
index ae669ce77cdb817b74df905a2fe702f782400424..aaadfc72b2064f5aae128748bdd35413d9804d48 100644
--- a/src/libraries/qed/hcons.ml
+++ b/src/libraries/qed/hcons.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/hcons.mli b/src/libraries/qed/hcons.mli
index dad5f50c53e01838ba8a86bb402e365ce639d294..34c5a07b293d7bc5ffa61feffc8ec7e549fc7cb7 100644
--- a/src/libraries/qed/hcons.mli
+++ b/src/libraries/qed/hcons.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/idxmap.ml b/src/libraries/qed/idxmap.ml
index 2a9c3d4c46b2bfdc1017d737fcd027bf7128af78..66afe58a19f42c9dffdab0205a1170e54d5bd122 100644
--- a/src/libraries/qed/idxmap.ml
+++ b/src/libraries/qed/idxmap.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/idxmap.mli b/src/libraries/qed/idxmap.mli
index fef87184388118d01314519f586624d6276cbc9d..f451fb625c0e115f69e641575802c37499153a09 100644
--- a/src/libraries/qed/idxmap.mli
+++ b/src/libraries/qed/idxmap.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/idxset.ml b/src/libraries/qed/idxset.ml
index 115b3c6aedb88b5140e16bfc47b69ce89b2124f6..473ab303bc6c41129ff35e14575b01f813c97f60 100644
--- a/src/libraries/qed/idxset.ml
+++ b/src/libraries/qed/idxset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/idxset.mli b/src/libraries/qed/idxset.mli
index f3e37ec6f6f32c677cb131eb55f0801000f5eda3..c74e455c7a37eb41a6c5f422b0152cb704b8075a 100644
--- a/src/libraries/qed/idxset.mli
+++ b/src/libraries/qed/idxset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/intmap.ml b/src/libraries/qed/intmap.ml
index eff82f5b679c41a0afa450f882607cf3ae87ab3f..cf58b031653a546a19958ff8276fcac3fa40eced 100644
--- a/src/libraries/qed/intmap.ml
+++ b/src/libraries/qed/intmap.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/intmap.mli b/src/libraries/qed/intmap.mli
index 16f6c244c40e7aaf980ebd3df54e3cbd1a6aa207..9e9d120ee7d72adee05637fb660eab026c55ec09 100644
--- a/src/libraries/qed/intmap.mli
+++ b/src/libraries/qed/intmap.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/intset.ml b/src/libraries/qed/intset.ml
index 03143f51f21aa75f9aee2ca6024d56e30aec347d..4dc5eeaaa0080c69cd22a96636e9c254a69f8d34 100644
--- a/src/libraries/qed/intset.ml
+++ b/src/libraries/qed/intset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/intset.mli b/src/libraries/qed/intset.mli
index 49ff156a8bd820259e7d9f2361de3e6a214cf802..df5a2df6257367537d71925c58734a918f98065e 100644
--- a/src/libraries/qed/intset.mli
+++ b/src/libraries/qed/intset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/kind.ml b/src/libraries/qed/kind.ml
index d89c7c1b8d48bf0c1c859d286e2e7d6271cf3b7d..b0e94743fa7ad6ed1974814d92254a82ca91441b 100644
--- a/src/libraries/qed/kind.ml
+++ b/src/libraries/qed/kind.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/kind.mli b/src/libraries/qed/kind.mli
index 70bf70f633d8b192bb3e18b04b27fb860dae8099..5b69253b5b990ec97b7d64264dc0762455f5155f 100644
--- a/src/libraries/qed/kind.mli
+++ b/src/libraries/qed/kind.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/listmap.ml b/src/libraries/qed/listmap.ml
index 7dae0e1a82fc57ba4e3d15364b59fca911c8ed79..0bdaa8c417858fd5438dee5c4faa22bf8f09553d 100644
--- a/src/libraries/qed/listmap.ml
+++ b/src/libraries/qed/listmap.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/listmap.mli b/src/libraries/qed/listmap.mli
index 1302be302806738ccd61072cbddea09038bcca3b..3dc013d0248ad126ab39737cc781e52efda17682 100644
--- a/src/libraries/qed/listmap.mli
+++ b/src/libraries/qed/listmap.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/listset.ml b/src/libraries/qed/listset.ml
index 1ff9ca9740c028113362dcae5024995bbe2e16f5..968dd69815d780158649a12efb3c9cb539f26e65 100644
--- a/src/libraries/qed/listset.ml
+++ b/src/libraries/qed/listset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/listset.mli b/src/libraries/qed/listset.mli
index b8e0ed90141e2a027afb4ae28e5d2484f16526f8..2db83e33bb03e5c0d8c901adcf0d6fe1d9aa53bb 100644
--- a/src/libraries/qed/listset.mli
+++ b/src/libraries/qed/listset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/logic.ml b/src/libraries/qed/logic.ml
index 5d82754b84655bffe523969746625e8313ad1b97..85c534dec6f9c76dec9256514937da614f2e4e71 100644
--- a/src/libraries/qed/logic.ml
+++ b/src/libraries/qed/logic.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/mergemap.ml b/src/libraries/qed/mergemap.ml
index d8c9ac3a2d07ba7292d1f729e6097939c11c997d..b7e4dba86efe32fbe8cc2e8d48c1d000fd7ab86d 100644
--- a/src/libraries/qed/mergemap.ml
+++ b/src/libraries/qed/mergemap.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/mergemap.mli b/src/libraries/qed/mergemap.mli
index 5d4a3afd220a1779ae0da892a878323f80444cdf..26f67e40897fc9125ee7add5bd629968c8f4f868 100644
--- a/src/libraries/qed/mergemap.mli
+++ b/src/libraries/qed/mergemap.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/mergeset.ml b/src/libraries/qed/mergeset.ml
index 39e139249f7444e099f4618daaea84f6ce418d6e..f43e534f7530b2b9e7e772b4f605254a7cb78764 100644
--- a/src/libraries/qed/mergeset.ml
+++ b/src/libraries/qed/mergeset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/mergeset.mli b/src/libraries/qed/mergeset.mli
index b5946b122e452a3989e282a265d50440866900a1..6064ca123989833e6d6f1240854c24941ce40117 100644
--- a/src/libraries/qed/mergeset.mli
+++ b/src/libraries/qed/mergeset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/partition.ml b/src/libraries/qed/partition.ml
index 65bd82c40a18a24154533cc3c9804924b196d4e7..7ebac9be0d34dd2e020f8be2f52948f2f907947b 100644
--- a/src/libraries/qed/partition.ml
+++ b/src/libraries/qed/partition.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/partition.mli b/src/libraries/qed/partition.mli
index 1f0ba435a24cae3eb1653f543a52b7d382226ab6..f7ddf50ac2fa9b9c7b3a6ae40f7277a72c1905f2 100644
--- a/src/libraries/qed/partition.mli
+++ b/src/libraries/qed/partition.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/plib.ml b/src/libraries/qed/plib.ml
index c7e8c483594b3babb50dcc879baf31c9bf659688..8912993e46e4dcd16ca719bcf6c8ec5ee8e589b1 100644
--- a/src/libraries/qed/plib.ml
+++ b/src/libraries/qed/plib.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/plib.mli b/src/libraries/qed/plib.mli
index a198d302d1c9d6dc1c03e547a8d7ee134c5fec06..427e8aab40528378d95681b724d132e6fb8714ea 100644
--- a/src/libraries/qed/plib.mli
+++ b/src/libraries/qed/plib.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/pool.ml b/src/libraries/qed/pool.ml
index b817c26909c861036e92fa30512b6e5b679c8063..56fb40fdd9b138b872ce4c0bd6dc66a11504d84e 100644
--- a/src/libraries/qed/pool.ml
+++ b/src/libraries/qed/pool.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/pool.mli b/src/libraries/qed/pool.mli
index ea3845fb60ee44f09d687be9e4eca020e46200d9..c64c4aa476c31db05378a187edf9dbe40e8057a1 100644
--- a/src/libraries/qed/pool.mli
+++ b/src/libraries/qed/pool.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/pretty.ml b/src/libraries/qed/pretty.ml
index b39a5955bcee17531de21814ce9bc0dd7179dfc2..d375c64be7cd6c07d605b1322a79aa65cc28f022 100644
--- a/src/libraries/qed/pretty.ml
+++ b/src/libraries/qed/pretty.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/pretty.mli b/src/libraries/qed/pretty.mli
index 3a99c252d569578bf431f8172b53c3d490e113fe..6f3bf6c8433c289517def7048b8ed08458cb020c 100644
--- a/src/libraries/qed/pretty.mli
+++ b/src/libraries/qed/pretty.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/term.ml b/src/libraries/qed/term.ml
index bd6a98bf5ee9380f48ad4f4ccf5296a367764f63..e38cd36fa36a39fff9b72bb0409a96631a4179d7 100644
--- a/src/libraries/qed/term.ml
+++ b/src/libraries/qed/term.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/qed/term.mli b/src/libraries/qed/term.mli
index 7659047574a021e8be9ed86c8c59c74e9222d80f..4ecc670ab8fc285c727d22a993252ff6e64eb7c0 100644
--- a/src/libraries/qed/term.mli
+++ b/src/libraries/qed/term.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/stdlib/FCHashtbl.ml b/src/libraries/stdlib/FCHashtbl.ml
index ca3765f2859907ae5ffac6a6932a8ccb19ac906d..1fbb9b6d17625cfb7422082577cac8386db0683d 100644
--- a/src/libraries/stdlib/FCHashtbl.ml
+++ b/src/libraries/stdlib/FCHashtbl.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/stdlib/FCHashtbl.mli b/src/libraries/stdlib/FCHashtbl.mli
index b2b089df23ef73d070b53f6fcbf4f4aecdb7faab..376ed5cf3bf423e2b3f0abba5d50550f388d2070 100644
--- a/src/libraries/stdlib/FCHashtbl.mli
+++ b/src/libraries/stdlib/FCHashtbl.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/stdlib/extlib.ml b/src/libraries/stdlib/extlib.ml
index 4d1eef922a1dc8ddcb50337087aebc1b188efbd8..85e12b8b083124588bdaf97b3e18220890da9b29 100644
--- a/src/libraries/stdlib/extlib.ml
+++ b/src/libraries/stdlib/extlib.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/stdlib/extlib.mli b/src/libraries/stdlib/extlib.mli
index 6549dcbd1b7f869b847a188ac0d6cc8901d143d2..26195f813742cab574d8a19f67c444f9287123f8 100644
--- a/src/libraries/stdlib/extlib.mli
+++ b/src/libraries/stdlib/extlib.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/stdlib/integer.ml b/src/libraries/stdlib/integer.ml
index 41a79b24d49bbaded3870d67f9ac7a9d40c4bc58..7cd8055eaeed25bb8bcd20b051ff8a50b53d187b 100644
--- a/src/libraries/stdlib/integer.ml
+++ b/src/libraries/stdlib/integer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/stdlib/integer.mli b/src/libraries/stdlib/integer.mli
index 7c51e8732a87c7f7e346d1d55a08b1893f23fd17..73bab4037654230580768e8c8c41c07209f55eba 100644
--- a/src/libraries/stdlib/integer.mli
+++ b/src/libraries/stdlib/integer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/stdlib/transitioning.ml b/src/libraries/stdlib/transitioning.ml
index 38937e6f5cbdd8f968d744b6d7dfb2542a655480..b2ba7f474b6ba5a166e623763d86268a8cd05ba9 100644
--- a/src/libraries/stdlib/transitioning.ml
+++ b/src/libraries/stdlib/transitioning.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/stdlib/transitioning.mli b/src/libraries/stdlib/transitioning.mli
index 1954b47f420ad0981b2c2dc7f5c78d8fee853f75..74755da99268ccc8493c20524eb067ce7ca16ca3 100644
--- a/src/libraries/stdlib/transitioning.mli
+++ b/src/libraries/stdlib/transitioning.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/bag.ml b/src/libraries/utils/bag.ml
index 83d9273ce7ad3c7bc48c66355ae58b5bc444e0c2..02ef0452c59ae8e6311d92d4e551f76c0c6d22e7 100644
--- a/src/libraries/utils/bag.ml
+++ b/src/libraries/utils/bag.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/bag.mli b/src/libraries/utils/bag.mli
index 4c9e704b23f688969a974b6fca08e601ef9cc841..a40bfb8e65bcc8303fefc4543d86cefcc02ec2d1 100644
--- a/src/libraries/utils/bag.mli
+++ b/src/libraries/utils/bag.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/binary_cache.ml b/src/libraries/utils/binary_cache.ml
index 214df570bd203372a6b0d0fcef077e4a51a92c05..d09dc88bc798fe3979a858a9872dd01324dfdafb 100644
--- a/src/libraries/utils/binary_cache.ml
+++ b/src/libraries/utils/binary_cache.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/binary_cache.mli b/src/libraries/utils/binary_cache.mli
index 9e1640d731f8c566b00e09bc4f10aa6762920699..52ab1806447caa701f022162615c9f95d8908338 100644
--- a/src/libraries/utils/binary_cache.mli
+++ b/src/libraries/utils/binary_cache.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/bitvector.ml b/src/libraries/utils/bitvector.ml
index 1b6081ca6c9972e16459741601ab6a5e6fed6a9b..81e39b2a01523b7352bf9f7797a2d2441de2b3a3 100644
--- a/src/libraries/utils/bitvector.ml
+++ b/src/libraries/utils/bitvector.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/bitvector.mli b/src/libraries/utils/bitvector.mli
index 429f91b48b406f6e7051c8c9fdbf62dbec9486e3..dffc1b512a253ddf6d0a52090ef73f14e582d560 100644
--- a/src/libraries/utils/bitvector.mli
+++ b/src/libraries/utils/bitvector.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/c_bindings.c b/src/libraries/utils/c_bindings.c
index e5d1c2fd5e05edc268001ee0a8d023aaa892b4c1..ecdad364bcd92217451879c0a3e2a619561a4d45 100644
--- a/src/libraries/utils/c_bindings.c
+++ b/src/libraries/utils/c_bindings.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Frama-C.                                         */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/libraries/utils/cilconfig.ml b/src/libraries/utils/cilconfig.ml
index 4b479e985f7674cdaa4ac5a21df7e2a720b1c968..844ea8a1c4db9b418e05b6f3b829d7155856b3c4 100644
--- a/src/libraries/utils/cilconfig.ml
+++ b/src/libraries/utils/cilconfig.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 module H = Hashtbl
diff --git a/src/libraries/utils/cilconfig.mli b/src/libraries/utils/cilconfig.mli
index ab24929647418b9019399fd591ecd45ea1fc3be7..46e5a7b3441a87d8306c12aa26e8e5f802221181 100644
--- a/src/libraries/utils/cilconfig.mli
+++ b/src/libraries/utils/cilconfig.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 
diff --git a/src/libraries/utils/command.ml b/src/libraries/utils/command.ml
index f2211d8a389b0a6f35b2bdff706b145089ea98c8..4052871a30ad329bab925e1c351042cf14c1ae2c 100644
--- a/src/libraries/utils/command.ml
+++ b/src/libraries/utils/command.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/command.mli b/src/libraries/utils/command.mli
index b6ce12d959bd1b1fe13f54b8e77d182244c525b0..7a6a5b2579b05678719fb83a3ffee2f57130013a 100644
--- a/src/libraries/utils/command.mli
+++ b/src/libraries/utils/command.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -126,7 +126,7 @@ val command :
     process will be filled into the arguments buffer.
     @raise Sys_error when a system error occurs
     @raise Async.Cancel when the computation is interrupted or on timeout
-    @before Frama-C+dev Async.Cancel was Db.Cancel
+    @before 29.0-Copper Async.Cancel was Db.Cancel
 *)
 
 (*
diff --git a/src/libraries/utils/dotgraph.ml b/src/libraries/utils/dotgraph.ml
index 65b635adee55e05278b0c371fa8c3fc82533197d..e389abeada4bf18d27d5e0c894693780bc98badb 100644
--- a/src/libraries/utils/dotgraph.ml
+++ b/src/libraries/utils/dotgraph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/dotgraph.mli b/src/libraries/utils/dotgraph.mli
index 3d8b7d35b66acaa3054ba6709af3f729123fd577..b7f8bcc7d9be0b72b46520d73735d34ce1c93d5b 100644
--- a/src/libraries/utils/dotgraph.mli
+++ b/src/libraries/utils/dotgraph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/dune b/src/libraries/utils/dune
index 9c34cfa937f13f28946d603f4276eb917df03e4d..c29f96998bca398c6f31c04ef567853a63087ec3 100644
--- a/src/libraries/utils/dune
+++ b/src/libraries/utils/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/libraries/utils/escape.ml b/src/libraries/utils/escape.ml
index bed960e171cfbc914c92f7b5544201e9b835c09f..bb4b73c807181fde9be46c06aad1ecbfd3e77a4c 100644
--- a/src/libraries/utils/escape.ml
+++ b/src/libraries/utils/escape.ml
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 
diff --git a/src/libraries/utils/escape.mli b/src/libraries/utils/escape.mli
index d43bb622df4afb9196de0083a664432414df1b68..49ef2c2cfb6e739a8d2df3e38edab844f71f285e 100644
--- a/src/libraries/utils/escape.mli
+++ b/src/libraries/utils/escape.mli
@@ -39,6 +39,7 @@
 (*                        énergies alternatives)                            *)
 (*               and INRIA (Institut National de Recherche en Informatique  *)
 (*                          et Automatique).                                *)
+(*                                                                          *)
 (****************************************************************************)
 
 (*
diff --git a/src/libraries/utils/filepath.ml b/src/libraries/utils/filepath.ml
index 4998c5f9d5074ab9de3ada998fc0e4fcca7b922a..30fe58b34cd0d96ce9ad20056d61d3ec8d04b538 100644
--- a/src/libraries/utils/filepath.ml
+++ b/src/libraries/utils/filepath.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/filepath.mli b/src/libraries/utils/filepath.mli
index cb514384a962c603e1d6c8bb827d2fd912a5c2a7..e41e6940082440037bf97db038080b74b39cdded 100644
--- a/src/libraries/utils/filepath.mli
+++ b/src/libraries/utils/filepath.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -78,7 +78,7 @@ module Normalized: sig
       [file] ^ [ext]. Note that it does not introduce a dot.
       The resulting path must respect [existence].
 
-      @since Frama-C+dev
+      @since 29.0-Copper
   *)
   val extend: ?existence:existence -> t -> string -> t
 
diff --git a/src/libraries/utils/floating_point.ml b/src/libraries/utils/floating_point.ml
index 905b63e4aebe4290863dd2b2886367990a333de3..dc313bcbc397e9072d805816b7de60b0aa88a8da 100644
--- a/src/libraries/utils/floating_point.ml
+++ b/src/libraries/utils/floating_point.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/floating_point.mli b/src/libraries/utils/floating_point.mli
index 8d9be2050ed87eb66c1c8688991be50c29c29d60..808d381de1944dd0008b2a5f2edebeb81684555a 100644
--- a/src/libraries/utils/floating_point.mli
+++ b/src/libraries/utils/floating_point.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/hook.ml b/src/libraries/utils/hook.ml
index dccb6eacfac8e77549246b3050159af35f7f4348..2dfdb891eff1aad81edc9ab31abb537badfe7cd7 100644
--- a/src/libraries/utils/hook.ml
+++ b/src/libraries/utils/hook.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/hook.mli b/src/libraries/utils/hook.mli
index 211203b959db7665c35efb2f7708353d930609e6..b29daf09b84777667a3ec3abc79e00290d839964 100644
--- a/src/libraries/utils/hook.mli
+++ b/src/libraries/utils/hook.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/hptset.ml b/src/libraries/utils/hptset.ml
index 11c615ef411e9de8a5a69cef7071a253a1b35361..a0f560b2480ca38e8f9033ef5f4336164ad0cb84 100644
--- a/src/libraries/utils/hptset.ml
+++ b/src/libraries/utils/hptset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/hptset.mli b/src/libraries/utils/hptset.mli
index afa84ebd72c521c76024dfab235b4a772da4341a..5a0422db5fc398543ec2d851ddf5c1df06321751 100644
--- a/src/libraries/utils/hptset.mli
+++ b/src/libraries/utils/hptset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/indexer.ml b/src/libraries/utils/indexer.ml
index d1b73672c2a573ccc9f6dd3d8a40cda897df0e51..9c144b9ff822335d8a4874040c7969d5838f7acb 100644
--- a/src/libraries/utils/indexer.ml
+++ b/src/libraries/utils/indexer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/indexer.mli b/src/libraries/utils/indexer.mli
index 98a5bc8f4796018bb2ba2e7745e69c6e3e0c013b..4a4f035dd8e0153863b416a961e1c8ee95ff61b1 100644
--- a/src/libraries/utils/indexer.mli
+++ b/src/libraries/utils/indexer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/json.mli b/src/libraries/utils/json.mli
index cbf326061cc3d9e857c9f19fc462a29a3934e6b6..228b4bdf3f3f1817c9841400f58f219a38471786 100644
--- a/src/libraries/utils/json.mli
+++ b/src/libraries/utils/json.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/json.mll b/src/libraries/utils/json.mll
index 82165703b204e8a6e98dd4dfa19968cc02df7ca5..f5edcc2b636728c81b59b92c8e57a6a63e5d0b0e 100644
--- a/src/libraries/utils/json.mll
+++ b/src/libraries/utils/json.mll
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/markdown.ml b/src/libraries/utils/markdown.ml
index 11e8c38aee44358568fa167cf43f00c7393a1ca0..f8dd5d6fb7daced384522b40649fd356f4b1ef80 100644
--- a/src/libraries/utils/markdown.ml
+++ b/src/libraries/utils/markdown.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/markdown.mli b/src/libraries/utils/markdown.mli
index bcf9eaa427a93964603cded35b8118099fa7786c..f4bfd80a26f53df46e4bdb5e8c513cf96adc09da 100644
--- a/src/libraries/utils/markdown.mli
+++ b/src/libraries/utils/markdown.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/option.ml b/src/libraries/utils/option.ml
index fa7cea3f18a311c426a4cb23062a38d5c7648f00..dc7cf73b39f51f4cb9c2912f4ce5ce1acf34bada 100644
--- a/src/libraries/utils/option.ml
+++ b/src/libraries/utils/option.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/option.mli b/src/libraries/utils/option.mli
index 0fa4d478691d8303df57e0ad5c0f9bee48443963..2f8cbed250f26dd3e4d3ae08c808f396c3d51642 100644
--- a/src/libraries/utils/option.mli
+++ b/src/libraries/utils/option.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/parray.ml b/src/libraries/utils/parray.ml
index fd022290d664dfb8d8758c0063a60941b75ed2a8..4dd699238eb548bd9066dbfdce597c6e2c45133c 100644
--- a/src/libraries/utils/parray.ml
+++ b/src/libraries/utils/parray.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/parray.mli b/src/libraries/utils/parray.mli
index b7eb12ecc0c03550494978d9b130e1d52977cb21..2d4bc2e1861d2fe81c2e8f476a53c0ddc600c861 100644
--- a/src/libraries/utils/parray.mli
+++ b/src/libraries/utils/parray.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/pretty_utils.ml b/src/libraries/utils/pretty_utils.ml
index a062ff104541347dda5da6c439e993cc526fd52d..b45091105571b31ea853dfe1f5891833b170f64d 100644
--- a/src/libraries/utils/pretty_utils.ml
+++ b/src/libraries/utils/pretty_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/pretty_utils.mli b/src/libraries/utils/pretty_utils.mli
index 01307b8b808e4193b5b3e57a4853fc8639dff767..4e3622182141bd02cd96d4416fd0b9ac6ed27fcf 100644
--- a/src/libraries/utils/pretty_utils.mli
+++ b/src/libraries/utils/pretty_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/qstack.ml b/src/libraries/utils/qstack.ml
index b746e22cbca3892a079274b174073f10b1f576e9..54ffc09cb55716bf7e0194a3d4d74537820cc44a 100644
--- a/src/libraries/utils/qstack.ml
+++ b/src/libraries/utils/qstack.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/qstack.mli b/src/libraries/utils/qstack.mli
index 77847faba1393afa2c96049ae61e1cfbfac50634..b40c9fb376aa218af554315838b50899786e1aea 100644
--- a/src/libraries/utils/qstack.mli
+++ b/src/libraries/utils/qstack.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/rgmap.ml b/src/libraries/utils/rgmap.ml
index 1d3d2815b216a186291a4faaac2e6ae9c2fbc566..3e16063289ecf5897028849bfcbe988a82698218 100644
--- a/src/libraries/utils/rgmap.ml
+++ b/src/libraries/utils/rgmap.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/rgmap.mli b/src/libraries/utils/rgmap.mli
index 3913d7d42278eca2b1176f54f26d8e520a586be7..cb2173deb7104b5557ac01aa975cd0d6c7c9000d 100644
--- a/src/libraries/utils/rgmap.mli
+++ b/src/libraries/utils/rgmap.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/rich_text.ml b/src/libraries/utils/rich_text.ml
index 0e89da3e951b97ed3bc7ec9fb409c9ac9880d2d9..d7544da7ac9ba1a017fbaed664e854013630d59e 100644
--- a/src/libraries/utils/rich_text.ml
+++ b/src/libraries/utils/rich_text.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/rich_text.mli b/src/libraries/utils/rich_text.mli
index dd77a4cf2d3a3548b514dd6a3c88e8eb9d995da4..882afe146ccd31310ac53ce15aee91bad9861ece 100644
--- a/src/libraries/utils/rich_text.mli
+++ b/src/libraries/utils/rich_text.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/sanitizer.ml b/src/libraries/utils/sanitizer.ml
index f26c7ad4ae97e7a4c93382ff126c376c1d21a05f..76632d53286e11e1b2e030f7066515b083decf9a 100644
--- a/src/libraries/utils/sanitizer.ml
+++ b/src/libraries/utils/sanitizer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/sanitizer.mli b/src/libraries/utils/sanitizer.mli
index 9228ff89be45c231bfc80b9981644f451a881baa..71bb98df6a83bc30a2b2b5c922976a8f66b7eb38 100644
--- a/src/libraries/utils/sanitizer.mli
+++ b/src/libraries/utils/sanitizer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/task.ml b/src/libraries/utils/task.ml
index 86beb2188dcd814d62676ebcda0e2a1686fa7d17..9a9ea0d30c446e09d070a0b3f08888f84a4d346c 100644
--- a/src/libraries/utils/task.ml
+++ b/src/libraries/utils/task.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/task.mli b/src/libraries/utils/task.mli
index 3cb276e9b66a9e1ca39bf9d583f91a663b5f9148..4d91a2e7230c3731d314ef255fb8bd41da4dfd0f 100644
--- a/src/libraries/utils/task.mli
+++ b/src/libraries/utils/task.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/unicode.ml b/src/libraries/utils/unicode.ml
index cd60f158f00401f2c0c1b65d21be7e58e39877b2..e345a2989d44781af98f1f07f2cf1dbf4934c191 100644
--- a/src/libraries/utils/unicode.ml
+++ b/src/libraries/utils/unicode.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/unicode.mli b/src/libraries/utils/unicode.mli
index c3f78ecf9d2622f3c67bf1e29068600d719d296f..018f7dee8d9287e8d04ebf31a7503ad3f838dafb 100644
--- a/src/libraries/utils/unicode.mli
+++ b/src/libraries/utils/unicode.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/utf8_logic.ml b/src/libraries/utils/utf8_logic.ml
index e2bfd99cbde4c62f4dca5637d04095faa3bd83e4..4cffcc6a87f398b838dd5a453917b7b0531656c3 100644
--- a/src/libraries/utils/utf8_logic.ml
+++ b/src/libraries/utils/utf8_logic.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/libraries/utils/utf8_logic.mli b/src/libraries/utils/utf8_logic.mli
index 9b758a2ccf0d77ef3880680f26be932570556416..e59df584a0456bdf263e53e4f0e478f9677295b1 100644
--- a/src/libraries/utils/utf8_logic.mli
+++ b/src/libraries/utils/utf8_logic.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA   (Commissariat à l'énergie atomique et aux énergies            *)
 (*           alternatives)                                                *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/libraries/utils/vector.ml b/src/libraries/utils/vector.ml
index eb8737039f0fe801f3aff341ffe4068c21710324..d50d134b9d24e2986c36e83004f89e7cffe685ce 100644
--- a/src/libraries/utils/vector.ml
+++ b/src/libraries/utils/vector.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/vector.mli b/src/libraries/utils/vector.mli
index 0a7355da862592e40e0372c98522f69dace905fb..7ec6c75359518a3fa6cf7a8a9226ed08e6905dd4 100644
--- a/src/libraries/utils/vector.mli
+++ b/src/libraries/utils/vector.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/wto.ml b/src/libraries/utils/wto.ml
index a116d5ec30192421c41b6a9859be67c01ec78726..9c71dc4455e09cf2efba2d8e0130cfb7fcf29464 100644
--- a/src/libraries/utils/wto.ml
+++ b/src/libraries/utils/wto.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/libraries/utils/wto.mli b/src/libraries/utils/wto.mli
index b1d42817585f786e813f625dd34255e748d55997..2895266d2c3bd99e76aba02d11fb13039dd00149 100644
--- a/src/libraries/utils/wto.mli
+++ b/src/libraries/utils/wto.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/dune-project b/src/plugins/alias/dune-project
index f49e605ee0f8d8a02a530ca2a98a353274404140..4b61474b614f1b8711cf2001198b56ffa7feede5 100644
--- a/src/plugins/alias/dune-project
+++ b/src/plugins/alias/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/alias/src/API.ml b/src/plugins/alias/src/API.ml
index 6c8c4d752be814363f4743fdf94b08fe773dcef1..22163eab6f156fc26dc9d85322c66b63747e9cbb 100644
--- a/src/plugins/alias/src/API.ml
+++ b/src/plugins/alias/src/API.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/API.mli b/src/plugins/alias/src/API.mli
index 16ae5671ca48d5fdb98b761c1b6bc9dd110b80f7..bd289ae466ff4782f175d266794176fe9125c3f2 100644
--- a/src/plugins/alias/src/API.mli
+++ b/src/plugins/alias/src/API.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/Alias.ml b/src/plugins/alias/src/Alias.ml
index fa71e931f156b8dad9bd99cae34fab8fe65e6df2..b3a88b190fedb25e32113ca0cca3f2ff8f163918 100644
--- a/src/plugins/alias/src/Alias.ml
+++ b/src/plugins/alias/src/Alias.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/Alias.mli b/src/plugins/alias/src/Alias.mli
index 32413b01810b62d778604e2c0b9c6188b7498db3..13fccc2bf064adb441f44a3362f4af0c9b4394e4 100644
--- a/src/plugins/alias/src/Alias.mli
+++ b/src/plugins/alias/src/Alias.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/abstract_state.ml b/src/plugins/alias/src/abstract_state.ml
index a0586c9e13e03497e981b7284e513844fed1fcc2..6d31805925d85b9dcca19da18027bd3ee4a7ab1f 100644
--- a/src/plugins/alias/src/abstract_state.ml
+++ b/src/plugins/alias/src/abstract_state.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/abstract_state.mli b/src/plugins/alias/src/abstract_state.mli
index 3ce14f326a4d76f5afb60cb2e5d03b2d022aed46..0f5a1c8e11953f3caaf5f0af571680c2501c53e8 100644
--- a/src/plugins/alias/src/abstract_state.mli
+++ b/src/plugins/alias/src/abstract_state.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/analysis.ml b/src/plugins/alias/src/analysis.ml
index 76cfa1998191402a80b104f54dd0a2404fd8534b..54bcd5cffcb9fa76b3e97617e0325cc0b91038a4 100644
--- a/src/plugins/alias/src/analysis.ml
+++ b/src/plugins/alias/src/analysis.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/analysis.mli b/src/plugins/alias/src/analysis.mli
index 2b8353181ca9d43edb8ff1c3a8e65413fabd9ee3..9911351e1586e3d7423ef7fcae4cbc945e01bfb3 100644
--- a/src/plugins/alias/src/analysis.mli
+++ b/src/plugins/alias/src/analysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/dune b/src/plugins/alias/src/dune
index a80c5018589cb73e8d1bd3b80181cbcf540b5d55..1f9b95589c22f97cbe1fe806cd2ced50daa2ffe4 100644
--- a/src/plugins/alias/src/dune
+++ b/src/plugins/alias/src/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/alias/src/options.ml b/src/plugins/alias/src/options.ml
index af30d67a8b3feaae8d205d557f5642ebd0a5a398..bf8fb4e95dc29bf800499e699c686b666eee66df 100644
--- a/src/plugins/alias/src/options.ml
+++ b/src/plugins/alias/src/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/options.mli b/src/plugins/alias/src/options.mli
index 603c67bcb21e5ee8e0be6001c2b7e4179fb6a9c6..4b05759577165c80f2fc577a2bb19d961edd3bee 100644
--- a/src/plugins/alias/src/options.mli
+++ b/src/plugins/alias/src/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/simplified.ml b/src/plugins/alias/src/simplified.ml
index f9722a3a84153361f7f8a6cb10121d50feabef65..485f732d48b55eb7f4df3beb67d9a46870c74e3c 100644
--- a/src/plugins/alias/src/simplified.ml
+++ b/src/plugins/alias/src/simplified.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/alias/src/simplified.mli b/src/plugins/alias/src/simplified.mli
index b0fc8070450982487cbe5eefabdbac43047993f4..478e244649e5dd9864758269703715f8aacb9205 100644
--- a/src/plugins/alias/src/simplified.mli
+++ b/src/plugins/alias/src/simplified.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/aorai/Aorai.ml b/src/plugins/aorai/Aorai.ml
index f68572fec355d1b1f56728e636622263a68b7b54..1750bd51dbaed76fc1c30642aabc155a8641ee5d 100644
--- a/src/plugins/aorai/Aorai.ml
+++ b/src/plugins/aorai/Aorai.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_dataflow.ml b/src/plugins/aorai/aorai_dataflow.ml
index 3214c3b5596c782eb65988eed90070d9015c7458..29b4dc43443b464a3fbe107fb40144c67911ed1c 100644
--- a/src/plugins/aorai/aorai_dataflow.ml
+++ b/src/plugins/aorai/aorai_dataflow.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_dataflow.mli b/src/plugins/aorai/aorai_dataflow.mli
index 3abd40d1d43ae8d503ac9490933ba0ab65dfd6ac..6475a3d1f6958c5d7871f0f40f1e156ae96c480b 100644
--- a/src/plugins/aorai/aorai_dataflow.mli
+++ b/src/plugins/aorai/aorai_dataflow.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_eva_analysis.disabled.ml b/src/plugins/aorai/aorai_eva_analysis.disabled.ml
index 3e73bf22775601e8fb9dee5ec3eae1c5747d2380..65e8ea4923cf3502983e85ddf64355171ba4f760 100644
--- a/src/plugins/aorai/aorai_eva_analysis.disabled.ml
+++ b/src/plugins/aorai/aorai_eva_analysis.disabled.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_eva_analysis.enabled.ml b/src/plugins/aorai/aorai_eva_analysis.enabled.ml
index 9d0e0e5cfb44b2abdd6ca9b0c2fb1a892798517e..9a9df3c2ca5e854cadb7226ae09a6620a8ee796b 100644
--- a/src/plugins/aorai/aorai_eva_analysis.enabled.ml
+++ b/src/plugins/aorai/aorai_eva_analysis.enabled.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
@@ -36,8 +36,8 @@ let show_aorai_variable state fmt var_name =
 
 let show_val fmt (expr, v) =
   Format.fprintf fmt "%a in %a"
-    Printer.pp_exp expr
-    (Cvalue.V.pretty_typ (Some (Cil.typeOf expr))) v
+    Eva.Eva_ast.pp_exp expr
+    (Cvalue.V.pretty_typ (Some expr.typ)) v
 
 let show_non_det_state fmt state =
   let (states,_) = Data_for_aorai.getGraph () in
diff --git a/src/plugins/aorai/aorai_eva_analysis.mli b/src/plugins/aorai/aorai_eva_analysis.mli
index 16c772348c915bea510d3aa4521fff75b0b5b934..83cb442d209239ace69956de43de2b267259dad2 100644
--- a/src/plugins/aorai/aorai_eva_analysis.mli
+++ b/src/plugins/aorai/aorai_eva_analysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_graph.ml b/src/plugins/aorai/aorai_graph.ml
index e5e9dbc93038274023f6caa1f2b85a371687431f..fb49222170363c4bf2956521b1dd567ad498398a 100644
--- a/src/plugins/aorai/aorai_graph.ml
+++ b/src/plugins/aorai/aorai_graph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_graph.mli b/src/plugins/aorai/aorai_graph.mli
index c2f53ac5c1777ff2a9ac60a3dc14c93e7419d849..ec9d48083fdfe63fee0fcedbd982364e1fd3cd05 100644
--- a/src/plugins/aorai/aorai_graph.mli
+++ b/src/plugins/aorai/aorai_graph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_metavariables.ml b/src/plugins/aorai/aorai_metavariables.ml
index f6b056eece63516f4004881966cb99eb3a2c58f1..9f4da23c17e0511bcd81192598b41b52a9c306ef 100644
--- a/src/plugins/aorai/aorai_metavariables.ml
+++ b/src/plugins/aorai/aorai_metavariables.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_metavariables.mli b/src/plugins/aorai/aorai_metavariables.mli
index 45cedf21bf4780ab3f89d162ca1995fda839cbea..6d5b6399ef04b6d8fa25c2432e77c988d9084500 100644
--- a/src/plugins/aorai/aorai_metavariables.mli
+++ b/src/plugins/aorai/aorai_metavariables.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_option.ml b/src/plugins/aorai/aorai_option.ml
index f01951235c08fcce8e0efd36f7f6d46a954620d3..fd5f5b8fb52a0cf6c7379be908802dbd468bba0f 100644
--- a/src/plugins/aorai/aorai_option.ml
+++ b/src/plugins/aorai/aorai_option.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_option.mli b/src/plugins/aorai/aorai_option.mli
index 47f81bc54954444dfc063e05c413208624f77fa5..143d444a86db0ea9978a3204633af148aba3dd15 100644
--- a/src/plugins/aorai/aorai_option.mli
+++ b/src/plugins/aorai/aorai_option.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_register.ml b/src/plugins/aorai/aorai_register.ml
index cc589bf59371c62ef0ca4131cf413a582d155060..ed51a5aac1437cf9c59651b1708f9ffa1dd66f7b 100644
--- a/src/plugins/aorai/aorai_register.ml
+++ b/src/plugins/aorai/aorai_register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_register.mli b/src/plugins/aorai/aorai_register.mli
index a358bdda2b5baad236fb394b3b4b0b79f2cb33c6..f8773d19ee10d7f5d3c321675b8752ed5713a370 100644
--- a/src/plugins/aorai/aorai_register.mli
+++ b/src/plugins/aorai/aorai_register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_utils.ml b/src/plugins/aorai/aorai_utils.ml
index d6c1c106a215b6873d4e92e6f5d29e4a63a84b43..9cb3ffa83183486aa64bcfe06c946dc9af72387a 100644
--- a/src/plugins/aorai/aorai_utils.ml
+++ b/src/plugins/aorai/aorai_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_utils.mli b/src/plugins/aorai/aorai_utils.mli
index bdbec9e51989210ea99a9a93f866795f3f0feea4..f2559c8da985d3556cc96f93df317e40667ff0f4 100644
--- a/src/plugins/aorai/aorai_utils.mli
+++ b/src/plugins/aorai/aorai_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_visitors.ml b/src/plugins/aorai/aorai_visitors.ml
index 7e0143da788ec331a2dd649cd93d9d7adba0236b..e1bc4cad120b9dd503d256e9623060f7138e0367 100644
--- a/src/plugins/aorai/aorai_visitors.ml
+++ b/src/plugins/aorai/aorai_visitors.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/aorai_visitors.mli b/src/plugins/aorai/aorai_visitors.mli
index 377275447cc1408acfafb0b2589957f5f729422e..2d86af28bdfea4efc0093561d98a583c83143842 100644
--- a/src/plugins/aorai/aorai_visitors.mli
+++ b/src/plugins/aorai/aorai_visitors.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/automaton_ast.ml b/src/plugins/aorai/automaton_ast.ml
index cc5c8596e1492ebed81f14e1e8a74cf79bfe68c8..85dec84c0a431a720e6780f8fac4c3e900aaf344 100644
--- a/src/plugins/aorai/automaton_ast.ml
+++ b/src/plugins/aorai/automaton_ast.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/bool3.ml b/src/plugins/aorai/bool3.ml
index aef41ba90c3383cc9206c73f8f78e6c43d4dcb60..80a3effa1431e0f325ce90ced1ddd86fdf2e295f 100644
--- a/src/plugins/aorai/bool3.ml
+++ b/src/plugins/aorai/bool3.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/bool3.mli b/src/plugins/aorai/bool3.mli
index ddd852a31c08ea9f3ef3b816000b798f5892c697..e5bfc120313ba500571da80767e77ef3dc2c3f09 100644
--- a/src/plugins/aorai/bool3.mli
+++ b/src/plugins/aorai/bool3.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/data_for_aorai.ml b/src/plugins/aorai/data_for_aorai.ml
index 4d6d4a13a2290a5a03cdef736827687c43a4eab6..de04fa6174b3c254124d94a18106b0d740784c5d 100644
--- a/src/plugins/aorai/data_for_aorai.ml
+++ b/src/plugins/aorai/data_for_aorai.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/data_for_aorai.mli b/src/plugins/aorai/data_for_aorai.mli
index 5e6861be95289b3b049c0b1ef2a19fe5e67d9236..bf6c5f5174a728a6dbeb51d580fb9774ff48f874 100644
--- a/src/plugins/aorai/data_for_aorai.mli
+++ b/src/plugins/aorai/data_for_aorai.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/dune b/src/plugins/aorai/dune
index 23a75aa916fa376e4efa41337af9660a2f21ed6c..33b803a97b843a73e1a24dedebf5cb6f87fad601 100644
--- a/src/plugins/aorai/dune
+++ b/src/plugins/aorai/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Aorai plug-in of Frama-C.                        ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;    INRIA (Institut National de Recherche en Informatique et en         ;;
diff --git a/src/plugins/aorai/dune-project b/src/plugins/aorai/dune-project
index 1d9642324234a3f0edb2ff97e8d45c837d51401a..093977902f1fa7d19c1e93100d4e913f6758f459 100644
--- a/src/plugins/aorai/dune-project
+++ b/src/plugins/aorai/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Aorai plug-in of Frama-C.                        ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;    INRIA (Institut National de Recherche en Informatique et en         ;;
diff --git a/src/plugins/aorai/logic_simplification.ml b/src/plugins/aorai/logic_simplification.ml
index 4dd12eb49fd62b119865c894a6c66422e3878c92..453ba22595723d00a53d3a74c8f61a2e6f0604e8 100644
--- a/src/plugins/aorai/logic_simplification.ml
+++ b/src/plugins/aorai/logic_simplification.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/logic_simplification.mli b/src/plugins/aorai/logic_simplification.mli
index f5627ef2ad25d2f10ce9cd2138349902f861cabf..2376c680efe0458487c4bb8ff64ed1c82aa0a4c1 100644
--- a/src/plugins/aorai/logic_simplification.mli
+++ b/src/plugins/aorai/logic_simplification.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/path_analysis.ml b/src/plugins/aorai/path_analysis.ml
index 70320ae2e86eac1bb6980f22c6760ec31477e931..32ca10994158e663c28cd830dd744f1f28d59e73 100644
--- a/src/plugins/aorai/path_analysis.ml
+++ b/src/plugins/aorai/path_analysis.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/path_analysis.mli b/src/plugins/aorai/path_analysis.mli
index 2ec68ef03347eac094e467b2c030aed33510fe17..d6815df641fc30e80520d6271666d8458614fb76 100644
--- a/src/plugins/aorai/path_analysis.mli
+++ b/src/plugins/aorai/path_analysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/pretty_automaton.ml b/src/plugins/aorai/pretty_automaton.ml
index ee099093d30e9840d52997001dff57614fd8376d..e5d1d661a2704b3661f30244146e181de02d7769 100644
--- a/src/plugins/aorai/pretty_automaton.ml
+++ b/src/plugins/aorai/pretty_automaton.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/pretty_automaton.mli b/src/plugins/aorai/pretty_automaton.mli
index 537bcd2e5e48078d3d35fd8d4c9561fb7e51a17c..16c0f0550f0bc01162b173f0f7313ac5d8f57e04 100644
--- a/src/plugins/aorai/pretty_automaton.mli
+++ b/src/plugins/aorai/pretty_automaton.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/tests/ya/oracle/serial.res.oracle b/src/plugins/aorai/tests/ya/oracle/serial.res.oracle
index b0da18f60ad52bf9071d86a5ca80ae0d8198b8cd..a65af24e91b5ef5559fd860b117a766a2491a90b 100644
--- a/src/plugins/aorai/tests/ya/oracle/serial.res.oracle
+++ b/src/plugins/aorai/tests/ya/oracle/serial.res.oracle
@@ -180,6 +180,18 @@ enum aorai_OpStatusList {
 };
 /* compiler builtin: 
    void Frama_C_show_aorai_state(...);   */
+/*@ ghost extern int __fc_heap_status; */
+
+/*@
+axiomatic dynamic_allocation {
+  predicate is_allocable{L}(ℤ n) 
+    reads __fc_heap_status;
+  
+  axiom never_allocable{L}:
+    ∀ ℤ i; i < 0 ∨ i > 18446744073709551615UL ⇒ ¬is_allocable(i);
+  
+  }
+ */
 extern int volatile Frama_C_entropy_source __attribute__((__unused__));
 
 /*@ requires order: min ≤ max;
diff --git a/src/plugins/aorai/utils_parser.ml b/src/plugins/aorai/utils_parser.ml
index f23a21f5898553216e22419821d67dd1e2ff5c8a..3ebbd026cb28744703257d5108157996ef23a7d1 100644
--- a/src/plugins/aorai/utils_parser.ml
+++ b/src/plugins/aorai/utils_parser.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/utils_parser.mli b/src/plugins/aorai/utils_parser.mli
index 65d6018cc86c8d969b9696ef6d211d79e07d264a..dc7257e64aea15c9db40728a6dd345017ff84fdf 100644
--- a/src/plugins/aorai/utils_parser.mli
+++ b/src/plugins/aorai/utils_parser.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/yalexer.mli b/src/plugins/aorai/yalexer.mli
index 3962e1cb1297e0ca1f7120224610b244be839a06..d95ee43e9671650bd9a6e7f98f9ac003f0a9b51f 100644
--- a/src/plugins/aorai/yalexer.mli
+++ b/src/plugins/aorai/yalexer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/yalexer.mll b/src/plugins/aorai/yalexer.mll
index 23ce704ca926df24cb7426e823638ffdf466d337..6638795fd3f0ba60be333eb63cbd85341343537a 100644
--- a/src/plugins/aorai/yalexer.mll
+++ b/src/plugins/aorai/yalexer.mll
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Aorai plug-in of Frama-C.                        *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*    INRIA (Institut National de Recherche en Informatique et en         *)
diff --git a/src/plugins/aorai/yaparser.mly b/src/plugins/aorai/yaparser.mly
index 1fbcaa6d72eecd249324feb7a4adc898e44e5b9f..91e664203946be3d3aafe98cca39067c75ccc40e 100644
--- a/src/plugins/aorai/yaparser.mly
+++ b/src/plugins/aorai/yaparser.mly
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of Aorai plug-in of Frama-C.                        */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*    INRIA (Institut National de Recherche en Informatique et en         */
diff --git a/src/plugins/api-generator/api_generator.ml b/src/plugins/api-generator/api_generator.ml
index 8a58db24333455c0a4985a0cbac47e8c4e732db9..394937e3ebf4f8f1d26354baed242ddfede38776 100644
--- a/src/plugins/api-generator/api_generator.ml
+++ b/src/plugins/api-generator/api_generator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -353,14 +353,16 @@ let makeDeclaration fmt names d =
     let prefix = String.capitalize_ascii (String.lowercase_ascii kind) in
     let input = typeOfParam rq.rq_input in
     let output = typeOfParam rq.rq_output in
-    let makeParam fmt js = makeDecoder ~names fmt js in
+    let makeSignature fmt ty = makeDecoder ~names fmt ty in
+    let makeFallback fmt ty = makeDefault ~names fmt ty in
     Format.fprintf fmt
       "@[<hv 2>const %s_internal: Server.%sRequest<@,%a,@,%a@,>@] = {@\n"
       self.name prefix jtype input jtype output ;
     Format.fprintf fmt "  kind: Server.RqKind.%s,@\n" kind ;
     Format.fprintf fmt "  name: '%s',@\n" (Pkg.name_of_ident d.d_ident) ;
-    Format.fprintf fmt "  input: %a,@\n" makeParam input ;
-    Format.fprintf fmt "  output: %a,@\n" makeParam output ;
+    Format.fprintf fmt "  input: %a,@\n" makeSignature input ;
+    Format.fprintf fmt "  output: %a,@\n" makeSignature output ;
+    Format.fprintf fmt "  fallback: %a,@\n" makeFallback output ;
     Format.fprintf fmt "  signals: %a,@\n"
       (Pretty_utils.pp_list
          ~empty:"[]" ~pre:"@[<hov 2>[ " ~sep:",@ " ~suf:"@ ]@]"
diff --git a/src/plugins/api-generator/dune b/src/plugins/api-generator/dune
index 204f73e2bd785ba731bef1db9669eb1cd52f34a6..875c6c428c4ac25cf8752cce4b97327e3b0625b4 100644
--- a/src/plugins/api-generator/dune
+++ b/src/plugins/api-generator/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/api-generator/dune-project b/src/plugins/api-generator/dune-project
index ed2b1d8e4ff1eb0cc079659a08720495595da2ac..a5fd3ef052ee9abb61b91daa1412553dafb64764 100644
--- a/src/plugins/api-generator/dune-project
+++ b/src/plugins/api-generator/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/callgraph/callgraph.ml b/src/plugins/callgraph/callgraph.ml
index e3ddf6a14dc18946e38c816c77b3619f55edc67e..0fe0b1778026425dbbd04669cd4046fb941008a8 100644
--- a/src/plugins/callgraph/callgraph.ml
+++ b/src/plugins/callgraph/callgraph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/callgraph.mli b/src/plugins/callgraph/callgraph.mli
index f5bb7a18a1d92bffad5932c99936c4ff55e879c6..a83fbf07c06e544d0751e6c842241bf855e2bee9 100644
--- a/src/plugins/callgraph/callgraph.mli
+++ b/src/plugins/callgraph/callgraph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/callgraph_api.ml b/src/plugins/callgraph/callgraph_api.ml
index 8ae2e7c7fca02cb0f65f6ff832b96ecad84799a3..5de55062a77d508f8bc9f8a6c78cb21cd03a3f0c 100644
--- a/src/plugins/callgraph/callgraph_api.ml
+++ b/src/plugins/callgraph/callgraph_api.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/cg.ml b/src/plugins/callgraph/cg.ml
index 1d0816867404ecbe6f0b4d0135e33702d3e57f56..697f48f7164cf414d3fd14c4cb74c5552b1ce711 100644
--- a/src/plugins/callgraph/cg.ml
+++ b/src/plugins/callgraph/cg.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/cg.mli b/src/plugins/callgraph/cg.mli
index 63d94994cdb68a799e5748236a060660174db906..4ac7acbbbe7efe446fcf836d72ab32dda65079bf 100644
--- a/src/plugins/callgraph/cg.mli
+++ b/src/plugins/callgraph/cg.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/dune b/src/plugins/callgraph/dune
index 64ffc157d4cd564cc6a03a431dc2bb2bebec8694..d73b685684ffb8bd9de59b1b5b704a5aebae6e93 100644
--- a/src/plugins/callgraph/dune
+++ b/src/plugins/callgraph/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/callgraph/dune-project b/src/plugins/callgraph/dune-project
index 7caae05ff21b2be60529c2b52418631a3f20f48f..e05d54737e07170850ecffbf4c7e330aaed01b6e 100644
--- a/src/plugins/callgraph/dune-project
+++ b/src/plugins/callgraph/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/callgraph/options.ml b/src/plugins/callgraph/options.ml
index 53769b5ba1ff8836cdb47db58809f590050d0333..443edb4e7151d446fa22291116ff7d3261cb960b 100644
--- a/src/plugins/callgraph/options.ml
+++ b/src/plugins/callgraph/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/options.mli b/src/plugins/callgraph/options.mli
index 925ddd29933675efbb40b28e0a3770177a1a3d03..73ccdbbec02224d8da70d85ca1869f96ae38c515 100644
--- a/src/plugins/callgraph/options.mli
+++ b/src/plugins/callgraph/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/register.ml b/src/plugins/callgraph/register.ml
index d1a29f66bc4f1898ff14f15fafdd80781a075526..48699d382ea6854cf577687b86b5cbe20e7519ca 100644
--- a/src/plugins/callgraph/register.ml
+++ b/src/plugins/callgraph/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/register.mli b/src/plugins/callgraph/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/callgraph/register.mli
+++ b/src/plugins/callgraph/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/requests.ml b/src/plugins/callgraph/requests.ml
index e431a7d22ea579d38f36a968ead02525e687a1d3..d69700363017affe5a49dbcf081e80db692a0249 100644
--- a/src/plugins/callgraph/requests.ml
+++ b/src/plugins/callgraph/requests.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/requests.mli b/src/plugins/callgraph/requests.mli
index d68abd32119990046a8bed6a36cfb5e6c3b8c264..35a7e36d96dd1cab6f510b3296798d408077233e 100644
--- a/src/plugins/callgraph/requests.mli
+++ b/src/plugins/callgraph/requests.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/services.ml b/src/plugins/callgraph/services.ml
index 1345b6fcdf985cdd78322a2a91fa205a253dc58f..2d06867955c1cb912890421b26a3850ab9bf1a64 100644
--- a/src/plugins/callgraph/services.ml
+++ b/src/plugins/callgraph/services.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/services.mli b/src/plugins/callgraph/services.mli
index 11ccdf14d47a94ba655e974c898b003027d77d3f..b168ec46e12c03a12c66b620c047ccb6053273ec 100644
--- a/src/plugins/callgraph/services.mli
+++ b/src/plugins/callgraph/services.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/subgraph.ml b/src/plugins/callgraph/subgraph.ml
index d257a801a34d7409f44de8418a48aab7514f50aa..b0146672ff9f5b11c7a6504a5b02086e7a6440fb 100644
--- a/src/plugins/callgraph/subgraph.ml
+++ b/src/plugins/callgraph/subgraph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/subgraph.mli b/src/plugins/callgraph/subgraph.mli
index df485369741b41eb9310737bcba5789e3336bd2f..11bf9070cdd0446da431c193460a211d8daddb40 100644
--- a/src/plugins/callgraph/subgraph.mli
+++ b/src/plugins/callgraph/subgraph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/uses.ml b/src/plugins/callgraph/uses.ml
index 3d50cf67113a40bbadd5f75060cd140ae3ae698d..40fb0ab6a544870be95fe982db318c502e4f38c1 100644
--- a/src/plugins/callgraph/uses.ml
+++ b/src/plugins/callgraph/uses.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/callgraph/uses.mli b/src/plugins/callgraph/uses.mli
index 15d2441be9f4af3c969c94ef9dec5553ffef102d..039496e6185c0e3017669fc1b7dfcc9b17fc86a4 100644
--- a/src/plugins/callgraph/uses.mli
+++ b/src/plugins/callgraph/uses.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/constant_propagation/Constant_Propagation.ml b/src/plugins/constant_propagation/Constant_Propagation.ml
index e69c417b270a16116fde43b58f9375e803f08eb7..d420e2bd65485f4ffdc76cc7d24ace773609d99b 100644
--- a/src/plugins/constant_propagation/Constant_Propagation.ml
+++ b/src/plugins/constant_propagation/Constant_Propagation.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/constant_propagation/api.ml b/src/plugins/constant_propagation/api.ml
index b81b894199c01d393eda516848b3e0532d9f43b7..e975ededcd8d2f9a8b2ddfbbe969bc58e0d7e442 100644
--- a/src/plugins/constant_propagation/api.ml
+++ b/src/plugins/constant_propagation/api.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/constant_propagation/api.mli b/src/plugins/constant_propagation/api.mli
index 0f745696a7ad4bbdd4541f7e65f29e2af7e4347d..6148c309c90ab517900ea54399c20d86fabce2fa 100644
--- a/src/plugins/constant_propagation/api.mli
+++ b/src/plugins/constant_propagation/api.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/constant_propagation/dune b/src/plugins/constant_propagation/dune
index 408db9a7f9c8ab6a5cb2a4ed63f7de52661cc153..f696bb47e30f3f8c622c4cc0227ae7e36c9744f5 100644
--- a/src/plugins/constant_propagation/dune
+++ b/src/plugins/constant_propagation/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/constant_propagation/dune-project b/src/plugins/constant_propagation/dune-project
index b789708bf6ecf7cd4d1cce3eedc5fd0fcbe01b07..a03769674a872968e1bf1e13afd184922c574c40 100644
--- a/src/plugins/constant_propagation/dune-project
+++ b/src/plugins/constant_propagation/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/constant_propagation/propagationParameters.ml b/src/plugins/constant_propagation/propagationParameters.ml
index 43c78f3eee269efea459c2796985c821848b94a7..9bfc3f5f024d48b659b56a53ab6391ac9778e0b5 100644
--- a/src/plugins/constant_propagation/propagationParameters.ml
+++ b/src/plugins/constant_propagation/propagationParameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/constant_propagation/propagationParameters.mli b/src/plugins/constant_propagation/propagationParameters.mli
index 733df9db046ecf61ba214c91b8fb2b3955a8d6d5..da13f826716f608f1025918ed6eb32b09ad049a5 100644
--- a/src/plugins/constant_propagation/propagationParameters.mli
+++ b/src/plugins/constant_propagation/propagationParameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/Dive.ml b/src/plugins/dive/Dive.ml
index 3479c3fbefbad52f71ae1a1f41f1ba7d0ce4b05f..0ef52baa41eb7ea9a90dba398ffdf43fdd48cf38 100644
--- a/src/plugins/dive/Dive.ml
+++ b/src/plugins/dive/Dive.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/build.ml b/src/plugins/dive/build.ml
index 016d29aa3e101ea5fce05287237a543353ff1790..8b9e1ca74e05b0b0e9cc7f18923f6f528403072a 100644
--- a/src/plugins/dive/build.ml
+++ b/src/plugins/dive/build.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/build.mli b/src/plugins/dive/build.mli
index f73a88ab2a29cede25733371e5cee8377a6f0ec7..b4be1c5807da72cd4325b1cbe1841ce99925aa96 100644
--- a/src/plugins/dive/build.mli
+++ b/src/plugins/dive/build.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/callstack.ml b/src/plugins/dive/callstack.ml
index 8f94e127823b61085b9b25315ffa0fd97d4353e9..151f8936f3b5ac588a5bb335b806cc6e980e52c7 100644
--- a/src/plugins/dive/callstack.ml
+++ b/src/plugins/dive/callstack.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/callstack.mli b/src/plugins/dive/callstack.mli
index eba59fcd19bd06fabe65bdcb7c7d77d7e323829e..753b7b4b93972c747a516b59434a3323c528baab 100644
--- a/src/plugins/dive/callstack.mli
+++ b/src/plugins/dive/callstack.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/context.ml b/src/plugins/dive/context.ml
index c3482a199e7dbfc7ba101f2fd1d346ec6389dfae..c7c874b7de72f45833a060aebeb95434d52cc7bc 100644
--- a/src/plugins/dive/context.ml
+++ b/src/plugins/dive/context.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/context.mli b/src/plugins/dive/context.mli
index d440e8b54a6c6c545b6fed757482a25d4043a727..bbec0dc0cf5e11d115c86be88bae9ccd0e743a30 100644
--- a/src/plugins/dive/context.mli
+++ b/src/plugins/dive/context.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/dive_graph.ml b/src/plugins/dive/dive_graph.ml
index d6aeae490d92bb6f49896e464b6cef67087a53ec..c6362b4be923097ef04796f5fc819a6d36c8adfd 100644
--- a/src/plugins/dive/dive_graph.ml
+++ b/src/plugins/dive/dive_graph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/dive_graph.mli b/src/plugins/dive/dive_graph.mli
index 2f3e9635f8a96b2a498e8575272b8a9689125de9..dc96986067b07482c291a36ad2a3143e1bc29c82 100644
--- a/src/plugins/dive/dive_graph.mli
+++ b/src/plugins/dive/dive_graph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/dive_types.ml b/src/plugins/dive/dive_types.ml
index b38f5e975a499d4cf08cf055547cbef0c3e34d7d..732043390e4b3e3887231f1d07fedee2fe02e986 100644
--- a/src/plugins/dive/dive_types.ml
+++ b/src/plugins/dive/dive_types.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/dune b/src/plugins/dive/dune
index a2c5d6b6e7e3fbb850f98f329704608a7b5db953..c2a643c07d5fbc1f9defbcf57d1f613cb5c8eb2f 100644
--- a/src/plugins/dive/dune
+++ b/src/plugins/dive/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/dive/dune-project b/src/plugins/dive/dune-project
index 068d43ab29b6d407777af637b64fbf7315d27680..4d3ac9f0f361a2529f1fbf15994dce387c6e5384 100644
--- a/src/plugins/dive/dune-project
+++ b/src/plugins/dive/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/dive/main.ml b/src/plugins/dive/main.ml
index 33f036663ac343318c2ca7e2e208eaa1a39f63eb..1c9a25015f683525c6412fb54e72a4d053f138ad 100644
--- a/src/plugins/dive/main.ml
+++ b/src/plugins/dive/main.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/main.mli b/src/plugins/dive/main.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/dive/main.mli
+++ b/src/plugins/dive/main.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/node_kind.ml b/src/plugins/dive/node_kind.ml
index de501c05d61436230f0a301480d9dbf678f1a967..8ed8b18cd25bbec28d370b883b41fb971a17a199 100644
--- a/src/plugins/dive/node_kind.ml
+++ b/src/plugins/dive/node_kind.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/node_kind.mli b/src/plugins/dive/node_kind.mli
index 73d674b63f57621ba5db9111a8ef4e11c683bdac..0d04a6840ca77e9d50d326361ba61026874e4f16 100644
--- a/src/plugins/dive/node_kind.mli
+++ b/src/plugins/dive/node_kind.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/node_range.ml b/src/plugins/dive/node_range.ml
index a3b1a7e7551a39a6ce1cf3cdd92e96bfcb53660f..1750e3603d86d075f1da1b624b373007a6f9db0b 100644
--- a/src/plugins/dive/node_range.ml
+++ b/src/plugins/dive/node_range.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/node_range.mli b/src/plugins/dive/node_range.mli
index dad3872ce20f41000794bd299ceb688751b20064..6bf01571d9eff696c5a22197ceffc1a01189da8c 100644
--- a/src/plugins/dive/node_range.mli
+++ b/src/plugins/dive/node_range.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/self.ml b/src/plugins/dive/self.ml
index df6cbfc9216ce23512ee8496d27abe6913b1116e..eba21fe00fe3b6ef8d55f37ad418ee679e89dd32 100644
--- a/src/plugins/dive/self.ml
+++ b/src/plugins/dive/self.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/self.mli b/src/plugins/dive/self.mli
index cc502de00d81ae0e3349fdfe0041a97ecc8234fb..8b924ae7dd0a33dd77ed6e5ac7d8c0f192cbc408 100644
--- a/src/plugins/dive/self.mli
+++ b/src/plugins/dive/self.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/server_interface.ml b/src/plugins/dive/server_interface.ml
index 3eda67ff39c002612f228774e8a846460809268b..aad1cb495a888253446f319ea348daec6e0480a1 100644
--- a/src/plugins/dive/server_interface.ml
+++ b/src/plugins/dive/server_interface.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/dive/server_interface.mli b/src/plugins/dive/server_interface.mli
index d8adab7ed6a4aef38c4fa25a4bfcfdf3b0811aad..f03ba44c5b55b5d8e3c2cbefc28443194518d0da 100644
--- a/src/plugins/dive/server_interface.mli
+++ b/src/plugins/dive/server_interface.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/E_ACSL.ml b/src/plugins/e-acsl/E_ACSL.ml
index 96af315af9c842169d134491a6a7d6ea5092f772..f8fdc67b8475691bd84bd17c873dbafc2f70b4a0 100644
--- a/src/plugins/e-acsl/E_ACSL.ml
+++ b/src/plugins/e-acsl/E_ACSL.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/E_ACSL.mli b/src/plugins/e-acsl/E_ACSL.mli
index 4d685c27cf62962c67f28974cae684df9811b754..22530abf4e31e2bc38455ab442d26d65a367d21d 100644
--- a/src/plugins/e-acsl/E_ACSL.mli
+++ b/src/plugins/e-acsl/E_ACSL.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/contrib/libdlmalloc/Makefile b/src/plugins/e-acsl/contrib/libdlmalloc/Makefile
index ec753f4f50fa80e7d738d0008cdf42937dea078f..b62a71fb7be3d74ab947f01d116ad39141eda4b5 100644
--- a/src/plugins/e-acsl/contrib/libdlmalloc/Makefile
+++ b/src/plugins/e-acsl/contrib/libdlmalloc/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of the Frama-C's E-ACSL plug-in.                    #
 #                                                                        #
-#  Copyright (C) 2012-2023                                               #
+#  Copyright (C) 2012-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/e-acsl/doc/Changelog b/src/plugins/e-acsl/doc/Changelog
index 55e3f3ec2a17585ce6398cd6d1e2ad9affa43f2b..c2f641d12e679ad153032a3f562fd5692e4cd464 100644
--- a/src/plugins/e-acsl/doc/Changelog
+++ b/src/plugins/e-acsl/doc/Changelog
@@ -25,12 +25,11 @@
 Plugin E-ACSL <next-release>
 ###############################################################################
 
--! E-ACSL       [2024-04-04] remove option -e-acsl-version.
-
 ###############################################################################
 Plugin E-ACSL 29.0 (Copper)
 ###############################################################################
 
+-! E-ACSL       [2024-04-04] remove option -e-acsl-version.
 -* E-ACSL       [2024-04-05] fix TLS segment start address and size
 
 ###############################################################################
diff --git a/src/plugins/e-acsl/dune b/src/plugins/e-acsl/dune
index fc05534906ca926320fe3e7cdce643e7a6a0c546..2a14f54f6fe256e473ef32b4beba8e7de85c4256 100644
--- a/src/plugins/e-acsl/dune
+++ b/src/plugins/e-acsl/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of the Frama-C's E-ACSL plug-in.                    ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2012-2023                                               ;;
+;;  Copyright (C) 2012-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/e-acsl/dune-project b/src/plugins/e-acsl/dune-project
index 050ef3145546b3997b305da06b426b1c8ff61ac6..94c9af22061dc704633d646da460c81972c89de0 100644
--- a/src/plugins/e-acsl/dune-project
+++ b/src/plugins/e-acsl/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of the Frama-C's E-ACSL plug-in.                    ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2012-2023                                               ;;
+;;  Copyright (C) 2012-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/e-acsl/headers/closed-source/CEA_LGPL_OR_PROPRIETARY.E_ACSL b/src/plugins/e-acsl/headers/closed-source/CEA_LGPL_OR_PROPRIETARY.E_ACSL
index a1b330944bbfefa6c3843f51a8358eccd7992ce7..6539ebbba8e190ea39104f753755dfea974830ff 100644
--- a/src/plugins/e-acsl/headers/closed-source/CEA_LGPL_OR_PROPRIETARY.E_ACSL
+++ b/src/plugins/e-acsl/headers/closed-source/CEA_LGPL_OR_PROPRIETARY.E_ACSL
@@ -1,10 +1,9 @@
 
 This file is part of the Frama-C's E-ACSL plug-in.
 
-Copyright (C) 2012-2023
+Copyright (C) 2012-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
 All rights reserved.
 Contact CEA LIST for licensing.
-
diff --git a/src/plugins/e-acsl/headers/open-source/CEA_LGPL_OR_PROPRIETARY.E_ACSL b/src/plugins/e-acsl/headers/open-source/CEA_LGPL_OR_PROPRIETARY.E_ACSL
index c5d7adeeee2053b396b4712b1eb5589de2857154..d124cdf06222ff487d030866fced527ae02afd79 100644
--- a/src/plugins/e-acsl/headers/open-source/CEA_LGPL_OR_PROPRIETARY.E_ACSL
+++ b/src/plugins/e-acsl/headers/open-source/CEA_LGPL_OR_PROPRIETARY.E_ACSL
@@ -1,7 +1,7 @@
 
 This file is part of the Frama-C's E-ACSL plug-in.
 
-Copyright (C) 2012-2023
+Copyright (C) 2012-2024
   CEA (Commissariat à l'énergie atomique et aux énergies
        alternatives)
 
@@ -16,4 +16,3 @@ GNU Lesser General Public License for more details.
 
 See the GNU Lesser General Public License version 2.1
 for more details (enclosed in the file licenses/LGPLv2.1).
-
diff --git a/src/plugins/e-acsl/man/dune b/src/plugins/e-acsl/man/dune
index 05d65d0718da4f05017e9833754c75f2c4aa5f0f..f2032a3f4b6c67eab3bd22cae0c7c2e8c860c17c 100644
--- a/src/plugins/e-acsl/man/dune
+++ b/src/plugins/e-acsl/man/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of the Frama-C's E-ACSL plug-in.                    ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2012-2023                                               ;;
+;;  Copyright (C) 2012-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/e-acsl/man/e-acsl-gcc.sh.1 b/src/plugins/e-acsl/man/e-acsl-gcc.sh.1
index 068cc396f4bf3f2630453bc38936200fc800d900..178b88e50ebbcdc49b7a6b6e83ee085cf3054586 100644
--- a/src/plugins/e-acsl/man/e-acsl-gcc.sh.1
+++ b/src/plugins/e-acsl/man/e-acsl-gcc.sh.1
@@ -2,7 +2,7 @@
 .\"                                                                        
 .\"  This file is part of the Frama-C's E-ACSL plug-in.                    
 .\"                                                                        
-.\"  Copyright (C) 2012-2023                                               
+.\"  Copyright (C) 2012-2024                                               
 .\"    CEA (Commissariat à l'énergie atomique et aux énergies              
 .\"         alternatives)                                                  
 .\"                                                                        
diff --git a/src/plugins/e-acsl/scripts/e-acsl-gcc.sh b/src/plugins/e-acsl/scripts/e-acsl-gcc.sh
index b62985f0e540621163a9858f47db953712f2c502..68880f34d5403caff56eaa5b9578ded731a0f258 100755
--- a/src/plugins/e-acsl/scripts/e-acsl-gcc.sh
+++ b/src/plugins/e-acsl/scripts/e-acsl-gcc.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of the Frama-C's E-ACSL plug-in.                    #
 #                                                                        #
-#  Copyright (C) 2012-2023                                               #
+#  Copyright (C) 2012-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/e-acsl/scripts/e-acsl-gcc.sh.comp b/src/plugins/e-acsl/scripts/e-acsl-gcc.sh.comp
index 24f1343b572e9101fb635f5d16573065a06d1c41..75680227787828389c6763e8cf2206b97ae8bae3 100644
--- a/src/plugins/e-acsl/scripts/e-acsl-gcc.sh.comp
+++ b/src/plugins/e-acsl/scripts/e-acsl-gcc.sh.comp
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of the Frama-C's E-ACSL plug-in.                    #
 #                                                                        #
-#  Copyright (C) 2012-2023                                               #
+#  Copyright (C) 2012-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/e-acsl/share/e-acsl/e_acsl.h b/src/plugins/e-acsl/share/e-acsl/e_acsl.h
index b739e7fdd5bb8ea2627138dd1a933654eba1e648..b079b277f4a79275e9b1cb71058663f53e5da5b8 100644
--- a/src/plugins/e-acsl/share/e-acsl/e_acsl.h
+++ b/src/plugins/e-acsl/share/e-acsl/e_acsl.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/e_acsl_rtl.c b/src/plugins/e-acsl/share/e-acsl/e_acsl_rtl.c
index 86bd3c7f2b135563a9c9bfe310747d5ba116e137..527bf92f8731566be735d101352578147add3d62 100644
--- a/src/plugins/e-acsl/share/e-acsl/e_acsl_rtl.c
+++ b/src/plugins/e-acsl/share/e-acsl/e_acsl_rtl.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert.c b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert.c
index 18b08900211b1a5480e46fb8bec1927e0a877c2b..64dc07cd8d517d5c355ea6d3d83769bde27de7c0 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert.c
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert.h b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert.h
index 41b03ddfda566a6efd14dc00bddb2b404c2f906b..2da8074614b82575853f019f4ac4599f9facf792 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert.h
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data.h b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data.h
index c272a157aa8474f25f5b729e5fbee8939b0694ff..5edc65de91235cec7d6d9967de448c1bb2585271 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data.h
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data_api.c b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data_api.c
index 82f622c0f8c87f6780395799e32dd83d2390d560..d185800c9a4c4fb22d3744ad52cd4570923a7a40 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data_api.c
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data_api.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data_api.h b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data_api.h
index c6c6d80ccf29d417d6262a64442fe881a9503fae..be923d8b0c977b4808e6a62e40cbcc2eb8165c02 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data_api.h
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_assert_data_api.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_contract.c b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_contract.c
index 446e75c3547fb3647653c55b5154e5a5c9f9231c..afc65fba6aa664a283e0127d5f5ffbcc4e5be4f6 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_contract.c
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_contract.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_contract.h b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_contract.h
index f6d44bde01e44a6956eb5b56f4cad6061cd5dcc4..b42822c43550f566f0b188e5eae951d0e8b486cd 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_contract.h
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_contract.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal.c b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal.c
index 585937b5e27d5752b6fb52498e2440bae960ab55..dbdb91499340e99575f4bd08064c6776eb50c59c 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal.c
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal.h b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal.h
index d39f26d6b15f17f0794f580dc2436c18acd9d230..5f2dca0019ec67c5758d8e66a5b5be4741a8b69f 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal.h
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal_timestamp.h b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal_timestamp.h
index b1930864181638be0955e88ed0d21f569ed97383..57188c4e5389d03d5e9cdb54e4f2aa359442f589 100644
--- a/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal_timestamp.h
+++ b/src/plugins/e-acsl/share/e-acsl/instrumentation_model/e_acsl_temporal_timestamp.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_alias.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_alias.h
index f919caeaf52f3006dde250c4c5748c587ab42425..1a5fa47767ad406b9a12391495e99b852ef9a3ce 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_alias.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_alias.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_bits.c b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_bits.c
index a58e01ed0019b86fc49bb25292bc1bbfbdb2fee1..460cbf8411607a49e293332740879d8c18497f9f 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_bits.c
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_bits.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_bits.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_bits.h
index 6add5b6dc44590060dbbdd155aa5542158134635..b91c527dedfd3dac8a6875fa3f0c608ceaa46c3e 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_bits.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_bits.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_concurrency.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_concurrency.h
index bc2d9eb415de370e5c750e3d6f34037cff139119..d28cdf3b24069edeb58b8ebb641ac981e14f4287 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_concurrency.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_concurrency.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_config.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_config.h
index 1249792879a048dc53d013d03351c14a3d944455..58d1d0e75aa78fd2e8de9e350b45672e26385e72 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_config.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_config.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_debug.c b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_debug.c
index 2614e208d826a32a02df1de7c2ae605597563647..fe2eb4d129f697ea13614b2ad1ffd1bea20ff664 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_debug.c
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_debug.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_debug.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_debug.h
index 73c7bd22a8534b8ef881a9774f01075ec0a2ec97..b45b8e401d32f2c9e2a7d59cb0318971d5442606 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_debug.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_debug.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_malloc.c b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_malloc.c
index 849b7647313cd08b882f44c3ea82b73323c13f8b..2b6d9b1e8e75dfeaad357ea5fcba30384596c4f1 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_malloc.c
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_malloc.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_malloc.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_malloc.h
index 20748863064d52d2b7959673f1b5930f48ce83df..36ee84d817b405381f170b22f2fa38075a4fe048 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_malloc.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_malloc.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_private_assert.c b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_private_assert.c
index a9c7ee9c3d3973e44bb0396e9bf2d862cbbcd4f3..c43e70533af51307717d07c4ef762d49cc73d968 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_private_assert.c
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_private_assert.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_private_assert.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_private_assert.h
index 693c50babf80339d9525826ebfc022f0d7c2c452..6be16c0d03878180c3c6574d385b3622c54d428f 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_private_assert.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_private_assert.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_error.c b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_error.c
index 7005d5fce557c89d0ffb910e6adb82a2ea9cef15..f3e7ae744e9ab92b306c6cbf3b3bf343e93de25e 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_error.c
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_error.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_error.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_error.h
index c044072a512313a6ed7feb4a0936af4c4b0ebc10..f6cdf591efbc00c4084fdf9db68295db2b1dc365 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_error.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_error.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_string.c b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_string.c
index 5a82785ffffb998dc8d272d51abaff36162444af..967a8b7119313ae5f989e7ad26e7ae45305acf80 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_string.c
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_string.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_string.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_string.h
index 2de2b3239fd4472f4b240e25483563b5d3ab0cbc..2f64176d07c8d1c420acbebd8bc0ff498e472137 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_string.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_rtl_string.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_shexec.c b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_shexec.c
index 92f7445de5d642b76c6f23f2e87ba911a106835a..1d662b4a68f4f550d34649003c244c38515deac2 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_shexec.c
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_shexec.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_shexec.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_shexec.h
index d3a4a291dbff2cd3991360940ca58e4863f8a72f..961eee807ed5d8360196b1f63d014311437e5785 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_shexec.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_shexec.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_trace.c b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_trace.c
index 568615e74e89618a9bca6f124ece315947cbbc26..143c156d8fe733c25584b1e87b79c560c0d679f9 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_trace.c
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_trace.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_trace.h b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_trace.h
index cd3285315083f01079dab85e1e58ab326dded745..3a6e5f605c9f6581c1c0e43b437f0633640a4784 100644
--- a/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_trace.h
+++ b/src/plugins/e-acsl/share/e-acsl/internals/e_acsl_trace.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_stdio.c b/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_stdio.c
index 32db36205a674ac1c9e329d0d967c0643b4b966f..94dbd3af8a0f1672df4634b93fb0b3f59e58aab4 100644
--- a/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_stdio.c
+++ b/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_stdio.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_stdio.h b/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_stdio.h
index 008639b9912b291fc95df396b98c20f134841c61..d63cf3f6c20bdf548b28488bc4b43338ffc54101 100644
--- a/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_stdio.h
+++ b/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_stdio.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_string.c b/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_string.c
index 9d58b5b929ac3cb9582fc4b5d6dc8f0a12ddd044..74eb6da11a74344183400ff65974e39345646dd2 100644
--- a/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_string.c
+++ b/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_string.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_string.h b/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_string.h
index 8bb17a14a9fd311ce18f63b16ee81de64338e645..16b97a9407e448c98af9a414e2cedd0b81af25ec 100644
--- a/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_string.h
+++ b/src/plugins/e-acsl/share/e-acsl/libc_replacements/e_acsl_string.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_floating_point.c b/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_floating_point.c
index 400939412e0ed40878dcc237a608e757d699a9e6..6e2d0e4a0a982a2e83168aaa854657dca1e182cb 100644
--- a/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_floating_point.c
+++ b/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_floating_point.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_floating_point.h b/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_floating_point.h
index f859b12a15b433a5b8c3091db15c9fd9093f217c..c4583bf43e6506126c1600e676fb64d669b9fe9c 100644
--- a/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_floating_point.h
+++ b/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_floating_point.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_gmp_api.h b/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_gmp_api.h
index cb2d0dc6eeae5f94b3bf7728b71498a6327478d3..ccd6d8751b67e4a04482817d0bf60ea6c071f764 100644
--- a/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_gmp_api.h
+++ b/src/plugins/e-acsl/share/e-acsl/numerical_model/e_acsl_gmp_api.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree.c b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree.c
index a04b4d15488fbe9d1dda035a6de8026a3f697a42..80e20bc5a3a2d9d39dd9c3e02c4d213eaf89c05f 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree.h b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree.h
index e1fc51496f93ea33d730a647131d9bc1626e93a2..84d2a0c483a20b7b03154c4a445fef5f3abd815f 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_observation_model.c b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_observation_model.c
index 6854168c96358cca60d7def9543150a9b15f37ca..a1e7b0c7ed0f00f4ea5836e65d65ea068006d0a7 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_observation_model.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_observation_model.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_omodel_debug.c b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_omodel_debug.c
index f6f6616d1d43af4c655bf37eb6332fa1e9bb82cc..05b299ab2e2bea62e58080667bc5bf6738e7eaa9 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_omodel_debug.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_omodel_debug.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_timestamp_retrieval.c b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_timestamp_retrieval.c
index 28d16b95cd643dbb803535fb1bc5b44133e125c3..86538ebfa9d26ff23f3427b0721022e8469c779f 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_timestamp_retrieval.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/bittree_model/e_acsl_bittree_timestamp_retrieval.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_heap.c b/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_heap.c
index e7cb50c0ee5f0e910c5c8af65c3d5b08aaf325b7..a288e527f70325646c9d218d5eb340cbd963fbb3 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_heap.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_heap.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_heap.h b/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_heap.h
index 9bde5caad69ce339af1e52cf22bc0d18c286f60c..99c12fb6b0493084ae744273550e98dba311ee88 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_heap.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_heap.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_observation_model.c b/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_observation_model.c
index 9c8dcf91cdd1930ac5329d8e3103a2cf533fc6db..b962116adb939bd2a3bbc282bb994f28dc75983e 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_observation_model.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_observation_model.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_observation_model.h b/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_observation_model.h
index d8eb3da19eede725be19b638e9d1f796931915be..38737179123971a2fad7b12d3f57bad2b59cbff4 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_observation_model.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/e_acsl_observation_model.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_heap_tracking.c b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_heap_tracking.c
index a3cd1922438710eba1938836085161874b59e990..266402332d5c137861804192d6143f5c3509b191 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_heap_tracking.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_heap_tracking.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_heap_tracking.h b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_heap_tracking.h
index e3dac1c8a82b07b1620cee8aa8a07126b358c14c..03fe0e123d0a0d6deca04be736bc1a9b02d96550 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_heap_tracking.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_heap_tracking.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_omodel_debug.h b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_omodel_debug.h
index ae5a954db1f9ab5ed967a3ed0447b13838867a39..e790aae88ebcbd48b31ed20afbea35a20d0f17f9 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_omodel_debug.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_omodel_debug.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_patricia_trie.c b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_patricia_trie.c
index 02a5270063072c701e270510bc059128758fd97f..f887b0ca259320d3f752250730cd393ec4b37ec9 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_patricia_trie.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_patricia_trie.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_patricia_trie.h b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_patricia_trie.h
index 7e913e8b005f99c30c2d81338919e6ac419133c2..f7830b4eff69e26d4a8db28d671574e22ec99e03 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_patricia_trie.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_patricia_trie.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_safe_locations.c b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_safe_locations.c
index 6ce3789984964662f1ffcb0d5fd2b5a496086ad2..64fb1fd55b7233dcedd017fccbc638c817527fc8 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_safe_locations.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_safe_locations.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_safe_locations.h b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_safe_locations.h
index 7c21837a9a56c71667150c2862713f04138a4836..434e741b326a0c996d281cdce1d6683c4d78b18a 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_safe_locations.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_safe_locations.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_timestamp_retrieval.h b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_timestamp_retrieval.h
index 4e67f985f0615c36ed7223a8e45358884652e800..8f6af007add202a08faa3e41ef603973776f98f2 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_timestamp_retrieval.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/internals/e_acsl_timestamp_retrieval.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_observation_model.c b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_observation_model.c
index 8a0fc232cbbb919ddc2154f329e0648176b1f6cc..ebd6635e722553e2ea30ee9793a9c509a71f977d 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_observation_model.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_observation_model.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_omodel_debug.c b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_omodel_debug.c
index ac21a6bc11899fae7c161595e65ac6e7915195cf..4c63638e2ce96f999666437770526ea7aafa1089 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_omodel_debug.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_omodel_debug.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_timestamp_retrieval.c b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_timestamp_retrieval.c
index 823b594cbb29c053f29fc8605fcae29f073b5c1d..f52896f3b23a9a57f9b9038c0bc5d545eb59e86d 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_timestamp_retrieval.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_timestamp_retrieval.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_tracking.c b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_tracking.c
index 235c56ea6a1351068312bfe3410398247eb7acda..107dbd0bc32b2aba71d2e45a20be078548f4665a 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_tracking.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_tracking.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_tracking.h b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_tracking.h
index 16d6939b630f7cea9cbbc815871ed49ef8e204fd..f8c2f8a1da7929d50e44d0097f9201a42281d1eb 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_tracking.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_segment_tracking.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_concurrency.c b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_concurrency.c
index 41770530d7cc7c5f2adf1345992ab0c2bf09c5af..b6e4b1643d6cf4c38774d87add38ce4b17e88948 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_concurrency.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_concurrency.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_concurrency.h b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_concurrency.h
index 0ba8dfaf2f8b5704248d76787d5943589c90dc5e..c7699522065e88b3e07d824c184635928bb98d99 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_concurrency.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_concurrency.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.c b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.c
index 2e05ca28fce7578c3e6fae7dc7a65d98a0712599..a25bbcaa889bec3b28b66bbe2e64607f7d418d79 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.c
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.c
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.h b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.h
index 91b318f80e3467d1e09bd3acb28f90deb68253c5..9e1abdec36a2ef61f93b1bc224deb14cb4d37c9f 100644
--- a/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.h
+++ b/src/plugins/e-acsl/share/e-acsl/observation_model/segment_model/e_acsl_shadow_layout.h
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of the Frama-C's E-ACSL plug-in.                    */
 /*                                                                        */
-/*  Copyright (C) 2012-2023                                               */
+/*  Copyright (C) 2012-2024                                               */
 /*    CEA (Commissariat à l'énergie atomique et aux énergies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/e-acsl/src/analyses/analyses.ml b/src/plugins/e-acsl/src/analyses/analyses.ml
index 7a9fb15cad1b1722384b385a703d54d8d5fa04ec..cc0bcb140549d76b23e72104ce0156830b9641cd 100644
--- a/src/plugins/e-acsl/src/analyses/analyses.ml
+++ b/src/plugins/e-acsl/src/analyses/analyses.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/analyses.mli b/src/plugins/e-acsl/src/analyses/analyses.mli
index f13bb5e59289be08e6a7879f6e9a1d4ad6f7944a..6125f7fdd775a8e09367cad72651c7e7bb2887da 100644
--- a/src/plugins/e-acsl/src/analyses/analyses.mli
+++ b/src/plugins/e-acsl/src/analyses/analyses.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/bound_variables.ml b/src/plugins/e-acsl/src/analyses/bound_variables.ml
index 1064d178b6650c453f0fa10ca28e3d9152f84dfd..441dadd082b596b5059a305cb6267f5b8af6d54b 100644
--- a/src/plugins/e-acsl/src/analyses/bound_variables.ml
+++ b/src/plugins/e-acsl/src/analyses/bound_variables.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/bound_variables.mli b/src/plugins/e-acsl/src/analyses/bound_variables.mli
index e1f98a9fc8f57704a5e2660e0da50037ba7f54bc..e8a99e37bc10d8ab18ff4fda7166bb61f0991226 100644
--- a/src/plugins/e-acsl/src/analyses/bound_variables.mli
+++ b/src/plugins/e-acsl/src/analyses/bound_variables.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/e_acsl_visitor.ml b/src/plugins/e-acsl/src/analyses/e_acsl_visitor.ml
index 6ed9b9d1eabb3dad0cb06ca350e4f8e7ac47dc8c..8674b84187cc5d586773767364663c238334b52a 100644
--- a/src/plugins/e-acsl/src/analyses/e_acsl_visitor.ml
+++ b/src/plugins/e-acsl/src/analyses/e_acsl_visitor.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/e_acsl_visitor.mli b/src/plugins/e-acsl/src/analyses/e_acsl_visitor.mli
index ff25b31d26a1e88ba413f0a4fab8f4dee537c115..9189cf59833cf9ba968d9378c7f8df84ac7f6042 100644
--- a/src/plugins/e-acsl/src/analyses/e_acsl_visitor.mli
+++ b/src/plugins/e-acsl/src/analyses/e_acsl_visitor.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/exit_points.ml b/src/plugins/e-acsl/src/analyses/exit_points.ml
index 18f9664a9a10267273230f94f4533099e13a51d0..dea92c70b09499349ab1a402343f486462584a98 100644
--- a/src/plugins/e-acsl/src/analyses/exit_points.ml
+++ b/src/plugins/e-acsl/src/analyses/exit_points.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/exit_points.mli b/src/plugins/e-acsl/src/analyses/exit_points.mli
index ecf8c1750ec76b59a1525230a15deb650b43b6d0..732e7b92e38dbe3e06c6fd8ecffae6827ef2858e 100644
--- a/src/plugins/e-acsl/src/analyses/exit_points.mli
+++ b/src/plugins/e-acsl/src/analyses/exit_points.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/interval.ml b/src/plugins/e-acsl/src/analyses/interval.ml
index 679f8530323bf7ba8cad51946fb551f17e193e81..d43be59cca8c0e62ca5c24be89b606971f2f6ba7 100644
--- a/src/plugins/e-acsl/src/analyses/interval.ml
+++ b/src/plugins/e-acsl/src/analyses/interval.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/interval.mli b/src/plugins/e-acsl/src/analyses/interval.mli
index b2df5f0c90d5fd11bc5f9d0cda7f906eba1e2b12..1cbc74927306bbc3f4d2f6bf6a349c86285b66ff 100644
--- a/src/plugins/e-acsl/src/analyses/interval.mli
+++ b/src/plugins/e-acsl/src/analyses/interval.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/labels.ml b/src/plugins/e-acsl/src/analyses/labels.ml
index 29fe58ee99045e56f539febd04361a71d5af15ae..afca5076f37a87bf7ff513a5d848aa0fb1a751b5 100644
--- a/src/plugins/e-acsl/src/analyses/labels.ml
+++ b/src/plugins/e-acsl/src/analyses/labels.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/labels.mli b/src/plugins/e-acsl/src/analyses/labels.mli
index 9f9c1304fe37e54233e838224d3d210ca5161e7e..1c9a7951d7f6ec09658a45ceaf76108306983fc9 100644
--- a/src/plugins/e-acsl/src/analyses/labels.mli
+++ b/src/plugins/e-acsl/src/analyses/labels.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/literal_strings.ml b/src/plugins/e-acsl/src/analyses/literal_strings.ml
index 7735a59cf2b6c603b0942d5a84e1c0a550bc0ccd..60c0c4042c561b158873f63775fc6cf9797a087b 100644
--- a/src/plugins/e-acsl/src/analyses/literal_strings.ml
+++ b/src/plugins/e-acsl/src/analyses/literal_strings.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/literal_strings.mli b/src/plugins/e-acsl/src/analyses/literal_strings.mli
index 12a32499efe784a1cbd32eb13f9994fca685a3b7..5a83b3e7181fb58006b5ee858ef10db5401ff36d 100644
--- a/src/plugins/e-acsl/src/analyses/literal_strings.mli
+++ b/src/plugins/e-acsl/src/analyses/literal_strings.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/logic_normalizer.ml b/src/plugins/e-acsl/src/analyses/logic_normalizer.ml
index d60f75c1e33551c2a70551b87538e6e74afe7c55..8e370f5f25c392be18974ee7d86a8f327a821863 100644
--- a/src/plugins/e-acsl/src/analyses/logic_normalizer.ml
+++ b/src/plugins/e-acsl/src/analyses/logic_normalizer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/logic_normalizer.mli b/src/plugins/e-acsl/src/analyses/logic_normalizer.mli
index 47233f1e0f0a6370a1a035c681ba15c40f07dc66..521d23380fd0157a17a74f28f4944309981dbf37 100644
--- a/src/plugins/e-acsl/src/analyses/logic_normalizer.mli
+++ b/src/plugins/e-acsl/src/analyses/logic_normalizer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/lscope.ml b/src/plugins/e-acsl/src/analyses/lscope.ml
index cf974ffd79ef61890a76567e45bc4aec265b233f..75ad1069a9917f7ba7a0278e0b6e3ca2525de524 100644
--- a/src/plugins/e-acsl/src/analyses/lscope.ml
+++ b/src/plugins/e-acsl/src/analyses/lscope.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/lscope.mli b/src/plugins/e-acsl/src/analyses/lscope.mli
index 5649bc4026918fb8084a9daf1d637d09bbe48bf3..3a603d8c2fd843834b39805e0827143be873e418 100644
--- a/src/plugins/e-acsl/src/analyses/lscope.mli
+++ b/src/plugins/e-acsl/src/analyses/lscope.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/memory_tracking.ml b/src/plugins/e-acsl/src/analyses/memory_tracking.ml
index 34c3eedf2810292cd710f11a00fb73a8fa03c704..c9dafda541ae474b21073ae00cb76149f677be75 100644
--- a/src/plugins/e-acsl/src/analyses/memory_tracking.ml
+++ b/src/plugins/e-acsl/src/analyses/memory_tracking.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/memory_tracking.mli b/src/plugins/e-acsl/src/analyses/memory_tracking.mli
index b4bd046673882e068d8286104f3ebe49d0d7deb3..7506e46adf9f8c0e6e3b9fab5ce2d1e205fb7947 100644
--- a/src/plugins/e-acsl/src/analyses/memory_tracking.mli
+++ b/src/plugins/e-acsl/src/analyses/memory_tracking.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/rte.ml b/src/plugins/e-acsl/src/analyses/rte.ml
index 6590ec8b3f7f2b592322bd676cd3702e868c7d4b..2aa4d49bcbc0122ebdcc7b8ef963a0ec7463bb2c 100644
--- a/src/plugins/e-acsl/src/analyses/rte.ml
+++ b/src/plugins/e-acsl/src/analyses/rte.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/rte.mli b/src/plugins/e-acsl/src/analyses/rte.mli
index 0abd84a7dc9e5bcfd6d20616a7d7c41790e33403..0f307c8ef51a0717534c35630c2d6b4c955870a7 100644
--- a/src/plugins/e-acsl/src/analyses/rte.mli
+++ b/src/plugins/e-acsl/src/analyses/rte.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/typing.ml b/src/plugins/e-acsl/src/analyses/typing.ml
index 794bc0e04526ac09b80b9f4aec9a4886a568d2fd..99d595232584bdb5476d86f8f0787c1745aaafe4 100644
--- a/src/plugins/e-acsl/src/analyses/typing.ml
+++ b/src/plugins/e-acsl/src/analyses/typing.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/typing.mli b/src/plugins/e-acsl/src/analyses/typing.mli
index 209739da761091fa94e418c868f59bf6f0757fa1..b0dcc3e9fde9d394a6ba29f12d7b5dc6892bdad2 100644
--- a/src/plugins/e-acsl/src/analyses/typing.mli
+++ b/src/plugins/e-acsl/src/analyses/typing.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/widening.ml b/src/plugins/e-acsl/src/analyses/widening.ml
index 33b9a324507bcd525964d4690c74f4742fac2e9d..96801eb7237b1d20475b8f83ea6d8dcb83152c88 100644
--- a/src/plugins/e-acsl/src/analyses/widening.ml
+++ b/src/plugins/e-acsl/src/analyses/widening.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/analyses/widening.mli b/src/plugins/e-acsl/src/analyses/widening.mli
index d78e2c4449e330089eecfb7567ce54c991eddb0e..36fd4dc086864353ed6a61746e31c9fcf5f6a899 100644
--- a/src/plugins/e-acsl/src/analyses/widening.mli
+++ b/src/plugins/e-acsl/src/analyses/widening.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/assert.ml b/src/plugins/e-acsl/src/code_generator/assert.ml
index 2e560acb35b7e39d99418f4d50f0c85798dca4d5..a49425e216c0ed16091850cb5e88671c00e848a2 100644
--- a/src/plugins/e-acsl/src/code_generator/assert.ml
+++ b/src/plugins/e-acsl/src/code_generator/assert.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/assert.mli b/src/plugins/e-acsl/src/code_generator/assert.mli
index 3f395b7deb4d92ddddf65baf2c8d0f83bc0d83ab..fd98f26c87de07a18befe20f300f615d90e39c36 100644
--- a/src/plugins/e-acsl/src/code_generator/assert.mli
+++ b/src/plugins/e-acsl/src/code_generator/assert.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/assigns.ml b/src/plugins/e-acsl/src/code_generator/assigns.ml
index e2ac34acb47485e2543aa1266141ad4d1f9b60e7..f33b65bf6e1f4a50acd12245e858f5356b07c3f6 100644
--- a/src/plugins/e-acsl/src/code_generator/assigns.ml
+++ b/src/plugins/e-acsl/src/code_generator/assigns.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/assigns.mli b/src/plugins/e-acsl/src/code_generator/assigns.mli
index 0dbd64afff17fcfe84f2d2fb4b90e40b54028195..2d4d110177e340291d3b9c2b225be7f3771cba53 100644
--- a/src/plugins/e-acsl/src/code_generator/assigns.mli
+++ b/src/plugins/e-acsl/src/code_generator/assigns.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/contract.ml b/src/plugins/e-acsl/src/code_generator/contract.ml
index 2a1ddf027d43aae44b508699f8cc324ca69dd36b..e7118a6f17f93983eb90dbf84e494555d2345717 100644
--- a/src/plugins/e-acsl/src/code_generator/contract.ml
+++ b/src/plugins/e-acsl/src/code_generator/contract.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/contract.mli b/src/plugins/e-acsl/src/code_generator/contract.mli
index 532e776a346a7aa8dbe53e052b0c6ee5c255e923..a6eb339b2705ea6897f4ba471550b597655f5d38 100644
--- a/src/plugins/e-acsl/src/code_generator/contract.mli
+++ b/src/plugins/e-acsl/src/code_generator/contract.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/contract_types.ml b/src/plugins/e-acsl/src/code_generator/contract_types.ml
index e19fc1d9b3f6b9c48789b2cd4f629bae5cd60f75..f3164dd39eef4105b40cb5bf5f3f90fb05ad9f21 100644
--- a/src/plugins/e-acsl/src/code_generator/contract_types.ml
+++ b/src/plugins/e-acsl/src/code_generator/contract_types.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/env.ml b/src/plugins/e-acsl/src/code_generator/env.ml
index d14804d2a9bc3c9a6a00b1a42074495a57523971..bd8614fe577ef9f1e3690131fb9003ba91b9e959 100644
--- a/src/plugins/e-acsl/src/code_generator/env.ml
+++ b/src/plugins/e-acsl/src/code_generator/env.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/env.mli b/src/plugins/e-acsl/src/code_generator/env.mli
index c6f9d80e474d41a7eac36a7167e6195b7dff8a39..91d3aed298aabfff57f7403ded0cf06043a61f11 100644
--- a/src/plugins/e-acsl/src/code_generator/env.mli
+++ b/src/plugins/e-acsl/src/code_generator/env.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/global_observer.ml b/src/plugins/e-acsl/src/code_generator/global_observer.ml
index 5b983b774730204859743152eb7d5fb78f97c7bc..847b8d042df95fad32a2081d06889eb6a0f7f1d7 100644
--- a/src/plugins/e-acsl/src/code_generator/global_observer.ml
+++ b/src/plugins/e-acsl/src/code_generator/global_observer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/global_observer.mli b/src/plugins/e-acsl/src/code_generator/global_observer.mli
index a4d5a6cfe731c3793d52a319b4a650ffe850f4c5..c33dbeacca23921c7e73f25c53affd479bac3563 100644
--- a/src/plugins/e-acsl/src/code_generator/global_observer.mli
+++ b/src/plugins/e-acsl/src/code_generator/global_observer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/gmp.ml b/src/plugins/e-acsl/src/code_generator/gmp.ml
index 94e92a22905bb94db95a92f3cd500946cdc5b531..4e0bd136867031ba9676dbc2d12c19a8cfa30357 100644
--- a/src/plugins/e-acsl/src/code_generator/gmp.ml
+++ b/src/plugins/e-acsl/src/code_generator/gmp.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/gmp.mli b/src/plugins/e-acsl/src/code_generator/gmp.mli
index 4c2455aca1857a542459118fc774de1b58610377..f37a85513f85e2ea33a6b971ff140ff95dc78383 100644
--- a/src/plugins/e-acsl/src/code_generator/gmp.mli
+++ b/src/plugins/e-acsl/src/code_generator/gmp.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/injector.ml b/src/plugins/e-acsl/src/code_generator/injector.ml
index 020e915946b61586f8c2aa4e286b06c7eeb2c7c5..a1b7e0269775fb75157e7df20f7fd852eeccd453 100644
--- a/src/plugins/e-acsl/src/code_generator/injector.ml
+++ b/src/plugins/e-acsl/src/code_generator/injector.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/injector.mli b/src/plugins/e-acsl/src/code_generator/injector.mli
index 608ccb34fbb6e1924969ad468966163223fcff85..bee2c6ecd29fa7cabb20d1ec37e7a2d21bec5f69 100644
--- a/src/plugins/e-acsl/src/code_generator/injector.mli
+++ b/src/plugins/e-acsl/src/code_generator/injector.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/libc.ml b/src/plugins/e-acsl/src/code_generator/libc.ml
index 9020b66e29588ccb50c4b8cd3b1e6953d62cd504..9e34bde8fd6d18428c9553044deb93616368fb4a 100644
--- a/src/plugins/e-acsl/src/code_generator/libc.ml
+++ b/src/plugins/e-acsl/src/code_generator/libc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/libc.mli b/src/plugins/e-acsl/src/code_generator/libc.mli
index cddac8cbe0cdf2b52be318fc1dbff2b55e788746..8c99f8bab92ff005bf95e767ccb38191b30f7fef 100644
--- a/src/plugins/e-acsl/src/code_generator/libc.mli
+++ b/src/plugins/e-acsl/src/code_generator/libc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/literal_observer.ml b/src/plugins/e-acsl/src/code_generator/literal_observer.ml
index ea1e50a9964df74de2be00883c1e1a02dbfd5bbf..37ee1d9fb9ef1be0e474dc3956c605d67973b779 100644
--- a/src/plugins/e-acsl/src/code_generator/literal_observer.ml
+++ b/src/plugins/e-acsl/src/code_generator/literal_observer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/literal_observer.mli b/src/plugins/e-acsl/src/code_generator/literal_observer.mli
index 53298f5e487e6a05efab390761396c18b00475b2..dbb9be9df4c8513234e847b85958cf012a2e92d2 100644
--- a/src/plugins/e-acsl/src/code_generator/literal_observer.mli
+++ b/src/plugins/e-acsl/src/code_generator/literal_observer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/logic_array.ml b/src/plugins/e-acsl/src/code_generator/logic_array.ml
index b8567a4cd98a8ae44609182cd339312f27784d28..6d9ba8fad8fecd7ef66c43b2807d63045977df59 100644
--- a/src/plugins/e-acsl/src/code_generator/logic_array.ml
+++ b/src/plugins/e-acsl/src/code_generator/logic_array.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/logic_array.mli b/src/plugins/e-acsl/src/code_generator/logic_array.mli
index 7937521772405867c969c7102668a5a8f0ff4961..2ca725592578d040af4864cfc1bc766f6c3aee9b 100644
--- a/src/plugins/e-acsl/src/code_generator/logic_array.mli
+++ b/src/plugins/e-acsl/src/code_generator/logic_array.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/logic_functions.ml b/src/plugins/e-acsl/src/code_generator/logic_functions.ml
index 71c2b7bef6236e13ad824950d2a7f1715d80e368..421a71f5527d2043970873c6217dea212325ab9e 100644
--- a/src/plugins/e-acsl/src/code_generator/logic_functions.ml
+++ b/src/plugins/e-acsl/src/code_generator/logic_functions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/logic_functions.mli b/src/plugins/e-acsl/src/code_generator/logic_functions.mli
index 128cdbc99bb1b4775cf78d53aeeacd6c2332191e..73eef16200f95d4501b3a817f45d53f5e5ffd49b 100644
--- a/src/plugins/e-acsl/src/code_generator/logic_functions.mli
+++ b/src/plugins/e-acsl/src/code_generator/logic_functions.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/loops.ml b/src/plugins/e-acsl/src/code_generator/loops.ml
index 5723775e0a9205a54ba53919dfaf3aca23768023..10fc89d05129a85acca95f666c4571485442c3dc 100644
--- a/src/plugins/e-acsl/src/code_generator/loops.ml
+++ b/src/plugins/e-acsl/src/code_generator/loops.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/loops.mli b/src/plugins/e-acsl/src/code_generator/loops.mli
index 6b71d0b2bdc7ae93737af57fc78dff663073281e..614eb9a2373edbc7318cebca3d46c80d15410232 100644
--- a/src/plugins/e-acsl/src/code_generator/loops.mli
+++ b/src/plugins/e-acsl/src/code_generator/loops.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/memory_observer.ml b/src/plugins/e-acsl/src/code_generator/memory_observer.ml
index da9389e696fae018e7249eb144126c78388774cb..b911ca68f95e8ce66b350a04eb206501a866123f 100644
--- a/src/plugins/e-acsl/src/code_generator/memory_observer.ml
+++ b/src/plugins/e-acsl/src/code_generator/memory_observer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/memory_observer.mli b/src/plugins/e-acsl/src/code_generator/memory_observer.mli
index 228f2ba083097fa4c80a70c10fb6dc53da4d6116..8153bc4f514a5cb5bd66eed10744b67d7ffa0092 100644
--- a/src/plugins/e-acsl/src/code_generator/memory_observer.mli
+++ b/src/plugins/e-acsl/src/code_generator/memory_observer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/memory_translate.ml b/src/plugins/e-acsl/src/code_generator/memory_translate.ml
index 1fbc3103215e85894fdd5a488bc77b7ef4ace2f6..84de94e2d1ed6012f3ee3a046460cf6822eda94f 100644
--- a/src/plugins/e-acsl/src/code_generator/memory_translate.ml
+++ b/src/plugins/e-acsl/src/code_generator/memory_translate.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/memory_translate.mli b/src/plugins/e-acsl/src/code_generator/memory_translate.mli
index b6f445342477a8b5ec442f474af7c9c9cf2be607..5445759ebc68914e4acc0421ee218bf2564f2de5 100644
--- a/src/plugins/e-acsl/src/code_generator/memory_translate.mli
+++ b/src/plugins/e-acsl/src/code_generator/memory_translate.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/quantif.ml b/src/plugins/e-acsl/src/code_generator/quantif.ml
index 9cad10b545b270a9d27db3396ee0bdb0a2c5a463..a851389f5485f90a3d1f8de95fe2f2bf6e6308ae 100644
--- a/src/plugins/e-acsl/src/code_generator/quantif.ml
+++ b/src/plugins/e-acsl/src/code_generator/quantif.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/quantif.mli b/src/plugins/e-acsl/src/code_generator/quantif.mli
index 726d7c8eee70818bcab35a4b1b8b32ae45be2dbe..b0d24f004c33e08bcfc4adfb818bb10a224d8f19 100644
--- a/src/plugins/e-acsl/src/code_generator/quantif.mli
+++ b/src/plugins/e-acsl/src/code_generator/quantif.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/smart_exp.ml b/src/plugins/e-acsl/src/code_generator/smart_exp.ml
index aa021f4965a0ee2d93b07989200be9871cba4df9..dc5a6cc5fa0c30ed1c196784a570ddef3e8babf9 100644
--- a/src/plugins/e-acsl/src/code_generator/smart_exp.ml
+++ b/src/plugins/e-acsl/src/code_generator/smart_exp.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/smart_exp.mli b/src/plugins/e-acsl/src/code_generator/smart_exp.mli
index 8734a6eb6dbdec8f8221e7d337d58cd7e3132021..7764038cba1022fa6d6a3be1a21d73e593fdd9d1 100644
--- a/src/plugins/e-acsl/src/code_generator/smart_exp.mli
+++ b/src/plugins/e-acsl/src/code_generator/smart_exp.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/smart_stmt.ml b/src/plugins/e-acsl/src/code_generator/smart_stmt.ml
index 168eb0056881d27721ee327ff35f3bf02c7fc0fe..ede8d77c78b85967a94378217e94b68a18c99701 100644
--- a/src/plugins/e-acsl/src/code_generator/smart_stmt.ml
+++ b/src/plugins/e-acsl/src/code_generator/smart_stmt.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/smart_stmt.mli b/src/plugins/e-acsl/src/code_generator/smart_stmt.mli
index 708e8a724b6edb344efb664d0f21ca527b4a0877..f2e49c875c16b3d4c6d23669711689075726ee34 100644
--- a/src/plugins/e-acsl/src/code_generator/smart_stmt.mli
+++ b/src/plugins/e-acsl/src/code_generator/smart_stmt.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/temporal.ml b/src/plugins/e-acsl/src/code_generator/temporal.ml
index 71d491bde552c1a1913e605d7b27c619967ff88d..621e54993c596db8d47d63eb7e4e98f6b0d39201 100644
--- a/src/plugins/e-acsl/src/code_generator/temporal.ml
+++ b/src/plugins/e-acsl/src/code_generator/temporal.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/temporal.mli b/src/plugins/e-acsl/src/code_generator/temporal.mli
index 6409af7cd691d5700e2b94a30fb9aef33fa5fa90..8958a8cab1c33436bf90c8eec659ae95918a44c5 100644
--- a/src/plugins/e-acsl/src/code_generator/temporal.mli
+++ b/src/plugins/e-acsl/src/code_generator/temporal.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_annots.ml b/src/plugins/e-acsl/src/code_generator/translate_annots.ml
index d573f59a1e77cca72c6a4ef38fb804fb7500641b..439c2dba354e069fc2c3b7dff100d048f7fee5c0 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_annots.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_annots.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_annots.mli b/src/plugins/e-acsl/src/code_generator/translate_annots.mli
index 7fcfd36479db39066c5d2376dec3de5a6e2a2c45..f115d34fc14876d335ef1739d49ef77f8a8e51d8 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_annots.mli
+++ b/src/plugins/e-acsl/src/code_generator/translate_annots.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_ats.ml b/src/plugins/e-acsl/src/code_generator/translate_ats.ml
index f4a67a21e4f18e562cc922fe79321db4aeffc1fd..961e4a5bae742b512437d5817f7e5df4e368d295 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_ats.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_ats.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_ats.mli b/src/plugins/e-acsl/src/code_generator/translate_ats.mli
index 0c74587eb767ad4d83587e7e6c5be67b02881031..dffc18437ac17af2f794fe6f5fb2901512a6ca68 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_ats.mli
+++ b/src/plugins/e-acsl/src/code_generator/translate_ats.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_predicates.ml b/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
index 018742d7921846ce388ccbaf369140289f01fd5e..220e628d43df44456fae548e655c04cd243791dc 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_predicates.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_predicates.mli b/src/plugins/e-acsl/src/code_generator/translate_predicates.mli
index 201a3a6cb2fabc594f3ebb19a93aa47282feb5f2..d32971917c54c7562e7e6a6bf0095a98e4160f65 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_predicates.mli
+++ b/src/plugins/e-acsl/src/code_generator/translate_predicates.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_rtes.ml b/src/plugins/e-acsl/src/code_generator/translate_rtes.ml
index c82b973de7bc03e67eff9922ff12d5e863e74e17..239e3707b4a84bdeb137da56b41b97902096c30f 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_rtes.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_rtes.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_rtes.mli b/src/plugins/e-acsl/src/code_generator/translate_rtes.mli
index a76ef422354dd3068fa392454f643871fdbb7379..06cf6fa5957488045ae59389e27d834d0c7b9c95 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_rtes.mli
+++ b/src/plugins/e-acsl/src/code_generator/translate_rtes.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_terms.ml b/src/plugins/e-acsl/src/code_generator/translate_terms.ml
index c8d95953029fac0ba8334315f02d790960fe82d6..579ccf286834d0a5c029d2bcd5edf30ef266efcb 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_terms.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_terms.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_terms.mli b/src/plugins/e-acsl/src/code_generator/translate_terms.mli
index 05511f73d849129f2988d6bed539471af918c7cc..309687cfdec3a82a1e88e42084e854a6bf83f3d1 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_terms.mli
+++ b/src/plugins/e-acsl/src/code_generator/translate_terms.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_utils.ml b/src/plugins/e-acsl/src/code_generator/translate_utils.ml
index ef8b075abf9db5814cb4fe9c6ee6103f520ca900..ee84ecdca58fbdb454c8d9864e413f1fb37aa039 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_utils.ml
+++ b/src/plugins/e-acsl/src/code_generator/translate_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translate_utils.mli b/src/plugins/e-acsl/src/code_generator/translate_utils.mli
index 33f1eb7d3dcf4cef1855b3327029ff12a160f937..81190863ccd34578ad9cd66f767003b221f96bc1 100644
--- a/src/plugins/e-acsl/src/code_generator/translate_utils.mli
+++ b/src/plugins/e-acsl/src/code_generator/translate_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translation_error.ml b/src/plugins/e-acsl/src/code_generator/translation_error.ml
index f23fa05d2d82d029e709433676504eb94eb36e07..aa40e3d518351a29fb6603f02a050f9e5e413bde 100644
--- a/src/plugins/e-acsl/src/code_generator/translation_error.ml
+++ b/src/plugins/e-acsl/src/code_generator/translation_error.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/translation_error.mli b/src/plugins/e-acsl/src/code_generator/translation_error.mli
index 92127ac835db97112d70bf563be25bdaa8d6da6b..60db3c3beefcd066a063986194d8df29c6d4641a 100644
--- a/src/plugins/e-acsl/src/code_generator/translation_error.mli
+++ b/src/plugins/e-acsl/src/code_generator/translation_error.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/typed_number.ml b/src/plugins/e-acsl/src/code_generator/typed_number.ml
index c11eb87ca6ffc76a8f3f956bee8c3bcf6329bb72..ab7f78841fdb41c4f30ac5178c5c966b918a957b 100644
--- a/src/plugins/e-acsl/src/code_generator/typed_number.ml
+++ b/src/plugins/e-acsl/src/code_generator/typed_number.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/code_generator/typed_number.mli b/src/plugins/e-acsl/src/code_generator/typed_number.mli
index e91ebc76758e55e9c736dd7439f28a2e251a65be..6f56f8ed1621f87e8a9c461e287be048c9470115 100644
--- a/src/plugins/e-acsl/src/code_generator/typed_number.mli
+++ b/src/plugins/e-acsl/src/code_generator/typed_number.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/dune b/src/plugins/e-acsl/src/dune
index a46349bec0d4c72f5625e42bd2361fc015b8edb7..bf7f6dde4c7d3747c049dbb156c00fcc77c1a794 100644
--- a/src/plugins/e-acsl/src/dune
+++ b/src/plugins/e-acsl/src/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of the Frama-C's E-ACSL plug-in.                    ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2012-2023                                               ;;
+;;  Copyright (C) 2012-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/e-acsl/src/libraries/analyses_datatype.ml b/src/plugins/e-acsl/src/libraries/analyses_datatype.ml
index 5dd8c8bc857c05615ee9a7b75a23d0e831e17f0c..e3d1f599319d187431b2c7d54111caab3242d2b2 100644
--- a/src/plugins/e-acsl/src/libraries/analyses_datatype.ml
+++ b/src/plugins/e-acsl/src/libraries/analyses_datatype.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/analyses_datatype.mli b/src/plugins/e-acsl/src/libraries/analyses_datatype.mli
index ec009f7086a6894d1bdc2878e50e7c071eab808a..444219dfc2f390c8d5bc874b373e4577df1100ec 100644
--- a/src/plugins/e-acsl/src/libraries/analyses_datatype.mli
+++ b/src/plugins/e-acsl/src/libraries/analyses_datatype.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/analyses_types.ml b/src/plugins/e-acsl/src/libraries/analyses_types.ml
index fd52df4346b817beac016e2862e5564d508cf88f..7f644b2eb0bb29ba767843c7e2efdcd48f795ed6 100644
--- a/src/plugins/e-acsl/src/libraries/analyses_types.ml
+++ b/src/plugins/e-acsl/src/libraries/analyses_types.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/builtins.ml b/src/plugins/e-acsl/src/libraries/builtins.ml
index 2bf951bbb114069cefb13f9c0c79df33398c99f4..e09d5b889a232b8c6ce6b478a7b77905f6989719 100644
--- a/src/plugins/e-acsl/src/libraries/builtins.ml
+++ b/src/plugins/e-acsl/src/libraries/builtins.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/builtins.mli b/src/plugins/e-acsl/src/libraries/builtins.mli
index cdcdbcfba1168ea7adf5115138eff8d736986bd2..1e1f94513503ede588c7f560584b45c1e5c86dc0 100644
--- a/src/plugins/e-acsl/src/libraries/builtins.mli
+++ b/src/plugins/e-acsl/src/libraries/builtins.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/error.ml b/src/plugins/e-acsl/src/libraries/error.ml
index bea5dbefd255c4488d462723b81018533a8c7040..5cd7569f230a7abdffdba25a4517f09d83fecac7 100644
--- a/src/plugins/e-acsl/src/libraries/error.ml
+++ b/src/plugins/e-acsl/src/libraries/error.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/error.mli b/src/plugins/e-acsl/src/libraries/error.mli
index a48cf08b07ebba7deb21594dcd9dd4bcdb63e6c2..6eb07dc42c8c6cd86009de8961192ee57d096486 100644
--- a/src/plugins/e-acsl/src/libraries/error.mli
+++ b/src/plugins/e-acsl/src/libraries/error.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/functions.ml b/src/plugins/e-acsl/src/libraries/functions.ml
index 1680140b8b58ec719e7f4a012a5f7a6b22af4b24..2f8ee15c6fdbe9df1c890b915c41b193f7f2f342 100644
--- a/src/plugins/e-acsl/src/libraries/functions.ml
+++ b/src/plugins/e-acsl/src/libraries/functions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/functions.mli b/src/plugins/e-acsl/src/libraries/functions.mli
index 2d342c4da14d6692438c61e97b0d7fef16e55910..464024bc3bea68b4aa7673745f2368849b2cb44d 100644
--- a/src/plugins/e-acsl/src/libraries/functions.mli
+++ b/src/plugins/e-acsl/src/libraries/functions.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/gmp_types.ml b/src/plugins/e-acsl/src/libraries/gmp_types.ml
index 965406bdc339c1d6e6260f46ff971452e4f58e83..78d2dee5f0e98de16fb539625825ecf196dc5361 100644
--- a/src/plugins/e-acsl/src/libraries/gmp_types.ml
+++ b/src/plugins/e-acsl/src/libraries/gmp_types.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/gmp_types.mli b/src/plugins/e-acsl/src/libraries/gmp_types.mli
index d60732e8bc9a315372c79514b9817d875a03832b..73159d06de1c9161c6344c910c79ea79a140b879 100644
--- a/src/plugins/e-acsl/src/libraries/gmp_types.mli
+++ b/src/plugins/e-acsl/src/libraries/gmp_types.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/interval_utils.ml b/src/plugins/e-acsl/src/libraries/interval_utils.ml
index 1d94d3cf590f447cf3bebcd46c821062a8be313a..41c50a29fcba787d6aceed65b64d4ee2326f5130 100644
--- a/src/plugins/e-acsl/src/libraries/interval_utils.ml
+++ b/src/plugins/e-acsl/src/libraries/interval_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/interval_utils.mli b/src/plugins/e-acsl/src/libraries/interval_utils.mli
index 2f1cba5b16dd15dbff806a0798cd1fe4d9626787..90c57989716e4ff5a6a1f39ff5ad5e78e24937e9 100644
--- a/src/plugins/e-acsl/src/libraries/interval_utils.mli
+++ b/src/plugins/e-acsl/src/libraries/interval_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/logic_aggr.ml b/src/plugins/e-acsl/src/libraries/logic_aggr.ml
index ca19730b38a7150de1c6dde25ad848769c5536cb..433a1a892de552752c4a6fe7348a396690da8293 100644
--- a/src/plugins/e-acsl/src/libraries/logic_aggr.ml
+++ b/src/plugins/e-acsl/src/libraries/logic_aggr.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/logic_aggr.mli b/src/plugins/e-acsl/src/libraries/logic_aggr.mli
index d17abb5ffc045ce6b7f6919716eea7099c1cde94..4c01586e1eb9b0ec965d58722a2ae6600dca01cc 100644
--- a/src/plugins/e-acsl/src/libraries/logic_aggr.mli
+++ b/src/plugins/e-acsl/src/libraries/logic_aggr.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/misc.ml b/src/plugins/e-acsl/src/libraries/misc.ml
index 7b03b13df7d378e548a91f90d82582817b14e24e..839b26676fdf56b33b4c4b0fd58f62755f2e762a 100644
--- a/src/plugins/e-acsl/src/libraries/misc.ml
+++ b/src/plugins/e-acsl/src/libraries/misc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/misc.mli b/src/plugins/e-acsl/src/libraries/misc.mli
index 8f7820ea8abfd7d8c023c0cbcd8d10f5daa886be..16706184a7f1a478815d49234773f5ae1defedc2 100644
--- a/src/plugins/e-acsl/src/libraries/misc.mli
+++ b/src/plugins/e-acsl/src/libraries/misc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/varname.ml b/src/plugins/e-acsl/src/libraries/varname.ml
index 7778aa054db1f0f056c8fcddcb814890a1e8976e..2a311b9dd728a051875090dbba7fd783538c4ac3 100644
--- a/src/plugins/e-acsl/src/libraries/varname.ml
+++ b/src/plugins/e-acsl/src/libraries/varname.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/libraries/varname.mli b/src/plugins/e-acsl/src/libraries/varname.mli
index f982668e9b9ba48272f080459e6f936fb98d7fa6..4905dbb88711cbba74c53b9207c7d4336f8d5be9 100644
--- a/src/plugins/e-acsl/src/libraries/varname.mli
+++ b/src/plugins/e-acsl/src/libraries/varname.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/main.ml b/src/plugins/e-acsl/src/main.ml
index 8cbd69646da818e9f9622157211b90e1b91c5167..0d8043ee7fe61436c67c6a17199478a73d6cca81 100644
--- a/src/plugins/e-acsl/src/main.ml
+++ b/src/plugins/e-acsl/src/main.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/main.mli b/src/plugins/e-acsl/src/main.mli
index be7ee7cdcc35d801c3e9ff1b2900ba4ace649408..ff9da6479e3959afc9124c8f9d4813d60dc0ffeb 100644
--- a/src/plugins/e-acsl/src/main.mli
+++ b/src/plugins/e-acsl/src/main.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/options.ml b/src/plugins/e-acsl/src/options.ml
index 2827052e1242dc45a719d48f2ae41b74758af43c..506c123ac28a3cd6cd329d3c0064f55704082f73 100644
--- a/src/plugins/e-acsl/src/options.ml
+++ b/src/plugins/e-acsl/src/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/options.mli b/src/plugins/e-acsl/src/options.mli
index e99666cefe8b14ccfc5fb45ccadcaa2de5134570..295e66799a6013b18f8f6c967b85be458b6b6522 100644
--- a/src/plugins/e-acsl/src/options.mli
+++ b/src/plugins/e-acsl/src/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/project_initializer/prepare_ast.ml b/src/plugins/e-acsl/src/project_initializer/prepare_ast.ml
index 12286c8e69bc9c50731fb4341a7f2fce432f1dd7..9e21ae9804e7c3f3099d1e21a2f81cc230b76b7d 100644
--- a/src/plugins/e-acsl/src/project_initializer/prepare_ast.ml
+++ b/src/plugins/e-acsl/src/project_initializer/prepare_ast.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/project_initializer/prepare_ast.mli b/src/plugins/e-acsl/src/project_initializer/prepare_ast.mli
index 7234f4e53ce97eef51914cee0c286bc7333d65a9..8de126f92aa1e2bd95aa1d029e2c51d52040189b 100644
--- a/src/plugins/e-acsl/src/project_initializer/prepare_ast.mli
+++ b/src/plugins/e-acsl/src/project_initializer/prepare_ast.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/project_initializer/rtl.ml b/src/plugins/e-acsl/src/project_initializer/rtl.ml
index 2f27d4cac9ca8eb8b2fe02c005443631d965b7f7..be5d5eb32d2a062c937c4ad3f6fbacb69418a82d 100644
--- a/src/plugins/e-acsl/src/project_initializer/rtl.ml
+++ b/src/plugins/e-acsl/src/project_initializer/rtl.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/src/project_initializer/rtl.mli b/src/plugins/e-acsl/src/project_initializer/rtl.mli
index ed703cbe2adfbd28fdae86a3154c59d2e51f6628..4302f9cf37e6a101a1298555810bde081b31dbd0 100644
--- a/src/plugins/e-acsl/src/project_initializer/rtl.mli
+++ b/src/plugins/e-acsl/src/project_initializer/rtl.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/tab-in-changelog.sh b/src/plugins/e-acsl/tab-in-changelog.sh
index 87980e4d33833affdbe1d3e6fa169623dc03e115..b2e31bc0b331aa9662ac5abac9b9a421f47f54e1 100755
--- a/src/plugins/e-acsl/tab-in-changelog.sh
+++ b/src/plugins/e-acsl/tab-in-changelog.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of the Frama-C's E-ACSL plug-in.                    #
 #                                                                        #
-#  Copyright (C) 2012-2023                                               #
+#  Copyright (C) 2012-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/e-acsl/tests/E_ACSL_test.ml b/src/plugins/e-acsl/tests/E_ACSL_test.ml
index 04fcdfd4b3897b7ac1c1edc97a45e3c9d436356b..f91a556d5a40f9d3185e426b59f04f996a97190b 100644
--- a/src/plugins/e-acsl/tests/E_ACSL_test.ml
+++ b/src/plugins/e-acsl/tests/E_ACSL_test.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of the Frama-C's E-ACSL plug-in.                    *)
 (*                                                                        *)
-(*  Copyright (C) 2012-2023                                               *)
+(*  Copyright (C) 2012-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/e-acsl/tests/bts/oracle/bts2192.res.oracle b/src/plugins/e-acsl/tests/bts/oracle/bts2192.res.oracle
index b17dc493cc2f314c2dec1e370a69f44f9481b406..9c4b73c17c064d76c062b9ca7f7b1fde4872ea7c 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/bts2192.res.oracle
+++ b/src/plugins/e-acsl/tests/bts/oracle/bts2192.res.oracle
@@ -2,13 +2,13 @@
 [e-acsl] Warning: annotating undefined function `atoi':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:79: Warning: 
+  no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
+  E-ACSL construct `logic functions or predicates performing read accesses'
+  is not yet supported.
+  Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/stdlib.h:78: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:79: Warning: 
-  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
-                                                        \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:79: Warning: 
-  function __e_acsl_assert_register_int: precondition data->values == \null ||
-                                                      \valid(data->values) got status unknown.
diff --git a/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle b/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle
index 8e21a5839c9ad6af6a30335d8452cad0233b17a5..1397e624078c0700e7bf18faf078bdeb20a83da9 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle
+++ b/src/plugins/e-acsl/tests/bts/oracle/bts2252.res.oracle
@@ -1,28 +1,28 @@
 [e-acsl] beginning translation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:379: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:431: Warning: 
   no assigns clause generated for function valid_read_nstring because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:284: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:280: Warning: 
   E-ACSL construct `labeled \valid_read' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:388: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:440: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:391: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:443: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:378: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:430: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:378: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:430: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:389: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:441: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:392: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:444: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts2192.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts2192.c
index 7db3574598a1c27e47a1159e8259708750fc77b0..85e5bfa8520f649e309f109393b8b7cb208d628f 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts2192.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts2192.c
@@ -7,86 +7,38 @@
 #include "stdio.h"
 #include "stdlib.h"
 #include "time.h"
-char *__gen_e_acsl_literal_string;
 extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
 
-/*@ requires valid_nptr: \valid_read(nptr);
+/*@ requires valid_nptr: valid_read_string(nptr);
     assigns \result;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
  */
 int __gen_e_acsl_atoi(char const *nptr);
 
 int a;
 char *n = (char *)"134";
-/*@ requires valid_nptr: \valid_read(nptr);
-    assigns \result;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
- */
-int __gen_e_acsl_atoi(char const *nptr)
-{
-  int __retres;
-  {
-    int __gen_e_acsl_valid_read;
-    __e_acsl_store_block((void *)(& nptr),8UL);
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
-    __gen_e_acsl_valid_read = __e_acsl_valid_read((void *)nptr,
-                                                  sizeof(char const),
-                                                  (void *)nptr,
-                                                  (void *)(& nptr));
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data,"nptr",
-                                 (void *)nptr);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data,
-                                   "sizeof(char const)",0,sizeof(char const));
-    __e_acsl_assert_register_int(& __gen_e_acsl_assert_data,
-                                 "\\valid_read(nptr)",0,
-                                 __gen_e_acsl_valid_read);
-    __gen_e_acsl_assert_data.blocking = 1;
-    __gen_e_acsl_assert_data.kind = "Precondition";
-    __gen_e_acsl_assert_data.pred_txt = "\\valid_read(nptr)";
-    __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
-    __gen_e_acsl_assert_data.fct = "atoi";
-    __gen_e_acsl_assert_data.line = 79;
-    __gen_e_acsl_assert_data.name = "valid_nptr";
-    __e_acsl_assert(__gen_e_acsl_valid_read,& __gen_e_acsl_assert_data);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
-  }
-  __retres = atoi(nptr);
-  __e_acsl_delete_block((void *)(& nptr));
-  return __retres;
-}
-
-void __e_acsl_globals_init(void)
-{
-  static char __e_acsl_already_run = 0;
-  if (! __e_acsl_already_run) {
-    __e_acsl_already_run = 1;
-    __gen_e_acsl_literal_string = "134";
-    __e_acsl_store_block((void *)__gen_e_acsl_literal_string,sizeof("134"));
-    __e_acsl_full_init((void *)__gen_e_acsl_literal_string);
-    __e_acsl_mark_readonly((void *)__gen_e_acsl_literal_string);
-    __e_acsl_store_block((void *)(& n),8UL);
-    __e_acsl_full_init((void *)(& n));
-  }
-  return;
-}
-
-void __e_acsl_globals_clean(void)
-{
-  __e_acsl_delete_block((void *)(& n));
-  return;
-}
-
 int main(int argc, char **argv)
 {
   int __retres;
   __e_acsl_memory_init(& argc,& argv,8UL);
-  __e_acsl_globals_init();
   argc = __gen_e_acsl_atoi((char const *)n);
   a = argc;
   __retres = 0;
-  __e_acsl_globals_clean();
   __e_acsl_memory_clean();
   return __retres;
 }
 
+/*@ requires valid_nptr: valid_read_string(nptr);
+    assigns \result;
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
+ */
+int __gen_e_acsl_atoi(char const *nptr)
+{
+  int __retres;
+  __retres = atoi(nptr);
+  return __retres;
+}
+
 
diff --git a/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c b/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c
index b7f66a5f4e92a111c9cce23e2a5931a58bbd29fd..8be695d45b22f463ff59f911800447ce33636a1e 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c
+++ b/src/plugins/e-acsl/tests/bts/oracle/gen_bts2252.c
@@ -134,7 +134,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_2.pred_txt = "\\valid(dest + (0 .. n - 1))";
     __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_2.fct = "strncpy";
-    __gen_e_acsl_assert_data_2.line = 380;
+    __gen_e_acsl_assert_data_2.line = 432;
     __gen_e_acsl_assert_data_2.name = "room_nstring";
     __e_acsl_assert(__gen_e_acsl_valid,& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
@@ -166,7 +166,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_4.pred_txt = "\\valid_read(dest + (0 .. n - 1))";
     __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_4.fct = "strncpy";
-    __gen_e_acsl_assert_data_4.line = 382;
+    __gen_e_acsl_assert_data_4.line = 434;
     __gen_e_acsl_assert_data_4.name = "separated_guard";
     __e_acsl_assert(__gen_e_acsl_valid_read,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -196,7 +196,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_5.pred_txt = "\\valid_read(src + (0 .. n - 1))";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_5.fct = "strncpy";
-    __gen_e_acsl_assert_data_5.line = 382;
+    __gen_e_acsl_assert_data_5.line = 434;
     __gen_e_acsl_assert_data_5.name = "separated_guard";
     __e_acsl_assert(__gen_e_acsl_valid_read_2,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
@@ -242,7 +242,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_3.pred_txt = "\\separated(dest + (0 .. n - 1), src + (0 .. n - 1))";
     __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_3.fct = "strncpy";
-    __gen_e_acsl_assert_data_3.line = 382;
+    __gen_e_acsl_assert_data_3.line = 434;
     __gen_e_acsl_assert_data_3.name = "separation";
     __e_acsl_assert(__gen_e_acsl_separated,& __gen_e_acsl_assert_data_3);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
@@ -277,7 +277,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_6.pred_txt = "\\result == \\old(dest)";
     __gen_e_acsl_assert_data_6.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_6.fct = "strncpy";
-    __gen_e_acsl_assert_data_6.line = 385;
+    __gen_e_acsl_assert_data_6.line = 437;
     __gen_e_acsl_assert_data_6.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_6);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
@@ -324,7 +324,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_7.pred_txt = "\\initialized(\\old(dest) + (0 .. \\old(n) - 1))";
     __gen_e_acsl_assert_data_7.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_7.fct = "strncpy";
-    __gen_e_acsl_assert_data_7.line = 386;
+    __gen_e_acsl_assert_data_7.line = 438;
     __gen_e_acsl_assert_data_7.name = "initialization";
     __e_acsl_assert(__gen_e_acsl_initialized,& __gen_e_acsl_assert_data_7);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
diff --git a/src/plugins/e-acsl/tests/bts/oracle/issue-eacsl-40.res.oracle b/src/plugins/e-acsl/tests/bts/oracle/issue-eacsl-40.res.oracle
index 184cc7c43cb0d75f71518fbf5bb280f1f106c08c..96e87b4281599a62d57423f7c2349dfd86234f62 100644
--- a/src/plugins/e-acsl/tests/bts/oracle/issue-eacsl-40.res.oracle
+++ b/src/plugins/e-acsl/tests/bts/oracle/issue-eacsl-40.res.oracle
@@ -10,7 +10,7 @@
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/stdio.h:150: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcat.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcat.c
index 4b7638e94a5dcf4c5ad4f2e4c7a2c40e5efc0da5..a2904448f631c591cc7db3ec068c629ba59df762 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcat.c
+++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcat.c
@@ -792,7 +792,7 @@ void __gen_e_acsl_exit(int status)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "exit";
-    __gen_e_acsl_assert_data.line = 509;
+    __gen_e_acsl_assert_data.line = 541;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcmp.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcmp.c
index 9c35a66cd700e4fb8ceffb736ce91231c9018973..aafae25a51c25baa8bb9bc3555cacf4f0deccc62 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcmp.c
+++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcmp.c
@@ -96,19 +96,20 @@ pid_t __gen_e_acsl_fork(void);
     allocates \result;
     
     behavior allocation:
-      assumes can_allocate: is_allocable(strlen(s));
-      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
+      assumes can_allocate: is_allocable(strlen(s) + 1);
+      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)) + 1);
       ensures
         result_valid_string_and_same_contents:
           valid_string(\result) && strcmp(\result, \old(s)) == 0;
       assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
+      assigns __fc_heap_status
+        \from __fc_heap_status, (indirect: *(s + (0 .. strlen{Old}(s))));
       assigns \result
         \from (indirect: *(s + (0 .. strlen{Old}(s)))),
               (indirect: __fc_heap_status);
     
     behavior no_allocation:
-      assumes cannot_allocate: !is_allocable(strlen(s));
+      assumes cannot_allocate: !is_allocable(strlen(s) + 1);
       ensures result_null: \result == \null;
       assigns \result;
       assigns \result \from \nothing;
@@ -133,19 +134,20 @@ __inline static void fail_ncomp(int cond, char *fmt, int l, int r)
     allocates \result;
     
     behavior allocation:
-      assumes can_allocate: is_allocable(strlen(s));
-      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
+      assumes can_allocate: is_allocable(strlen(s) + 1);
+      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)) + 1);
       ensures
         result_valid_string_and_same_contents:
           valid_string(\result) && strcmp(\result, \old(s)) == 0;
       assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
+      assigns __fc_heap_status
+        \from __fc_heap_status, (indirect: *(s + (0 .. strlen{Old}(s))));
       assigns \result
         \from (indirect: *(s + (0 .. strlen{Old}(s)))),
               (indirect: __fc_heap_status);
     
     behavior no_allocation:
-      assumes cannot_allocate: !is_allocable(strlen(s));
+      assumes cannot_allocate: !is_allocable(strlen(s) + 1);
       ensures result_null: \result == \null;
       assigns \result;
       assigns \result \from \nothing;
@@ -171,7 +173,7 @@ char *__gen_e_acsl_strdup(char const *s)
       __gen_e_acsl_assert_data_4.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
       __gen_e_acsl_assert_data_4.fct = "strdup";
-      __gen_e_acsl_assert_data_4.line = 498;
+      __gen_e_acsl_assert_data_4.line = 580;
       __gen_e_acsl_assert_data_4.name = "no_allocation/result_null";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_4);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -357,7 +359,7 @@ void __gen_e_acsl_exit(int status)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "exit";
-    __gen_e_acsl_assert_data.line = 509;
+    __gen_e_acsl_assert_data.line = 541;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
@@ -379,7 +381,7 @@ void __gen_e_acsl_abort(void)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "abort";
-    __gen_e_acsl_assert_data.line = 496;
+    __gen_e_acsl_assert_data.line = 528;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c
index 6f9d70db13712a2040066f398ae45df61fb4fb55..4bdf04acd31d6212bcdc2b2de81a9f28e19b2922 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c
+++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strcpy.c
@@ -81,19 +81,20 @@ pid_t __gen_e_acsl_fork(void);
     allocates \result;
     
     behavior allocation:
-      assumes can_allocate: is_allocable(strlen(s));
-      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
+      assumes can_allocate: is_allocable(strlen(s) + 1);
+      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)) + 1);
       ensures
         result_valid_string_and_same_contents:
           valid_string(\result) && strcmp(\result, \old(s)) == 0;
       assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
+      assigns __fc_heap_status
+        \from __fc_heap_status, (indirect: *(s + (0 .. strlen{Old}(s))));
       assigns \result
         \from (indirect: *(s + (0 .. strlen{Old}(s)))),
               (indirect: __fc_heap_status);
     
     behavior no_allocation:
-      assumes cannot_allocate: !is_allocable(strlen(s));
+      assumes cannot_allocate: !is_allocable(strlen(s) + 1);
       ensures result_null: \result == \null;
       assigns \result;
       assigns \result \from \nothing;
@@ -547,19 +548,20 @@ void test_memory_tracking(void)
     allocates \result;
     
     behavior allocation:
-      assumes can_allocate: is_allocable(strlen(s));
-      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
+      assumes can_allocate: is_allocable(strlen(s) + 1);
+      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)) + 1);
       ensures
         result_valid_string_and_same_contents:
           valid_string(\result) && strcmp(\result, \old(s)) == 0;
       assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
+      assigns __fc_heap_status
+        \from __fc_heap_status, (indirect: *(s + (0 .. strlen{Old}(s))));
       assigns \result
         \from (indirect: *(s + (0 .. strlen{Old}(s)))),
               (indirect: __fc_heap_status);
     
     behavior no_allocation:
-      assumes cannot_allocate: !is_allocable(strlen(s));
+      assumes cannot_allocate: !is_allocable(strlen(s) + 1);
       ensures result_null: \result == \null;
       assigns \result;
       assigns \result \from \nothing;
@@ -585,7 +587,7 @@ char *__gen_e_acsl_strdup(char const *s)
       __gen_e_acsl_assert_data_4.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
       __gen_e_acsl_assert_data_4.fct = "strdup";
-      __gen_e_acsl_assert_data_4.line = 498;
+      __gen_e_acsl_assert_data_4.line = 580;
       __gen_e_acsl_assert_data_4.name = "no_allocation/result_null";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_4);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -771,7 +773,7 @@ void __gen_e_acsl_exit(int status)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "exit";
-    __gen_e_acsl_assert_data.line = 509;
+    __gen_e_acsl_assert_data.line = 541;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/gen_strlen.c b/src/plugins/e-acsl/tests/builtin/oracle/gen_strlen.c
index f664123b0263e0f30b360cc8c7c13fb9e86f93dd..e5c67b3fb3b1eb361f97809de5e41f5864b36fbd 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/gen_strlen.c
+++ b/src/plugins/e-acsl/tests/builtin/oracle/gen_strlen.c
@@ -79,19 +79,20 @@ pid_t __gen_e_acsl_fork(void);
     allocates \result;
     
     behavior allocation:
-      assumes can_allocate: is_allocable(strlen(s));
-      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
+      assumes can_allocate: is_allocable(strlen(s) + 1);
+      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)) + 1);
       ensures
         result_valid_string_and_same_contents:
           valid_string(\result) && strcmp(\result, \old(s)) == 0;
       assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
+      assigns __fc_heap_status
+        \from __fc_heap_status, (indirect: *(s + (0 .. strlen{Old}(s))));
       assigns \result
         \from (indirect: *(s + (0 .. strlen{Old}(s)))),
               (indirect: __fc_heap_status);
     
     behavior no_allocation:
-      assumes cannot_allocate: !is_allocable(strlen(s));
+      assumes cannot_allocate: !is_allocable(strlen(s) + 1);
       ensures result_null: \result == \null;
       assigns \result;
       assigns \result \from \nothing;
@@ -107,19 +108,20 @@ char *__gen_e_acsl_strdup(char const *s);
     allocates \result;
     
     behavior allocation:
-      assumes can_allocate: is_allocable(strlen(s));
-      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
+      assumes can_allocate: is_allocable(strlen(s) + 1);
+      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)) + 1);
       ensures
         result_valid_string_and_same_contents:
           valid_string(\result) && strcmp(\result, \old(s)) == 0;
       assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
+      assigns __fc_heap_status
+        \from __fc_heap_status, (indirect: *(s + (0 .. strlen{Old}(s))));
       assigns \result
         \from (indirect: *(s + (0 .. strlen{Old}(s)))),
               (indirect: __fc_heap_status);
     
     behavior no_allocation:
-      assumes cannot_allocate: !is_allocable(strlen(s));
+      assumes cannot_allocate: !is_allocable(strlen(s) + 1);
       ensures result_null: \result == \null;
       assigns \result;
       assigns \result \from \nothing;
@@ -145,7 +147,7 @@ char *__gen_e_acsl_strdup(char const *s)
       __gen_e_acsl_assert_data_4.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
       __gen_e_acsl_assert_data_4.fct = "strdup";
-      __gen_e_acsl_assert_data_4.line = 498;
+      __gen_e_acsl_assert_data_4.line = 580;
       __gen_e_acsl_assert_data_4.name = "no_allocation/result_null";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_4);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -331,7 +333,7 @@ void __gen_e_acsl_exit(int status)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "exit";
-    __gen_e_acsl_assert_data.line = 509;
+    __gen_e_acsl_assert_data.line = 541;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
@@ -353,7 +355,7 @@ void __gen_e_acsl_abort(void)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "abort";
-    __gen_e_acsl_assert_data.line = 496;
+    __gen_e_acsl_assert_data.line = 528;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/strcat.res.oracle b/src/plugins/e-acsl/tests/builtin/oracle/strcat.res.oracle
index 7f0d1b078e515df1319346ac4b3ced1735c9977d..d02d6247e7e134b8e18351ca759fc2f4024258fc 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/strcat.res.oracle
+++ b/src/plugins/e-acsl/tests/builtin/oracle/strcat.res.oracle
@@ -17,10 +17,10 @@
 [e-acsl] FRAMAC_SHARE/libc/sys/wait.h:89: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:506: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:538: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:508: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:540: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/strcmp.res.oracle b/src/plugins/e-acsl/tests/builtin/oracle/strcmp.res.oracle
index c5757eeb2476186670ecbd87134e9f890ddc23fd..bb53260a54ca0222e1bf8754fc5faeaed952d866 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/strcmp.res.oracle
+++ b/src/plugins/e-acsl/tests/builtin/oracle/strcmp.res.oracle
@@ -16,37 +16,37 @@
 [e-acsl] Warning: annotating undefined function `strdup':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:565: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:488: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:569: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:495: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:577: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:491: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:573: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:493: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:575: Warning: 
   no assigns clause generated for function valid_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/unistd.h:850: Warning: 
@@ -58,17 +58,17 @@
 [e-acsl] FRAMAC_SHARE/libc/sys/wait.h:89: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:506: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:538: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:508: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:540: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:493: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:525: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:495: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:527: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/strcpy.res.oracle b/src/plugins/e-acsl/tests/builtin/oracle/strcpy.res.oracle
index 03b81f4802fa4f8e3ba5b51f4c87521e71b8e8bd..36773318ccf7f203c260c7eba876974ab4ffd741 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/strcpy.res.oracle
+++ b/src/plugins/e-acsl/tests/builtin/oracle/strcpy.res.oracle
@@ -11,37 +11,37 @@
 [e-acsl] Warning: annotating undefined function `strdup':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:565: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:488: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:569: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:495: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:577: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:491: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:573: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:493: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:575: Warning: 
   no assigns clause generated for function valid_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/unistd.h:850: Warning: 
@@ -53,10 +53,10 @@
 [e-acsl] FRAMAC_SHARE/libc/sys/wait.h:89: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:506: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:538: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:508: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:540: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/builtin/oracle/strlen.res.oracle b/src/plugins/e-acsl/tests/builtin/oracle/strlen.res.oracle
index 312005092277b3411904efc7842a3a6f846f38b4..ac28c649697dc770832a6a04fa11d5428795ea59 100644
--- a/src/plugins/e-acsl/tests/builtin/oracle/strlen.res.oracle
+++ b/src/plugins/e-acsl/tests/builtin/oracle/strlen.res.oracle
@@ -14,37 +14,37 @@
 [e-acsl] Warning: annotating undefined function `strdup':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:565: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:488: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:569: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:495: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:577: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:484: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:564: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:491: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:573: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:493: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:575: Warning: 
   no assigns clause generated for function valid_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/unistd.h:850: Warning: 
@@ -56,17 +56,17 @@
 [e-acsl] FRAMAC_SHARE/libc/sys/wait.h:89: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:506: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:538: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:508: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:540: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:493: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:525: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:495: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:527: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/gen_parallel_threads.c b/src/plugins/e-acsl/tests/concurrency/oracle/gen_parallel_threads.c
index 0b015a34965af1b60854b2680b95718c1bb533c1..e9281168b6bbb8ee93f74d0ad3133033c9450818 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/gen_parallel_threads.c
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/gen_parallel_threads.c
@@ -57,8 +57,9 @@ int __gen_e_acsl_pthread_cond_wait(pthread_cond_t * restrict cond,
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg == \null || \valid((char *)arg);
     ensures
-      success_or_error:
-        \result == 0 || \result == 11 || \result == 22 || \result == 1;
+      initialization: success_or_error:
+        (\result == 0 && \initialized(\old(thread))) || \result == 11 ||
+        \result == 22 || \result == 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -776,7 +777,7 @@ void __gen_e_acsl_exit(int status)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "exit";
-    __gen_e_acsl_assert_data.line = 509;
+    __gen_e_acsl_assert_data.line = 541;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     __e_acsl_delete_block((void *)(& status));
@@ -1186,8 +1187,9 @@ int __gen_e_acsl_pthread_join(pthread_t thread, void **retval)
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg == \null || \valid((char *)arg);
     ensures
-      success_or_error:
-        \result == 0 || \result == 11 || \result == 22 || \result == 1;
+      initialization: success_or_error:
+        (\result == 0 && \initialized(\old(thread))) || \result == 11 ||
+        \result == 22 || \result == 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -1197,6 +1199,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
                                 void *(*start_routine)(void *),
                                 void * restrict arg)
 {
+  pthread_t *__gen_e_acsl_at;
   int __retres;
   __e_acsl_store_block((void *)(& __retres),4UL);
   {
@@ -1207,6 +1210,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
     __e_acsl_store_block((void *)(& start_routine),8UL);
     __e_acsl_store_block((void *)(& attr),8UL);
     __e_acsl_store_block((void *)(& thread),8UL);
+    __gen_e_acsl_at = thread;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
     __gen_e_acsl_valid = __e_acsl_valid((void *)thread,sizeof(pthread_t),
                                         (void *)thread,(void *)(& thread));
@@ -1283,6 +1287,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
   }
   __retres = __e_acsl_pthread_create(thread,attr,start_routine,arg);
   {
+    int __gen_e_acsl_and;
     int __gen_e_acsl_or_3;
     int __gen_e_acsl_or_4;
     int __gen_e_acsl_or_5;
@@ -1290,7 +1295,21 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
       {.values = (void *)0};
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"\\result",0,
                                  __retres);
-    if (__retres == 0) __gen_e_acsl_or_3 = 1;
+    if (__retres == 0) {
+      int __gen_e_acsl_initialized;
+      __gen_e_acsl_initialized = __e_acsl_initialized((void *)__gen_e_acsl_at,
+                                                      sizeof(pthread_t));
+      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,
+                                   "\\old(thread)",(void *)__gen_e_acsl_at);
+      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,
+                                     "sizeof(pthread_t)",0,sizeof(pthread_t));
+      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,
+                                   "\\initialized(\\old(thread))",0,
+                                   __gen_e_acsl_initialized);
+      __gen_e_acsl_and = __gen_e_acsl_initialized;
+    }
+    else __gen_e_acsl_and = 0;
+    if (__gen_e_acsl_and) __gen_e_acsl_or_3 = 1;
     else {
       __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"\\result",0,
                                    __retres);
@@ -1310,11 +1329,11 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
     }
     __gen_e_acsl_assert_data_5.blocking = 1;
     __gen_e_acsl_assert_data_5.kind = "Postcondition";
-    __gen_e_acsl_assert_data_5.pred_txt = "\\result == 0 || \\result == 11 || \\result == 22 || \\result == 1";
+    __gen_e_acsl_assert_data_5.pred_txt = "(\\result == 0 && \\initialized(\\old(thread))) || \\result == 11 ||\n\\result == 22 || \\result == 1";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/pthread.h";
     __gen_e_acsl_assert_data_5.fct = "pthread_create";
     __gen_e_acsl_assert_data_5.line = 230;
-    __gen_e_acsl_assert_data_5.name = "success_or_error";
+    __gen_e_acsl_assert_data_5.name = "initialization/success_or_error";
     __e_acsl_assert(__gen_e_acsl_or_5,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
     __e_acsl_delete_block((void *)(& arg));
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/gen_sequential_threads.c b/src/plugins/e-acsl/tests/concurrency/oracle/gen_sequential_threads.c
index 27941103b5c4840cc1cc4089b41537e579c19e64..36d1dce6d2719e461178329a4ea33ff5ca89e92d 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/gen_sequential_threads.c
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/gen_sequential_threads.c
@@ -14,8 +14,9 @@ extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg == \null || \valid((char *)arg);
     ensures
-      success_or_error:
-        \result == 0 || \result == 11 || \result == 22 || \result == 1;
+      initialization: success_or_error:
+        (\result == 0 && \initialized(\old(thread))) || \result == 11 ||
+        \result == 22 || \result == 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -290,8 +291,9 @@ int __gen_e_acsl_pthread_join(pthread_t thread, void **retval)
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg == \null || \valid((char *)arg);
     ensures
-      success_or_error:
-        \result == 0 || \result == 11 || \result == 22 || \result == 1;
+      initialization: success_or_error:
+        (\result == 0 && \initialized(\old(thread))) || \result == 11 ||
+        \result == 22 || \result == 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -301,6 +303,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
                                 void *(*start_routine)(void *),
                                 void * restrict arg)
 {
+  pthread_t *__gen_e_acsl_at;
   int __retres;
   __e_acsl_store_block((void *)(& __retres),4UL);
   {
@@ -311,6 +314,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
     __e_acsl_store_block((void *)(& start_routine),8UL);
     __e_acsl_store_block((void *)(& attr),8UL);
     __e_acsl_store_block((void *)(& thread),8UL);
+    __gen_e_acsl_at = thread;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
     __gen_e_acsl_valid = __e_acsl_valid((void *)thread,sizeof(pthread_t),
                                         (void *)thread,(void *)(& thread));
@@ -387,6 +391,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
   }
   __retres = __e_acsl_pthread_create(thread,attr,start_routine,arg);
   {
+    int __gen_e_acsl_and;
     int __gen_e_acsl_or_3;
     int __gen_e_acsl_or_4;
     int __gen_e_acsl_or_5;
@@ -394,7 +399,21 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
       {.values = (void *)0};
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"\\result",0,
                                  __retres);
-    if (__retres == 0) __gen_e_acsl_or_3 = 1;
+    if (__retres == 0) {
+      int __gen_e_acsl_initialized;
+      __gen_e_acsl_initialized = __e_acsl_initialized((void *)__gen_e_acsl_at,
+                                                      sizeof(pthread_t));
+      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,
+                                   "\\old(thread)",(void *)__gen_e_acsl_at);
+      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,
+                                     "sizeof(pthread_t)",0,sizeof(pthread_t));
+      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,
+                                   "\\initialized(\\old(thread))",0,
+                                   __gen_e_acsl_initialized);
+      __gen_e_acsl_and = __gen_e_acsl_initialized;
+    }
+    else __gen_e_acsl_and = 0;
+    if (__gen_e_acsl_and) __gen_e_acsl_or_3 = 1;
     else {
       __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"\\result",0,
                                    __retres);
@@ -414,11 +433,11 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
     }
     __gen_e_acsl_assert_data_5.blocking = 1;
     __gen_e_acsl_assert_data_5.kind = "Postcondition";
-    __gen_e_acsl_assert_data_5.pred_txt = "\\result == 0 || \\result == 11 || \\result == 22 || \\result == 1";
+    __gen_e_acsl_assert_data_5.pred_txt = "(\\result == 0 && \\initialized(\\old(thread))) || \\result == 11 ||\n\\result == 22 || \\result == 1";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/pthread.h";
     __gen_e_acsl_assert_data_5.fct = "pthread_create";
     __gen_e_acsl_assert_data_5.line = 230;
-    __gen_e_acsl_assert_data_5.name = "success_or_error";
+    __gen_e_acsl_assert_data_5.name = "initialization/success_or_error";
     __e_acsl_assert(__gen_e_acsl_or_5,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
     __e_acsl_delete_block((void *)(& arg));
@@ -502,6 +521,7 @@ int main(void)
       args[i] = i;
       __gen_e_acsl_pthread_create(& t,(pthread_attr_t const *)0,
                                   & write_value,(void *)(& args[i]));
+      /*@ assert Eva: initialization: \initialized(&t); */
       __gen_e_acsl_pthread_join(t,(void **)0);
       __e_acsl_full_init((void *)(& i));
       i ++;
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_debug.c b/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_debug.c
index 038e1ab49bf714a185ab8ca15229e8be3d610bd8..cac668b0f9cf8de585284705b481dd97e48c6c84 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_debug.c
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_debug.c
@@ -57,8 +57,9 @@ int __gen_e_acsl_pthread_cond_wait(pthread_cond_t * restrict cond,
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg == \null || \valid((char *)arg);
     ensures
-      success_or_error:
-        \result == 0 || \result == 11 || \result == 22 || \result == 1;
+      initialization: success_or_error:
+        (\result == 0 && \initialized(\old(thread))) || \result == 11 ||
+        \result == 22 || \result == 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -458,7 +459,7 @@ void __gen_e_acsl_exit(int status)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "exit";
-    __gen_e_acsl_assert_data.line = 509;
+    __gen_e_acsl_assert_data.line = 541;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     __e_acsl_delete_block((void *)(& status));
@@ -868,8 +869,9 @@ int __gen_e_acsl_pthread_join(pthread_t thread, void **retval)
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg == \null || \valid((char *)arg);
     ensures
-      success_or_error:
-        \result == 0 || \result == 11 || \result == 22 || \result == 1;
+      initialization: success_or_error:
+        (\result == 0 && \initialized(\old(thread))) || \result == 11 ||
+        \result == 22 || \result == 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -879,6 +881,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
                                 void *(*start_routine)(void *),
                                 void * restrict arg)
 {
+  pthread_t *__gen_e_acsl_at;
   int __retres;
   __e_acsl_store_block((void *)(& __retres),4UL);
   {
@@ -889,6 +892,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
     __e_acsl_store_block((void *)(& start_routine),8UL);
     __e_acsl_store_block((void *)(& attr),8UL);
     __e_acsl_store_block((void *)(& thread),8UL);
+    __gen_e_acsl_at = thread;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
     __gen_e_acsl_valid = __e_acsl_valid((void *)thread,sizeof(pthread_t),
                                         (void *)thread,(void *)(& thread));
@@ -965,6 +969,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
   }
   __retres = __e_acsl_pthread_create(thread,attr,start_routine,arg);
   {
+    int __gen_e_acsl_and;
     int __gen_e_acsl_or_3;
     int __gen_e_acsl_or_4;
     int __gen_e_acsl_or_5;
@@ -972,7 +977,21 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
       {.values = (void *)0};
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"\\result",0,
                                  __retres);
-    if (__retres == 0) __gen_e_acsl_or_3 = 1;
+    if (__retres == 0) {
+      int __gen_e_acsl_initialized;
+      __gen_e_acsl_initialized = __e_acsl_initialized((void *)__gen_e_acsl_at,
+                                                      sizeof(pthread_t));
+      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,
+                                   "\\old(thread)",(void *)__gen_e_acsl_at);
+      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,
+                                     "sizeof(pthread_t)",0,sizeof(pthread_t));
+      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,
+                                   "\\initialized(\\old(thread))",0,
+                                   __gen_e_acsl_initialized);
+      __gen_e_acsl_and = __gen_e_acsl_initialized;
+    }
+    else __gen_e_acsl_and = 0;
+    if (__gen_e_acsl_and) __gen_e_acsl_or_3 = 1;
     else {
       __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"\\result",0,
                                    __retres);
@@ -992,11 +1011,11 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
     }
     __gen_e_acsl_assert_data_5.blocking = 1;
     __gen_e_acsl_assert_data_5.kind = "Postcondition";
-    __gen_e_acsl_assert_data_5.pred_txt = "\\result == 0 || \\result == 11 || \\result == 22 || \\result == 1";
+    __gen_e_acsl_assert_data_5.pred_txt = "(\\result == 0 && \\initialized(\\old(thread))) || \\result == 11 ||\n\\result == 22 || \\result == 1";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/pthread.h";
     __gen_e_acsl_assert_data_5.fct = "pthread_create";
     __gen_e_acsl_assert_data_5.line = 230;
-    __gen_e_acsl_assert_data_5.name = "success_or_error";
+    __gen_e_acsl_assert_data_5.name = "initialization/success_or_error";
     __e_acsl_assert(__gen_e_acsl_or_5,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
     __e_acsl_delete_block((void *)(& arg));
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_safe_locations.c b/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_safe_locations.c
index 6713347b1c7fa5b3986d3b51d485eb65c798ccd3..2b24521f07876b09dc236d967954089135460d9c 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_safe_locations.c
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/gen_threads_safe_locations.c
@@ -14,8 +14,9 @@ extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg == \null || \valid((char *)arg);
     ensures
-      success_or_error:
-        \result == 0 || \result == 11 || \result == 22 || \result == 1;
+      initialization: success_or_error:
+        (\result == 0 && \initialized(\old(thread))) || \result == 11 ||
+        \result == 22 || \result == 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -262,8 +263,9 @@ int __gen_e_acsl_pthread_join(pthread_t thread, void **retval)
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg == \null || \valid((char *)arg);
     ensures
-      success_or_error:
-        \result == 0 || \result == 11 || \result == 22 || \result == 1;
+      initialization: success_or_error:
+        (\result == 0 && \initialized(\old(thread))) || \result == 11 ||
+        \result == 22 || \result == 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -273,6 +275,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
                                 void *(*start_routine)(void *),
                                 void * restrict arg)
 {
+  pthread_t *__gen_e_acsl_at;
   int __retres;
   __e_acsl_store_block((void *)(& __retres),4UL);
   {
@@ -283,6 +286,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
     __e_acsl_store_block((void *)(& start_routine),8UL);
     __e_acsl_store_block((void *)(& attr),8UL);
     __e_acsl_store_block((void *)(& thread),8UL);
+    __gen_e_acsl_at = thread;
     __e_acsl_assert_data_t __gen_e_acsl_assert_data = {.values = (void *)0};
     __gen_e_acsl_valid = __e_acsl_valid((void *)thread,sizeof(pthread_t),
                                         (void *)thread,(void *)(& thread));
@@ -359,6 +363,7 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
   }
   __retres = __e_acsl_pthread_create(thread,attr,start_routine,arg);
   {
+    int __gen_e_acsl_and;
     int __gen_e_acsl_or_3;
     int __gen_e_acsl_or_4;
     int __gen_e_acsl_or_5;
@@ -366,7 +371,21 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
       {.values = (void *)0};
     __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"\\result",0,
                                  __retres);
-    if (__retres == 0) __gen_e_acsl_or_3 = 1;
+    if (__retres == 0) {
+      int __gen_e_acsl_initialized;
+      __gen_e_acsl_initialized = __e_acsl_initialized((void *)__gen_e_acsl_at,
+                                                      sizeof(pthread_t));
+      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,
+                                   "\\old(thread)",(void *)__gen_e_acsl_at);
+      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,
+                                     "sizeof(pthread_t)",0,sizeof(pthread_t));
+      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,
+                                   "\\initialized(\\old(thread))",0,
+                                   __gen_e_acsl_initialized);
+      __gen_e_acsl_and = __gen_e_acsl_initialized;
+    }
+    else __gen_e_acsl_and = 0;
+    if (__gen_e_acsl_and) __gen_e_acsl_or_3 = 1;
     else {
       __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_5,"\\result",0,
                                    __retres);
@@ -386,11 +405,11 @@ int __gen_e_acsl_pthread_create(pthread_t * restrict thread,
     }
     __gen_e_acsl_assert_data_5.blocking = 1;
     __gen_e_acsl_assert_data_5.kind = "Postcondition";
-    __gen_e_acsl_assert_data_5.pred_txt = "\\result == 0 || \\result == 11 || \\result == 22 || \\result == 1";
+    __gen_e_acsl_assert_data_5.pred_txt = "(\\result == 0 && \\initialized(\\old(thread))) || \\result == 11 ||\n\\result == 22 || \\result == 1";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/pthread.h";
     __gen_e_acsl_assert_data_5.fct = "pthread_create";
     __gen_e_acsl_assert_data_5.line = 230;
-    __gen_e_acsl_assert_data_5.name = "success_or_error";
+    __gen_e_acsl_assert_data_5.name = "initialization/success_or_error";
     __e_acsl_assert(__gen_e_acsl_or_5,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
     __e_acsl_delete_block((void *)(& arg));
@@ -462,6 +481,7 @@ int main(void)
   __e_acsl_store_block((void *)(& __retres),4UL);
   __gen_e_acsl_pthread_create(& t,(pthread_attr_t const *)0,& thread_start,
                               (void *)0);
+  /*@ assert Eva: initialization: \initialized(&t); */
   __gen_e_acsl_pthread_join(t,(void **)0);
   __e_acsl_full_init((void *)(& __retres));
   __retres = 0;
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/parallel_threads.res.oracle b/src/plugins/e-acsl/tests/concurrency/oracle/parallel_threads.res.oracle
index 15de4811925f5db10bf980a8b4578b0ec2855879..c2671f31670003c3374aa767424ef6516e317057 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/parallel_threads.res.oracle
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/parallel_threads.res.oracle
@@ -38,16 +38,16 @@
 [e-acsl] FRAMAC_SHARE/libc/unistd.h:1149: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:506: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:538: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:508: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:540: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/stdio.h:486: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
@@ -143,6 +143,15 @@
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:226: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
+                                                        \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:231: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
@@ -154,6 +163,8 @@
                                                       \valid(data->values) got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __gen_e_acsl_pthread_create: postcondition 'initialization,success_or_error' got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:223: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:226: Warning: 
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/sequential_threads.res.oracle b/src/plugins/e-acsl/tests/concurrency/oracle/sequential_threads.res.oracle
index 11df192b2e43ead116e264fd970eb63272265d63..c9e7bf5db133be55961924138932e00167fbd694 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/sequential_threads.res.oracle
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/sequential_threads.res.oracle
@@ -38,6 +38,15 @@
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:226: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
+                                                        \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:231: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
@@ -49,3 +58,7 @@
                                                       \valid(data->values) got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __gen_e_acsl_pthread_create: postcondition 'initialization,success_or_error' got status unknown.
+[eva:alarm] sequential_threads.c:29: Warning: 
+  accessing uninitialized left-value. assert \initialized(&t);
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/threads_debug.res.oracle b/src/plugins/e-acsl/tests/concurrency/oracle/threads_debug.res.oracle
index 15de4811925f5db10bf980a8b4578b0ec2855879..c2671f31670003c3374aa767424ef6516e317057 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/threads_debug.res.oracle
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/threads_debug.res.oracle
@@ -38,16 +38,16 @@
 [e-acsl] FRAMAC_SHARE/libc/unistd.h:1149: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:506: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:538: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:508: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:540: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/stdio.h:486: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
@@ -143,6 +143,15 @@
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:226: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
+                                                        \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:231: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
@@ -154,6 +163,8 @@
                                                       \valid(data->values) got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __gen_e_acsl_pthread_create: postcondition 'initialization,success_or_error' got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:223: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:226: Warning: 
diff --git a/src/plugins/e-acsl/tests/concurrency/oracle/threads_safe_locations.res.oracle b/src/plugins/e-acsl/tests/concurrency/oracle/threads_safe_locations.res.oracle
index e4d7cbce644423d1685f5c6a2e7083b9a955340a..3130ac26669d724fa378766683c9e949ab9cb60a 100644
--- a/src/plugins/e-acsl/tests/concurrency/oracle/threads_safe_locations.res.oracle
+++ b/src/plugins/e-acsl/tests/concurrency/oracle/threads_safe_locations.res.oracle
@@ -29,6 +29,15 @@
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:223: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
+                                                        \valid(data->values) got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __e_acsl_assert_register_int: precondition data->values == \null ||
+                                                      \valid(data->values) got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:231: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
@@ -40,3 +49,7 @@
                                                       \valid(data->values) got status unknown.
 [eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/pthread.h:230: Warning: 
+  function __gen_e_acsl_pthread_create: postcondition 'initialization,success_or_error' got status unknown.
+[eva:alarm] threads_safe_locations.c:17: Warning: 
+  accessing uninitialized left-value. assert \initialized(&t);
diff --git a/src/plugins/e-acsl/tests/format/oracle/fprintf.res.oracle b/src/plugins/e-acsl/tests/format/oracle/fprintf.res.oracle
index e0ab74f6877939800c04eb5fb874710696087aba..2dcda065ad345a25c446f7e441e3437171ce512c 100644
--- a/src/plugins/e-acsl/tests/format/oracle/fprintf.res.oracle
+++ b/src/plugins/e-acsl/tests/format/oracle/fprintf.res.oracle
@@ -23,10 +23,10 @@
 [e-acsl] FRAMAC_SHARE/libc/sys/wait.h:89: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:506: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:538: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:508: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:540: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/format/oracle/gen_fprintf.c b/src/plugins/e-acsl/tests/format/oracle/gen_fprintf.c
index 4a33bd3241df783d731134af5c29df82ca0b3ce8..7ea82209ac305bd902f1f1401d7e28553e6cb744 100644
--- a/src/plugins/e-acsl/tests/format/oracle/gen_fprintf.c
+++ b/src/plugins/e-acsl/tests/format/oracle/gen_fprintf.c
@@ -270,7 +270,7 @@ void __gen_e_acsl_exit(int status)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "exit";
-    __gen_e_acsl_assert_data.line = 509;
+    __gen_e_acsl_assert_data.line = 541;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
diff --git a/src/plugins/e-acsl/tests/format/oracle/gen_printf.c b/src/plugins/e-acsl/tests/format/oracle/gen_printf.c
index 126be8f248f48ba6ae34effa046ec38adb5938bd..3303e73fa2a01ff61f0f5f76a2c3ac0665b3a6c4 100644
--- a/src/plugins/e-acsl/tests/format/oracle/gen_printf.c
+++ b/src/plugins/e-acsl/tests/format/oracle/gen_printf.c
@@ -527,23 +527,21 @@ size_t __gen_e_acsl_strlen(char const *s);
     
     behavior found:
       assumes char_found: strchr(s, c) == \true;
+      ensures result_valid_string: valid_read_string(\result);
       ensures result_char: *\result == (char)\old(c);
       ensures result_same_base: \base_addr(\result) == \base_addr(\old(s));
       ensures
         result_in_length: \old(s) <= \result <= \old(s) + strlen(\old(s));
-      ensures result_valid_string: valid_read_string(\result);
       ensures
-        result_first_occur:
+        result_first_occurrence:
           \forall char *p; \old(s) <= p < \result ==> *p != (char)\old(c);
     
     behavior not_found:
       assumes char_not_found: !(strchr(s, c) == \true);
       ensures result_null: \result == \null;
     
-    behavior default:
-      ensures
-        result_null_or_same_base:
-          \result == \null || \base_addr(\result) == \base_addr(\old(s));
+    complete behaviors not_found, found;
+    disjoint behaviors not_found, found;
  */
 char *__gen_e_acsl_strchr(char const *s, int c);
 
@@ -770,7 +768,7 @@ char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src)
     __gen_e_acsl_assert_data_6.pred_txt = "__gen_e_acsl_strcpy_src_size + 1 <= 18446744073709551615";
     __gen_e_acsl_assert_data_6.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_6.fct = "strcpy";
-    __gen_e_acsl_assert_data_6.line = 367;
+    __gen_e_acsl_assert_data_6.line = 419;
     __gen_e_acsl_assert_data_6.name = "size_lesser_or_eq_than_SIZE_MAX";
     __e_acsl_assert(__gen_e_acsl_le <= 0,& __gen_e_acsl_assert_data_6);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
@@ -793,7 +791,7 @@ char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src)
     __gen_e_acsl_assert_data_8.pred_txt = "\\result == \\old(dest)";
     __gen_e_acsl_assert_data_8.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_8.fct = "strcpy";
-    __gen_e_acsl_assert_data_8.line = 374;
+    __gen_e_acsl_assert_data_8.line = 426;
     __gen_e_acsl_assert_data_8.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_8);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
@@ -810,23 +808,21 @@ char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src)
     
     behavior found:
       assumes char_found: strchr(s, c) == \true;
+      ensures result_valid_string: valid_read_string(\result);
       ensures result_char: *\result == (char)\old(c);
       ensures result_same_base: \base_addr(\result) == \base_addr(\old(s));
       ensures
         result_in_length: \old(s) <= \result <= \old(s) + strlen(\old(s));
-      ensures result_valid_string: valid_read_string(\result);
       ensures
-        result_first_occur:
+        result_first_occurrence:
           \forall char *p; \old(s) <= p < \result ==> *p != (char)\old(c);
     
     behavior not_found:
       assumes char_not_found: !(strchr(s, c) == \true);
       ensures result_null: \result == \null;
     
-    behavior default:
-      ensures
-        result_null_or_same_base:
-          \result == \null || \base_addr(\result) == \base_addr(\old(s));
+    complete behaviors not_found, found;
+    disjoint behaviors not_found, found;
  */
 char *__gen_e_acsl_strchr(char const *s, int c)
 {
@@ -838,8 +834,7 @@ char *__gen_e_acsl_strchr(char const *s, int c)
   __e_acsl_store_block((void *)(& s),8UL);
   __gen_e_acsl_at = s;
   __gen_e_acsl_at_2 = c;
-  __gen_e_acsl_contract = __e_acsl_contract_init(3UL);
-  __e_acsl_contract_set_behavior_assumes(__gen_e_acsl_contract,2UL,1);
+  __gen_e_acsl_contract = __e_acsl_contract_init(2UL);
   __retres = strchr(s,c);
   {
     int __gen_e_acsl_assumes_value;
@@ -850,15 +845,15 @@ char *__gen_e_acsl_strchr(char const *s, int c)
       int __gen_e_acsl_and;
       void *__gen_e_acsl_base_addr;
       void *__gen_e_acsl_base_addr_2;
-      __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
-        {.values = (void *)0};
       __e_acsl_assert_data_t __gen_e_acsl_assert_data_3 =
         {.values = (void *)0};
+      __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
+        {.values = (void *)0};
       __gen_e_acsl_initialized = __e_acsl_initialized((void *)(& __retres),
                                                       sizeof(char *));
-      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"&__retres",
+      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,"&__retres",
                                    (void *)(& __retres));
-      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,
+      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,
                                      "sizeof(char *)",0,sizeof(char *));
       if (__gen_e_acsl_initialized) {
         int __gen_e_acsl_valid_read;
@@ -866,56 +861,56 @@ char *__gen_e_acsl_strchr(char const *s, int c)
                                                       sizeof(char),
                                                       (void *)__retres,
                                                       (void *)(& __retres));
-        __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_3,"__retres",
+        __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,"__retres",
                                      (void *)__retres);
-        __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_3,
+        __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,
                                        "sizeof(char)",0,sizeof(char));
         __gen_e_acsl_and = __gen_e_acsl_valid_read;
       }
       else __gen_e_acsl_and = 0;
-      __gen_e_acsl_assert_data_3.blocking = 1;
-      __gen_e_acsl_assert_data_3.kind = "RTE";
-      __gen_e_acsl_assert_data_3.pred_txt = "\\valid_read(__retres)";
-      __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
-      __gen_e_acsl_assert_data_3.fct = "strchr";
-      __gen_e_acsl_assert_data_3.line = 177;
-      __gen_e_acsl_assert_data_3.name = "mem_access";
-      __e_acsl_assert(__gen_e_acsl_and,& __gen_e_acsl_assert_data_3);
-      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
-      __e_acsl_assert_register_char(& __gen_e_acsl_assert_data_2,"*\\result",
+      __gen_e_acsl_assert_data_4.blocking = 1;
+      __gen_e_acsl_assert_data_4.kind = "RTE";
+      __gen_e_acsl_assert_data_4.pred_txt = "\\valid_read(__retres)";
+      __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
+      __gen_e_acsl_assert_data_4.fct = "strchr";
+      __gen_e_acsl_assert_data_4.line = 198;
+      __gen_e_acsl_assert_data_4.name = "mem_access";
+      __e_acsl_assert(__gen_e_acsl_and,& __gen_e_acsl_assert_data_4);
+      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
+      __e_acsl_assert_register_char(& __gen_e_acsl_assert_data_3,"*\\result",
                                     0,*__retres);
-      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,"\\old(c)",0,
+      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_3,"\\old(c)",0,
                                    __gen_e_acsl_at_2);
-      __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
+      __e_acsl_assert_data_t __gen_e_acsl_assert_data_5 =
         {.values = (void *)0};
       __gen_e_acsl_base_addr = __e_acsl_base_addr((void *)__retres);
       __gen_e_acsl_base_addr_2 = __e_acsl_base_addr((void *)__gen_e_acsl_at);
-      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,
+      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,
                                    "\\base_addr(\\result)",
                                    __gen_e_acsl_base_addr);
-      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_4,
+      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_5,
                                    "\\base_addr(\\old(s))",
                                    __gen_e_acsl_base_addr_2);
-      __gen_e_acsl_assert_data_4.blocking = 1;
-      __gen_e_acsl_assert_data_4.kind = "Postcondition";
-      __gen_e_acsl_assert_data_4.pred_txt = "\\base_addr(\\result) == \\base_addr(\\old(s))";
-      __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
-      __gen_e_acsl_assert_data_4.fct = "strchr";
-      __gen_e_acsl_assert_data_4.line = 178;
-      __gen_e_acsl_assert_data_4.name = "found/result_same_base";
+      __gen_e_acsl_assert_data_5.blocking = 1;
+      __gen_e_acsl_assert_data_5.kind = "Postcondition";
+      __gen_e_acsl_assert_data_5.pred_txt = "\\base_addr(\\result) == \\base_addr(\\old(s))";
+      __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/string.h";
+      __gen_e_acsl_assert_data_5.fct = "strchr";
+      __gen_e_acsl_assert_data_5.line = 199;
+      __gen_e_acsl_assert_data_5.name = "found/result_same_base";
       __e_acsl_assert(__gen_e_acsl_base_addr == __gen_e_acsl_base_addr_2,
-                      & __gen_e_acsl_assert_data_4);
-      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
-      __gen_e_acsl_assert_data_2.blocking = 1;
-      __gen_e_acsl_assert_data_2.kind = "Postcondition";
-      __gen_e_acsl_assert_data_2.pred_txt = "*\\result == (char)\\old(c)";
-      __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/string.h";
-      __gen_e_acsl_assert_data_2.fct = "strchr";
-      __gen_e_acsl_assert_data_2.line = 177;
-      __gen_e_acsl_assert_data_2.name = "found/result_char";
+                      & __gen_e_acsl_assert_data_5);
+      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
+      __gen_e_acsl_assert_data_3.blocking = 1;
+      __gen_e_acsl_assert_data_3.kind = "Postcondition";
+      __gen_e_acsl_assert_data_3.pred_txt = "*\\result == (char)\\old(c)";
+      __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
+      __gen_e_acsl_assert_data_3.fct = "strchr";
+      __gen_e_acsl_assert_data_3.line = 198;
+      __gen_e_acsl_assert_data_3.name = "found/result_char";
       __e_acsl_assert((int)*__retres == (int)((char)__gen_e_acsl_at_2),
-                      & __gen_e_acsl_assert_data_2);
-      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
+                      & __gen_e_acsl_assert_data_3);
+      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
     }
     __gen_e_acsl_assumes_value = __e_acsl_contract_get_behavior_assumes
     ((__e_acsl_contract_t const *)__gen_e_acsl_contract,1UL);
@@ -929,43 +924,11 @@ char *__gen_e_acsl_strchr(char const *s, int c)
       __gen_e_acsl_assert_data_8.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_8.file = "FRAMAC_SHARE/libc/string.h";
       __gen_e_acsl_assert_data_8.fct = "strchr";
-      __gen_e_acsl_assert_data_8.line = 184;
+      __gen_e_acsl_assert_data_8.line = 205;
       __gen_e_acsl_assert_data_8.name = "not_found/result_null";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_8);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
     }
-    __gen_e_acsl_assumes_value = __e_acsl_contract_get_behavior_assumes
-    ((__e_acsl_contract_t const *)__gen_e_acsl_contract,2UL);
-    if (__gen_e_acsl_assumes_value) {
-      int __gen_e_acsl_or;
-      __e_acsl_assert_data_t __gen_e_acsl_assert_data_9 =
-        {.values = (void *)0};
-      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_9,"\\result",
-                                   (void *)__retres);
-      if (__retres == (char *)0) __gen_e_acsl_or = 1;
-      else {
-        void *__gen_e_acsl_base_addr_3;
-        void *__gen_e_acsl_base_addr_4;
-        __gen_e_acsl_base_addr_3 = __e_acsl_base_addr((void *)__retres);
-        __gen_e_acsl_base_addr_4 = __e_acsl_base_addr((void *)__gen_e_acsl_at);
-        __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_9,
-                                     "\\base_addr(\\result)",
-                                     __gen_e_acsl_base_addr_3);
-        __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_9,
-                                     "\\base_addr(\\old(s))",
-                                     __gen_e_acsl_base_addr_4);
-        __gen_e_acsl_or = __gen_e_acsl_base_addr_3 == __gen_e_acsl_base_addr_4;
-      }
-      __gen_e_acsl_assert_data_9.blocking = 1;
-      __gen_e_acsl_assert_data_9.kind = "Postcondition";
-      __gen_e_acsl_assert_data_9.pred_txt = "\\result == \\null || \\base_addr(\\result) == \\base_addr(\\old(s))";
-      __gen_e_acsl_assert_data_9.file = "FRAMAC_SHARE/libc/string.h";
-      __gen_e_acsl_assert_data_9.fct = "strchr";
-      __gen_e_acsl_assert_data_9.line = 187;
-      __gen_e_acsl_assert_data_9.name = "default/result_null_or_same_base";
-      __e_acsl_assert(__gen_e_acsl_or,& __gen_e_acsl_assert_data_9);
-      __e_acsl_assert_clean(& __gen_e_acsl_assert_data_9);
-    }
     __e_acsl_contract_clean(__gen_e_acsl_contract);
     __e_acsl_delete_block((void *)(& s));
     __e_acsl_delete_block((void *)(& __retres));
@@ -1163,7 +1126,7 @@ void __gen_e_acsl_exit(int status)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "exit";
-    __gen_e_acsl_assert_data.line = 509;
+    __gen_e_acsl_assert_data.line = 541;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
@@ -1185,7 +1148,7 @@ void __gen_e_acsl_abort(void)
     __gen_e_acsl_assert_data.pred_txt = "\\false";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "abort";
-    __gen_e_acsl_assert_data.line = 496;
+    __gen_e_acsl_assert_data.line = 528;
     __gen_e_acsl_assert_data.name = "never_terminates";
     __e_acsl_assert(0,& __gen_e_acsl_assert_data);
     return;
diff --git a/src/plugins/e-acsl/tests/format/oracle/printf.res.oracle b/src/plugins/e-acsl/tests/format/oracle/printf.res.oracle
index 7985a51f133c31c024c129b5931b94976ccb3dcb..f1fb00a4f419b1851860644c64ce7b4d8d08a532 100644
--- a/src/plugins/e-acsl/tests/format/oracle/printf.res.oracle
+++ b/src/plugins/e-acsl/tests/format/oracle/printf.res.oracle
@@ -20,64 +20,64 @@
 [e-acsl] Warning: annotating undefined function `strchr':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:367: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:419: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:368: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:420: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:370: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:422: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:367: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:419: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:373: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:425: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:173: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:193: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:176: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:196: Warning: 
   E-ACSL construct `datacons' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:183: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:204: Warning: 
   E-ACSL construct `datacons' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:173: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:192: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:173: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:192: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:179: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:197: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:180: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:200: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:181: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:202: Warning: 
   E-ACSL construct
   `non integer variable p in quantification
-  found: result_first_occur:
+  found: result_first_occurrence:
     \forall char *p; \old(s) <= p < \result ==> *p != (char)\old(c)'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:141: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:158: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:141: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:158: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:143: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:160: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
@@ -90,17 +90,17 @@
 [e-acsl] FRAMAC_SHARE/libc/sys/wait.h:89: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:506: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:538: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:508: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:540: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:493: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:525: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:495: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:527: Warning: 
   E-ACSL construct `abnormal termination case in behavior'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/libc/oracle/file.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/file.res.oracle
index 8dca9f2bac2c97a2596b057ccf813cdcda652172..37368c20591586b5389598157a929a0270e414d4 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/file.res.oracle
+++ b/src/plugins/e-acsl/tests/libc/oracle/file.res.oracle
@@ -10,7 +10,7 @@
   Ignoring annotation.
 [e-acsl] FRAMAC_SHARE/libc/stdio.h:150: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
diff --git a/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c b/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c
index 9dcfda774c490f2b6e89ec4769a2c9f5fa6b67f1..32abf0b9b66fd9826f2f2341ac33d477707ef7e4 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c
+++ b/src/plugins/e-acsl/tests/libc/oracle/gen_mem.c
@@ -416,7 +416,7 @@ void *__gen_e_acsl_memset(void *s, int c, size_t n)
     __gen_e_acsl_assert_data_3.pred_txt = "\\result == \\old(s)";
     __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_3.fct = "memset";
-    __gen_e_acsl_assert_data_3.line = 135;
+    __gen_e_acsl_assert_data_3.line = 152;
     __gen_e_acsl_assert_data_3.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_3);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
@@ -458,7 +458,7 @@ void *__gen_e_acsl_memmove(void *dest, void const *src, size_t n)
     __gen_e_acsl_assert_data_4.pred_txt = "\\result == \\old(dest)";
     __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_4.fct = "memmove";
-    __gen_e_acsl_assert_data_4.line = 125;
+    __gen_e_acsl_assert_data_4.line = 142;
     __gen_e_acsl_assert_data_4.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -555,7 +555,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __gen_e_acsl_assert_data_4.pred_txt = "\\valid_read((char *)dest + (0 .. n - 1))";
     __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_4.fct = "memcpy";
-    __gen_e_acsl_assert_data_4.line = 98;
+    __gen_e_acsl_assert_data_4.line = 115;
     __gen_e_acsl_assert_data_4.name = "separated_guard";
     __e_acsl_assert(__gen_e_acsl_valid_read,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -586,7 +586,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __gen_e_acsl_assert_data_5.pred_txt = "\\valid_read((char *)src + (0 .. n - 1))";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_5.fct = "memcpy";
-    __gen_e_acsl_assert_data_5.line = 98;
+    __gen_e_acsl_assert_data_5.line = 115;
     __gen_e_acsl_assert_data_5.name = "separated_guard";
     __e_acsl_assert(__gen_e_acsl_valid_read_2,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
@@ -631,7 +631,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __gen_e_acsl_assert_data_3.pred_txt = "\\separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1))";
     __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_3.fct = "memcpy";
-    __gen_e_acsl_assert_data_3.line = 98;
+    __gen_e_acsl_assert_data_3.line = 115;
     __gen_e_acsl_assert_data_3.name = "separation";
     __e_acsl_assert(__gen_e_acsl_separated,& __gen_e_acsl_assert_data_3);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
@@ -656,7 +656,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __gen_e_acsl_assert_data_7.pred_txt = "\\result == \\old(dest)";
     __gen_e_acsl_assert_data_7.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_7.fct = "memcpy";
-    __gen_e_acsl_assert_data_7.line = 102;
+    __gen_e_acsl_assert_data_7.line = 119;
     __gen_e_acsl_assert_data_7.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_7);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
diff --git a/src/plugins/e-acsl/tests/libc/oracle/gen_str.c b/src/plugins/e-acsl/tests/libc/oracle/gen_str.c
index fc05792a9c2ad847b978f1c86f4e42f72ebea15c..3489f579ec4b0249d9064a074072cae93e37035c 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/gen_str.c
+++ b/src/plugins/e-acsl/tests/libc/oracle/gen_str.c
@@ -48,6 +48,11 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
 /*@ requires valid_string_src: valid_read_string(src);
     requires valid_string_dest: valid_string(dest);
     requires room_string: \valid(dest + (0 .. strlen(dest) + strlen(src)));
+    requires
+      separation:
+        \separated(
+          dest + (0 .. strlen(dest) + strlen(src)), src + (0 .. strlen(src))
+          );
     ensures
       sum_of_lengths: strlen(\old(dest)) == \old(strlen(dest) + strlen(src));
     ensures
@@ -69,15 +74,20 @@ char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src);
 
 /*@ requires valid_nstring_src: valid_read_nstring(src, n);
     requires valid_string_dest: valid_string(dest);
+    requires
+      separation:
+        \separated(
+          dest + (0 .. strlen(dest) + strnlen(src, n)),
+          src + (0 .. strnlen(src, n))
+          );
     ensures result_ptr: \result == \old(dest);
     assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), \result;
     assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
-      \from *(src + (0 .. n));
+      \from *(src + (0 .. n - 1));
     assigns \result \from dest;
     
     behavior complete:
-      assumes
-        valid_string_src_fits: valid_read_string(src) && strlen(src) <= n;
+      assumes src_fits: strnlen(src, n) < n;
       requires
         room_string: \valid((dest + strlen(dest)) + (0 .. strlen(src)));
       ensures
@@ -88,13 +98,11 @@ char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src);
               \result;
       assigns
       *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src)))
-        \from *(src + (0 .. strlen{Old}(src)));
+        \from *(src + (0 .. strlen{Old}(src) - 1));
       assigns \result \from dest;
     
     behavior partial:
-      assumes
-        valid_string_src_too_large:
-          !(valid_read_string(src) && strlen(src) <= n);
+      assumes src_too_large: strnlen(src, n) == n;
       requires room_string: \valid((dest + strlen(dest)) + (0 .. n));
       ensures
         sum_of_bounded_lengths:
@@ -102,23 +110,31 @@ char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src);
       assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)),
               \result;
       assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
-        \from *(src + (0 .. strlen{Old}(src)));
+        \from *(src + (0 .. n - 1));
       assigns \result \from dest;
+    
+    complete behaviors partial, complete;
+    disjoint behaviors partial, complete;
  */
 char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
                            size_t n);
 
 /*@ requires valid_nstring_src: valid_read_nstring(src, n);
     requires valid_string_dest: valid_string(dest);
+    requires
+      separation:
+        \separated(
+          dest + (0 .. strlen(dest) + strnlen(src, n)),
+          src + (0 .. strnlen(src, n))
+          );
     ensures result_ptr: \result == \old(dest);
     assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), \result;
     assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
-      \from *(src + (0 .. n));
+      \from *(src + (0 .. n - 1));
     assigns \result \from dest;
     
     behavior complete:
-      assumes
-        valid_string_src_fits: valid_read_string(src) && strlen(src) <= n;
+      assumes src_fits: strnlen(src, n) < n;
       requires
         room_string: \valid((dest + strlen(dest)) + (0 .. strlen(src)));
       ensures
@@ -129,13 +145,11 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
               \result;
       assigns
       *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src)))
-        \from *(src + (0 .. strlen{Old}(src)));
+        \from *(src + (0 .. strlen{Old}(src) - 1));
       assigns \result \from dest;
     
     behavior partial:
-      assumes
-        valid_string_src_too_large:
-          !(valid_read_string(src) && strlen(src) <= n);
+      assumes src_too_large: strnlen(src, n) == n;
       requires room_string: \valid((dest + strlen(dest)) + (0 .. n));
       ensures
         sum_of_bounded_lengths:
@@ -143,8 +157,11 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
       assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)),
               \result;
       assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
-        \from *(src + (0 .. strlen{Old}(src)));
+        \from *(src + (0 .. n - 1));
       assigns \result \from dest;
+    
+    complete behaviors partial, complete;
+    disjoint behaviors partial, complete;
  */
 char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
                            size_t n)
@@ -154,6 +171,7 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
   __e_acsl_contract_t *__gen_e_acsl_contract;
   char *__gen_e_acsl_at;
   char *__retres;
+  __e_acsl_store_block((void *)(& src),8UL);
   __e_acsl_store_block((void *)(& dest),8UL);
   __gen_e_acsl_at = dest;
   __gen_e_acsl_contract = __e_acsl_contract_init(2UL);
@@ -169,8 +187,8 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
     __e_acsl_mpz_t __gen_e_acsl_add_2;
     __e_acsl_mpz_t __gen_e_acsl__2;
     int __gen_e_acsl_le;
-    unsigned long __gen_e_acsl_size;
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data_5 =
+    unsigned long __gen_e_acsl_size_2;
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_8 =
       {.values = (void *)0};
     __gmpz_init_set_ui(__gen_e_acsl_strcat_src_size_2,
                        __gen_e_acsl_strcat_src_size);
@@ -188,23 +206,23 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
     __gmpz_init_set_ui(__gen_e_acsl__2,18446744073709551615UL);
     __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2),
                                  (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_8,
                                    "__gen_e_acsl_strcat_src_size",0,
                                    __gen_e_acsl_strcat_src_size);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_5,
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_8,
                                    "__gen_e_acsl_strcat_dest_size",0,
                                    __gen_e_acsl_strcat_dest_size);
-    __gen_e_acsl_assert_data_5.blocking = 1;
-    __gen_e_acsl_assert_data_5.kind = "RTE";
-    __gen_e_acsl_assert_data_5.pred_txt = "(__gen_e_acsl_strcat_src_size + __gen_e_acsl_strcat_dest_size) + 1 <=\n18446744073709551615";
-    __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/string.h";
-    __gen_e_acsl_assert_data_5.fct = "strncat";
-    __gen_e_acsl_assert_data_5.line = 438;
-    __gen_e_acsl_assert_data_5.name = "size_lesser_or_eq_than_SIZE_MAX";
-    __e_acsl_assert(__gen_e_acsl_le <= 0,& __gen_e_acsl_assert_data_5);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
-    __gen_e_acsl_size = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
-    __e_acsl_initialize((void *)dest,__gen_e_acsl_size);
+    __gen_e_acsl_assert_data_8.blocking = 1;
+    __gen_e_acsl_assert_data_8.kind = "RTE";
+    __gen_e_acsl_assert_data_8.pred_txt = "(__gen_e_acsl_strcat_src_size + __gen_e_acsl_strcat_dest_size) + 1 <=\n18446744073709551615";
+    __gen_e_acsl_assert_data_8.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_8.fct = "strncat";
+    __gen_e_acsl_assert_data_8.line = 496;
+    __gen_e_acsl_assert_data_8.name = "size_lesser_or_eq_than_SIZE_MAX";
+    __e_acsl_assert(__gen_e_acsl_le <= 0,& __gen_e_acsl_assert_data_8);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
+    __gen_e_acsl_size_2 = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
+    __e_acsl_initialize((void *)dest,__gen_e_acsl_size_2);
     __gmpz_clear(__gen_e_acsl_strcat_src_size_2);
     __gmpz_clear(__gen_e_acsl_strcat_dest_size_2);
     __gmpz_clear(__gen_e_acsl_add);
@@ -213,22 +231,23 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
     __gmpz_clear(__gen_e_acsl__2);
   }
   {
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data_6 =
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_9 =
       {.values = (void *)0};
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_6,"\\result",
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_9,"\\result",
                                  (void *)__retres);
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_6,"\\old(dest)",
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_9,"\\old(dest)",
                                  (void *)__gen_e_acsl_at);
-    __gen_e_acsl_assert_data_6.blocking = 1;
-    __gen_e_acsl_assert_data_6.kind = "Postcondition";
-    __gen_e_acsl_assert_data_6.pred_txt = "\\result == \\old(dest)";
-    __gen_e_acsl_assert_data_6.file = "FRAMAC_SHARE/libc/string.h";
-    __gen_e_acsl_assert_data_6.fct = "strncat";
-    __gen_e_acsl_assert_data_6.line = 443;
-    __gen_e_acsl_assert_data_6.name = "result_ptr";
-    __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_6);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
+    __gen_e_acsl_assert_data_9.blocking = 1;
+    __gen_e_acsl_assert_data_9.kind = "Postcondition";
+    __gen_e_acsl_assert_data_9.pred_txt = "\\result == \\old(dest)";
+    __gen_e_acsl_assert_data_9.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_9.fct = "strncat";
+    __gen_e_acsl_assert_data_9.line = 504;
+    __gen_e_acsl_assert_data_9.name = "result_ptr";
+    __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_9);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_9);
     __e_acsl_contract_clean(__gen_e_acsl_contract);
+    __e_acsl_delete_block((void *)(& src));
     __e_acsl_delete_block((void *)(& dest));
     return __retres;
   }
@@ -237,6 +256,11 @@ char *__gen_e_acsl_strncat(char * restrict dest, char const * restrict src,
 /*@ requires valid_string_src: valid_read_string(src);
     requires valid_string_dest: valid_string(dest);
     requires room_string: \valid(dest + (0 .. strlen(dest) + strlen(src)));
+    requires
+      separation:
+        \separated(
+          dest + (0 .. strlen(dest) + strlen(src)), src + (0 .. strlen(src))
+          );
     ensures
       sum_of_lengths: strlen(\old(dest)) == \old(strlen(dest) + strlen(src));
     ensures
@@ -260,6 +284,7 @@ char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src)
   unsigned long __gen_e_acsl_strcat_src_size;
   char *__gen_e_acsl_at;
   char *__retres;
+  __e_acsl_store_block((void *)(& src),8UL);
   __e_acsl_store_block((void *)(& dest),8UL);
   __gen_e_acsl_at = dest;
   __gen_e_acsl_strcat_src_size = __e_acsl_builtin_strlen(src);
@@ -274,7 +299,7 @@ char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src)
     __e_acsl_mpz_t __gen_e_acsl__2;
     int __gen_e_acsl_le;
     unsigned long __gen_e_acsl_size;
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data_4 =
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_7 =
       {.values = (void *)0};
     __gmpz_init_set_ui(__gen_e_acsl_strcat_src_size_2,
                        __gen_e_acsl_strcat_src_size);
@@ -292,21 +317,21 @@ char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src)
     __gmpz_init_set_ui(__gen_e_acsl__2,18446744073709551615UL);
     __gen_e_acsl_le = __gmpz_cmp((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2),
                                  (__e_acsl_mpz_struct const *)(__gen_e_acsl__2));
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_7,
                                    "__gen_e_acsl_strcat_src_size",0,
                                    __gen_e_acsl_strcat_src_size);
-    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_4,
+    __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_7,
                                    "__gen_e_acsl_strcat_dest_size",0,
                                    __gen_e_acsl_strcat_dest_size);
-    __gen_e_acsl_assert_data_4.blocking = 1;
-    __gen_e_acsl_assert_data_4.kind = "RTE";
-    __gen_e_acsl_assert_data_4.pred_txt = "(__gen_e_acsl_strcat_src_size + __gen_e_acsl_strcat_dest_size) + 1 <=\n18446744073709551615";
-    __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
-    __gen_e_acsl_assert_data_4.fct = "strcat";
-    __gen_e_acsl_assert_data_4.line = 423;
-    __gen_e_acsl_assert_data_4.name = "size_lesser_or_eq_than_SIZE_MAX";
-    __e_acsl_assert(__gen_e_acsl_le <= 0,& __gen_e_acsl_assert_data_4);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
+    __gen_e_acsl_assert_data_7.blocking = 1;
+    __gen_e_acsl_assert_data_7.kind = "RTE";
+    __gen_e_acsl_assert_data_7.pred_txt = "(__gen_e_acsl_strcat_src_size + __gen_e_acsl_strcat_dest_size) + 1 <=\n18446744073709551615";
+    __gen_e_acsl_assert_data_7.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_7.fct = "strcat";
+    __gen_e_acsl_assert_data_7.line = 475;
+    __gen_e_acsl_assert_data_7.name = "size_lesser_or_eq_than_SIZE_MAX";
+    __e_acsl_assert(__gen_e_acsl_le <= 0,& __gen_e_acsl_assert_data_7);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
     __gen_e_acsl_size = __gmpz_get_ui((__e_acsl_mpz_struct const *)(__gen_e_acsl_add_2));
     __e_acsl_initialize((void *)dest,__gen_e_acsl_size);
     __gmpz_clear(__gen_e_acsl_strcat_src_size_2);
@@ -317,21 +342,23 @@ char *__gen_e_acsl_strcat(char * restrict dest, char const * restrict src)
     __gmpz_clear(__gen_e_acsl__2);
   }
   {
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data_8 =
+    __e_acsl_assert_data_t __gen_e_acsl_assert_data_11 =
       {.values = (void *)0};
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_8,"\\result",
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_11,"\\result",
                                  (void *)__retres);
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_8,"\\old(dest)",
+    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_11,"\\old(dest)",
                                  (void *)__gen_e_acsl_at);
-    __gen_e_acsl_assert_data_8.blocking = 1;
-    __gen_e_acsl_assert_data_8.kind = "Postcondition";
-    __gen_e_acsl_assert_data_8.pred_txt = "\\result == \\old(dest)";
-    __gen_e_acsl_assert_data_8.file = "FRAMAC_SHARE/libc/string.h";
-    __gen_e_acsl_assert_data_8.fct = "strcat";
-    __gen_e_acsl_assert_data_8.line = 434;
-    __gen_e_acsl_assert_data_8.name = "result_ptr";
-    __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_8);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
+    __gen_e_acsl_assert_data_11.blocking = 1;
+    __gen_e_acsl_assert_data_11.kind = "Postcondition";
+    __gen_e_acsl_assert_data_11.pred_txt = "\\result == \\old(dest)";
+    __gen_e_acsl_assert_data_11.file = "FRAMAC_SHARE/libc/string.h";
+    __gen_e_acsl_assert_data_11.fct = "strcat";
+    __gen_e_acsl_assert_data_11.line = 488;
+    __gen_e_acsl_assert_data_11.name = "result_ptr";
+    __e_acsl_assert(__retres == __gen_e_acsl_at,
+                    & __gen_e_acsl_assert_data_11);
+    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_11);
+    __e_acsl_delete_block((void *)(& src));
     __e_acsl_delete_block((void *)(& dest));
     return __retres;
   }
@@ -439,7 +466,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_2.pred_txt = "\\valid(dest + (0 .. n - 1))";
     __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_2.fct = "strncpy";
-    __gen_e_acsl_assert_data_2.line = 380;
+    __gen_e_acsl_assert_data_2.line = 432;
     __gen_e_acsl_assert_data_2.name = "room_nstring";
     __e_acsl_assert(__gen_e_acsl_valid,& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
@@ -471,7 +498,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_4.pred_txt = "\\valid_read(dest + (0 .. n - 1))";
     __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_4.fct = "strncpy";
-    __gen_e_acsl_assert_data_4.line = 382;
+    __gen_e_acsl_assert_data_4.line = 434;
     __gen_e_acsl_assert_data_4.name = "separated_guard";
     __e_acsl_assert(__gen_e_acsl_valid_read,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -501,7 +528,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_5.pred_txt = "\\valid_read(src + (0 .. n - 1))";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_5.fct = "strncpy";
-    __gen_e_acsl_assert_data_5.line = 382;
+    __gen_e_acsl_assert_data_5.line = 434;
     __gen_e_acsl_assert_data_5.name = "separated_guard";
     __e_acsl_assert(__gen_e_acsl_valid_read_2,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
@@ -547,7 +574,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_3.pred_txt = "\\separated(dest + (0 .. n - 1), src + (0 .. n - 1))";
     __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_3.fct = "strncpy";
-    __gen_e_acsl_assert_data_3.line = 382;
+    __gen_e_acsl_assert_data_3.line = 434;
     __gen_e_acsl_assert_data_3.name = "separation";
     __e_acsl_assert(__gen_e_acsl_separated,& __gen_e_acsl_assert_data_3);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
@@ -582,7 +609,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_6.pred_txt = "\\result == \\old(dest)";
     __gen_e_acsl_assert_data_6.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_6.fct = "strncpy";
-    __gen_e_acsl_assert_data_6.line = 385;
+    __gen_e_acsl_assert_data_6.line = 437;
     __gen_e_acsl_assert_data_6.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_6);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
@@ -629,7 +656,7 @@ char *__gen_e_acsl_strncpy(char * restrict dest, char const * restrict src,
     __gen_e_acsl_assert_data_7.pred_txt = "\\initialized(\\old(dest) + (0 .. \\old(n) - 1))";
     __gen_e_acsl_assert_data_7.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_7.fct = "strncpy";
-    __gen_e_acsl_assert_data_7.line = 386;
+    __gen_e_acsl_assert_data_7.line = 438;
     __gen_e_acsl_assert_data_7.name = "initialization";
     __e_acsl_assert(__gen_e_acsl_initialized,& __gen_e_acsl_assert_data_7);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
@@ -695,7 +722,7 @@ char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src)
     __gen_e_acsl_assert_data_6.pred_txt = "__gen_e_acsl_strcpy_src_size + 1 <= 18446744073709551615";
     __gen_e_acsl_assert_data_6.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_6.fct = "strcpy";
-    __gen_e_acsl_assert_data_6.line = 367;
+    __gen_e_acsl_assert_data_6.line = 419;
     __gen_e_acsl_assert_data_6.name = "size_lesser_or_eq_than_SIZE_MAX";
     __e_acsl_assert(__gen_e_acsl_le <= 0,& __gen_e_acsl_assert_data_6);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
@@ -718,7 +745,7 @@ char *__gen_e_acsl_strcpy(char * restrict dest, char const * restrict src)
     __gen_e_acsl_assert_data_8.pred_txt = "\\result == \\old(dest)";
     __gen_e_acsl_assert_data_8.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_8.fct = "strcpy";
-    __gen_e_acsl_assert_data_8.line = 374;
+    __gen_e_acsl_assert_data_8.line = 426;
     __gen_e_acsl_assert_data_8.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_8);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_8);
diff --git a/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle
index 673b705e2c742c0cc5a1f353cf2b6fb2f9771c51..3391277a9a4a8c700164541d29032b764d6a0904 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle
+++ b/src/plugins/e-acsl/tests/libc/oracle/mem.res.oracle
@@ -1,47 +1,47 @@
 [e-acsl] beginning translation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:131: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:148: Warning: 
   no assigns clause generated for function valid_or_empty because pointers as arguments is not yet supported
 [e-acsl] FRAMAC_SHARE/libc/string.h:49: Warning: 
   E-ACSL construct `predicates with labels' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:131: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:148: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:134: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:151: Warning: 
   E-ACSL construct `datacons' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:120: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:137: Warning: 
   E-ACSL construct `predicates with labels' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:121: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:138: Warning: 
   no assigns clause generated for function valid_read_or_empty because pointers as arguments is not yet supported
 [e-acsl] FRAMAC_SHARE/libc/string.h:52: Warning: 
   E-ACSL construct `predicates with labels' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:120: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:137: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:124: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:141: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:95: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:112: Warning: 
   E-ACSL construct `predicates with labels' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:96: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:113: Warning: 
   E-ACSL construct `predicates with labels' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:95: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:112: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:101: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:118: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] FRAMAC_SHARE/libc/string.h:135: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:152: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:134: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:151: Warning: 
   function __gen_e_acsl_memset: postcondition 'acsl_c_equiv' got status unknown.
 [eva:alarm] mem.c:10: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
@@ -82,27 +82,27 @@
 [eva:alarm] mem.c:19: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:102: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:119: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:101: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:118: Warning: 
   function __gen_e_acsl_memcpy: postcondition 'copied_contents' got status unknown.
 [eva:alarm] mem.c:23: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
@@ -119,10 +119,10 @@
 [eva:alarm] mem.c:25: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:125: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:142: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:124: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:141: Warning: 
   function __gen_e_acsl_memmove: postcondition 'copied_contents' got status unknown.
 [eva:alarm] mem.c:28: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
diff --git a/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle b/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle
index 67886b4500ae16bb187e07dbbe1e3b244bd84636..00c9e9bab1d0642c1b664b698c697135bcdc5456 100644
--- a/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle
+++ b/src/plugins/e-acsl/tests/libc/oracle/str.res.oracle
@@ -1,121 +1,138 @@
 [e-acsl] beginning translation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:439: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:497: Warning: 
   no assigns clause generated for function valid_read_nstring because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:284: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:280: Warning: 
   E-ACSL construct `labeled \valid_read' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:440: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:498: Warning: 
   no assigns clause generated for function valid_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:445: Warning: 
-  no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:500: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:453: Warning: 
-  E-ACSL construct `logic functions or predicates performing read accesses'
+[e-acsl] FRAMAC_SHARE/libc/string.h:500: Warning: 
+  no assigns clause generated for function strnlen because pointers as arguments is not yet supported
+[e-acsl] FRAMAC_SHARE/libc/string.h:500: Warning: 
+  E-ACSL construct
+  `logic functions or predicates with no definition nor reads clause'
+  is not yet supported.
+  Ignoring annotation.
+[e-acsl] FRAMAC_SHARE/libc/string.h:506: Warning: 
+  E-ACSL construct
+  `logic functions or predicates with no definition nor reads clause'
+  is not yet supported.
+  Ignoring annotation.
+[e-acsl] FRAMAC_SHARE/libc/string.h:513: Warning: 
+  E-ACSL construct
+  `logic functions or predicates with no definition nor reads clause'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:446: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:507: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:454: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:514: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:438: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:496: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:438: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:496: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:443: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:504: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:450: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:511: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:450: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:511: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:458: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:518: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:424: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:476: Warning: 
+  no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:425: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:477: Warning: 
+  E-ACSL construct `logic functions or predicates performing read accesses'
+  is not yet supported.
+  Ignoring annotation.
+[e-acsl] FRAMAC_SHARE/libc/string.h:478: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:426: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:480: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:423: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:475: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:429: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:483: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:432: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:486: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:433: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:487: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:379: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:431: Warning: 
   E-ACSL construct `labeled \valid_read' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:388: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:440: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:391: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:443: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:378: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:430: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:378: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:430: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:389: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:441: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:392: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:444: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:367: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:419: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:368: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:420: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:370: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:422: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:367: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:419: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:373: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:425: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
@@ -126,12 +143,12 @@
 [eva:alarm] str.c:13: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:367: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:419: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:374: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:426: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:373: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:425: Warning: 
   function __gen_e_acsl_strcpy: postcondition 'equal_contents' got status unknown.
 [eva:alarm] str.c:16: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
diff --git a/src/plugins/e-acsl/tests/memory/oracle/gen_hidden_malloc.c b/src/plugins/e-acsl/tests/memory/oracle/gen_hidden_malloc.c
index fc9c66c217bb9cac04a30bbc8f7e27e8472ad382..321145a55641a93fc164950245e30f75da6e9e63 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/gen_hidden_malloc.c
+++ b/src/plugins/e-acsl/tests/memory/oracle/gen_hidden_malloc.c
@@ -205,7 +205,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
     __gen_e_acsl_assert_data_2.pred_txt = "resolved_name == \\null || \\valid(resolved_name + (0 .. 4096 - 1))";
     __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data_2.fct = "realpath";
-    __gen_e_acsl_assert_data_2.line = 759;
+    __gen_e_acsl_assert_data_2.line = 842;
     __gen_e_acsl_assert_data_2.name = "resolved_name_null_or_allocated";
     __e_acsl_assert(__gen_e_acsl_or,& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
@@ -231,7 +231,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_4.pred_txt = "__fc_errno == 22";
       __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_4.fct = "realpath";
-      __gen_e_acsl_assert_data_4.line = 770;
+      __gen_e_acsl_assert_data_4.line = 853;
       __gen_e_acsl_assert_data_4.name = "null_file_name/errno_set";
       __e_acsl_assert(errno == 22,& __gen_e_acsl_assert_data_4);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -240,7 +240,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_3.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_3.fct = "realpath";
-      __gen_e_acsl_assert_data_3.line = 769;
+      __gen_e_acsl_assert_data_3.line = 852;
       __gen_e_acsl_assert_data_3.name = "null_file_name/null_result";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_3);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
@@ -261,7 +261,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_7.pred_txt = "__fc_errno == 12";
       __gen_e_acsl_assert_data_7.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_7.fct = "realpath";
-      __gen_e_acsl_assert_data_7.line = 785;
+      __gen_e_acsl_assert_data_7.line = 868;
       __gen_e_acsl_assert_data_7.name = "not_enough_memory/errno_set";
       __e_acsl_assert(errno == 12,& __gen_e_acsl_assert_data_7);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
@@ -270,7 +270,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_6.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_6.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_6.fct = "realpath";
-      __gen_e_acsl_assert_data_6.line = 784;
+      __gen_e_acsl_assert_data_6.line = 867;
       __gen_e_acsl_assert_data_6.name = "not_enough_memory/null_result";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_6);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
@@ -290,7 +290,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_9.pred_txt = "\\result == \\old(resolved_name)";
       __gen_e_acsl_assert_data_9.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_9.fct = "realpath";
-      __gen_e_acsl_assert_data_9.line = 796;
+      __gen_e_acsl_assert_data_9.line = 880;
       __gen_e_acsl_assert_data_9.name = "resolved_name_buffer/resolved_result";
       __e_acsl_assert(__retres == __gen_e_acsl_at,
                       & __gen_e_acsl_assert_data_9);
@@ -308,7 +308,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_10.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_10.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_10.fct = "realpath";
-      __gen_e_acsl_assert_data_10.line = 802;
+      __gen_e_acsl_assert_data_10.line = 886;
       __gen_e_acsl_assert_data_10.name = "filesystem_error/null_result";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_10);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_10);
diff --git a/src/plugins/e-acsl/tests/memory/oracle/gen_memalign.c b/src/plugins/e-acsl/tests/memory/oracle/gen_memalign.c
index 90b363e3678824a5f951d60b97bfc3945c84f774..80d3c12fd943bd91f0ed1e3d89065342d92eda74 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/gen_memalign.c
+++ b/src/plugins/e-acsl/tests/memory/oracle/gen_memalign.c
@@ -420,7 +420,7 @@ int __gen_e_acsl_posix_memalign(void **memptr, size_t alignment, size_t size)
     __gen_e_acsl_assert_data.pred_txt = "\\valid(memptr)";
     __gen_e_acsl_assert_data.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data.fct = "posix_memalign";
-    __gen_e_acsl_assert_data.line = 702;
+    __gen_e_acsl_assert_data.line = 785;
     __gen_e_acsl_assert_data.name = "valid_memptr";
     __e_acsl_assert(__gen_e_acsl_valid,& __gen_e_acsl_assert_data);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data);
@@ -463,7 +463,7 @@ int __gen_e_acsl_posix_memalign(void **memptr, size_t alignment, size_t size)
     __gen_e_acsl_assert_data_2.pred_txt = "alignment >= sizeof(void *) &&\n((size_t)alignment & (size_t)alignment - 1) == 0";
     __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data_2.fct = "posix_memalign";
-    __gen_e_acsl_assert_data_2.line = 704;
+    __gen_e_acsl_assert_data_2.line = 787;
     __gen_e_acsl_assert_data_2.name = "alignment_is_a_suitable_power_of_two";
     __e_acsl_assert(__gen_e_acsl_and,& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
@@ -483,7 +483,7 @@ int __gen_e_acsl_posix_memalign(void **memptr, size_t alignment, size_t size)
       __gen_e_acsl_assert_data_4.pred_txt = "\\result == 0";
       __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_4.fct = "posix_memalign";
-      __gen_e_acsl_assert_data_4.line = 716;
+      __gen_e_acsl_assert_data_4.line = 799;
       __gen_e_acsl_assert_data_4.name = "allocation/result_zero";
       __e_acsl_assert(__retres == 0,& __gen_e_acsl_assert_data_4);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -507,7 +507,7 @@ int __gen_e_acsl_posix_memalign(void **memptr, size_t alignment, size_t size)
       __gen_e_acsl_assert_data_5.pred_txt = "\\result < 0 || \\result > 0";
       __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_5.fct = "posix_memalign";
-      __gen_e_acsl_assert_data_5.line = 721;
+      __gen_e_acsl_assert_data_5.line = 804;
       __gen_e_acsl_assert_data_5.name = "no_allocation/result_non_zero";
       __e_acsl_assert(__gen_e_acsl_or,& __gen_e_acsl_assert_data_5);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
diff --git a/src/plugins/e-acsl/tests/memory/oracle/hidden_malloc.res.oracle b/src/plugins/e-acsl/tests/memory/oracle/hidden_malloc.res.oracle
index 25a8a53eceb1175fbdd93ff8adfd73b6b9b8258b..27d93fcb73cbe470eaea8f27d7fc9a7ae2ea0e30 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/hidden_malloc.res.oracle
+++ b/src/plugins/e-acsl/tests/memory/oracle/hidden_malloc.res.oracle
@@ -2,57 +2,57 @@
 [e-acsl] Warning: annotating undefined function `realpath':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:755: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:838: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:757: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:840: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:772: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:855: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:779: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:862: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:787: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:870: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:799: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:882: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:755: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:838: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:755: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:838: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:770: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:853: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:777: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:860: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:777: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:860: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:785: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:868: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:792: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:876: Warning: 
   no assigns clause generated for function valid_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:796: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:880: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:804: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:888: Warning: 
   E-ACSL construct
   `logic functions or predicates with no definition nor reads clause'
   is not yet supported.
diff --git a/src/plugins/e-acsl/tests/memory/oracle/mainargs.res.oracle b/src/plugins/e-acsl/tests/memory/oracle/mainargs.res.oracle
index 411c0b7ba798d3afe689edf886fe08f7a6ca47b5..23d24e3095e594e93553bae1ed36b05412b9a8eb 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/mainargs.res.oracle
+++ b/src/plugins/e-acsl/tests/memory/oracle/mainargs.res.oracle
@@ -2,16 +2,16 @@
 [e-acsl] Warning: annotating undefined function `strlen':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/string.h:141: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:158: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:141: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:158: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:143: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:160: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
@@ -82,9 +82,9 @@
 [eva:alarm] mainargs.c:16: Warning: assertion got status unknown.
 [eva:alarm] mainargs.c:18: Warning: 
   function __gen_e_acsl_strlen: precondition 'valid_string_s' got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:141: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:158: Warning: 
   function strlen: precondition 'valid_string_s' got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:143: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:160: Warning: 
   function __gen_e_acsl_strlen: postcondition 'acsl_c_equiv' got status unknown.
 [eva:alarm] mainargs.c:19: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
diff --git a/src/plugins/e-acsl/tests/memory/oracle/memalign.res.oracle b/src/plugins/e-acsl/tests/memory/oracle/memalign.res.oracle
index 4dc9a20ea6aabb658451aaacf8020393e60b10cf..f17a43af95db3a68f64d9f12fb3bd622ec9fc8c3 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/memalign.res.oracle
+++ b/src/plugins/e-acsl/tests/memory/oracle/memalign.res.oracle
@@ -2,25 +2,25 @@
 [e-acsl] Warning: annotating undefined function `posix_memalign':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:701: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:784: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:711: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:794: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:718: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:801: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:701: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:784: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:701: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:784: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:715: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:798: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:716: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:799: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
diff --git a/src/plugins/e-acsl/tests/memory/oracle/memsize.res.oracle b/src/plugins/e-acsl/tests/memory/oracle/memsize.res.oracle
index e608985d5a008400c7eaec279bd9bf175a8d87d2..3e4f2b0295e1fc586820cf1a277c1de17c7449a5 100644
--- a/src/plugins/e-acsl/tests/memory/oracle/memsize.res.oracle
+++ b/src/plugins/e-acsl/tests/memory/oracle/memsize.res.oracle
@@ -14,7 +14,7 @@
 [eva] memsize.c:25: Warning: ignoring unsupported allocates clause
 [eva:alarm] memsize.c:26: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva] FRAMAC_SHARE/libc/stdlib.h:453: Warning: 
+[eva] FRAMAC_SHARE/libc/stdlib.h:485: Warning: 
   no 'assigns \result \from ...' clause specified for function realloc
 [eva] memsize.c:29: Warning: ignoring unsupported allocates clause
 [eva:alarm] memsize.c:29: Warning: 
@@ -42,7 +42,7 @@
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
 [eva:alarm] memsize.c:52: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva] FRAMAC_SHARE/libc/stdlib.h:386: Warning: 
+[eva] FRAMAC_SHARE/libc/stdlib.h:418: Warning: 
   no 'assigns \result \from ...' clause specified for function calloc
 [eva] memsize.c:55: Warning: ignoring unsupported allocates clause
 [eva:alarm] memsize.c:56: Warning: 
diff --git a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_fun_lib.c b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_fun_lib.c
index ede92c3c70c3c7822255a83be2ea29009cc1d2cf..78967c20b82a00d7be3de12acfd62c596dc778ab 100644
--- a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_fun_lib.c
+++ b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_fun_lib.c
@@ -207,7 +207,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
     __gen_e_acsl_assert_data_2.pred_txt = "resolved_name == \\null || \\valid(resolved_name + (0 .. 4096 - 1))";
     __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/stdlib.h";
     __gen_e_acsl_assert_data_2.fct = "realpath";
-    __gen_e_acsl_assert_data_2.line = 759;
+    __gen_e_acsl_assert_data_2.line = 842;
     __gen_e_acsl_assert_data_2.name = "resolved_name_null_or_allocated";
     __e_acsl_assert(__gen_e_acsl_or,& __gen_e_acsl_assert_data_2);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
@@ -238,7 +238,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_4.pred_txt = "__fc_errno == 22";
       __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_4.fct = "realpath";
-      __gen_e_acsl_assert_data_4.line = 770;
+      __gen_e_acsl_assert_data_4.line = 853;
       __gen_e_acsl_assert_data_4.name = "null_file_name/errno_set";
       __e_acsl_assert(errno == 22,& __gen_e_acsl_assert_data_4);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -247,7 +247,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_3.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_3.fct = "realpath";
-      __gen_e_acsl_assert_data_3.line = 769;
+      __gen_e_acsl_assert_data_3.line = 852;
       __gen_e_acsl_assert_data_3.name = "null_file_name/null_result";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_3);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
@@ -268,7 +268,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_7.pred_txt = "__fc_errno == 12";
       __gen_e_acsl_assert_data_7.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_7.fct = "realpath";
-      __gen_e_acsl_assert_data_7.line = 785;
+      __gen_e_acsl_assert_data_7.line = 868;
       __gen_e_acsl_assert_data_7.name = "not_enough_memory/errno_set";
       __e_acsl_assert(errno == 12,& __gen_e_acsl_assert_data_7);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
@@ -277,7 +277,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_6.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_6.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_6.fct = "realpath";
-      __gen_e_acsl_assert_data_6.line = 784;
+      __gen_e_acsl_assert_data_6.line = 867;
       __gen_e_acsl_assert_data_6.name = "not_enough_memory/null_result";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_6);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_6);
@@ -297,7 +297,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_9.pred_txt = "\\result == \\old(resolved_name)";
       __gen_e_acsl_assert_data_9.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_9.fct = "realpath";
-      __gen_e_acsl_assert_data_9.line = 796;
+      __gen_e_acsl_assert_data_9.line = 880;
       __gen_e_acsl_assert_data_9.name = "resolved_name_buffer/resolved_result";
       __e_acsl_assert(__retres == __gen_e_acsl_at,
                       & __gen_e_acsl_assert_data_9);
@@ -315,7 +315,7 @@ char *__gen_e_acsl_realpath(char const * restrict file_name,
       __gen_e_acsl_assert_data_10.pred_txt = "\\result == \\null";
       __gen_e_acsl_assert_data_10.file = "FRAMAC_SHARE/libc/stdlib.h";
       __gen_e_acsl_assert_data_10.fct = "realpath";
-      __gen_e_acsl_assert_data_10.line = 802;
+      __gen_e_acsl_assert_data_10.line = 886;
       __gen_e_acsl_assert_data_10.name = "filesystem_error/null_result";
       __e_acsl_assert(__retres == (char *)0,& __gen_e_acsl_assert_data_10);
       __e_acsl_assert_clean(& __gen_e_acsl_assert_data_10);
diff --git a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_getenv.c b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_getenv.c
index a95cdb0ed93f608bc404277e283b3411d1d8b3db..3ef3318f69b410b2529a203a7c5d342520afae3a 100644
--- a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_getenv.c
+++ b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_getenv.c
@@ -12,16 +12,24 @@ char *__gen_e_acsl_literal_string;
 extern  __attribute__((__FC_BUILTIN__)) int __e_acsl_sound_verdict;
 
 /*@ requires valid_name: valid_read_string(name);
-    ensures null_or_valid_result: \result == \null || \valid(\result);
+    ensures
+      null_or_valid_result:
+        \result == \null || (\valid(\result) && valid_read_string(\result));
     assigns \result;
-    assigns \result \from __fc_env[0 ..], (indirect: name), *(name + (0 ..));
+    assigns \result
+      \from __fc_env[0 ..], (indirect: name),
+            (indirect: *(name + (0 .. strlen{Old}(name))));
  */
 char *__gen_e_acsl_getenv(char const *name);
 
 /*@ requires valid_name: valid_read_string(name);
-    ensures null_or_valid_result: \result == \null || \valid(\result);
+    ensures
+      null_or_valid_result:
+        \result == \null || (\valid(\result) && valid_read_string(\result));
     assigns \result;
-    assigns \result \from __fc_env[0 ..], (indirect: name), *(name + (0 ..));
+    assigns \result
+      \from __fc_env[0 ..], (indirect: name),
+            (indirect: *(name + (0 .. strlen{Old}(name))));
  */
 char *__gen_e_acsl_getenv(char const *name)
 {
@@ -31,39 +39,9 @@ char *__gen_e_acsl_getenv(char const *name)
   __e_acsl_temporal_reset_return();
   __retres = getenv(name);
   __e_acsl_temporal_store_nblock((void *)(& __retres),(void *)*(& __retres));
-  {
-    int __gen_e_acsl_or;
-    __e_acsl_temporal_save_return((void *)(& __retres));
-    __e_acsl_assert_data_t __gen_e_acsl_assert_data_2 =
-      {.values = (void *)0};
-    __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,"\\result",
-                                 (void *)__retres);
-    if (__retres == (char *)0) __gen_e_acsl_or = 1;
-    else {
-      int __gen_e_acsl_valid;
-      __gen_e_acsl_valid = __e_acsl_valid((void *)__retres,sizeof(char),
-                                          (void *)__retres,
-                                          (void *)(& __retres));
-      __e_acsl_assert_register_ptr(& __gen_e_acsl_assert_data_2,"\\result",
-                                   (void *)__retres);
-      __e_acsl_assert_register_ulong(& __gen_e_acsl_assert_data_2,
-                                     "sizeof(char)",0,sizeof(char));
-      __e_acsl_assert_register_int(& __gen_e_acsl_assert_data_2,
-                                   "\\valid(\\result)",0,__gen_e_acsl_valid);
-      __gen_e_acsl_or = __gen_e_acsl_valid;
-    }
-    __gen_e_acsl_assert_data_2.blocking = 1;
-    __gen_e_acsl_assert_data_2.kind = "Postcondition";
-    __gen_e_acsl_assert_data_2.pred_txt = "\\result == \\null || \\valid(\\result)";
-    __gen_e_acsl_assert_data_2.file = "FRAMAC_SHARE/libc/stdlib.h";
-    __gen_e_acsl_assert_data_2.fct = "getenv";
-    __gen_e_acsl_assert_data_2.line = 524;
-    __gen_e_acsl_assert_data_2.name = "null_or_valid_result";
-    __e_acsl_assert(__gen_e_acsl_or,& __gen_e_acsl_assert_data_2);
-    __e_acsl_assert_clean(& __gen_e_acsl_assert_data_2);
-    __e_acsl_delete_block((void *)(& __retres));
-    return __retres;
-  }
+  __e_acsl_temporal_save_return((void *)(& __retres));
+  __e_acsl_delete_block((void *)(& __retres));
+  return __retres;
 }
 
 void __e_acsl_globals_init(void)
diff --git a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c
index c4293f684174946dd589aee2f0067051aae0afa6..5284f282963682e4507a2e0de7aa871255547eff 100644
--- a/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c
+++ b/src/plugins/e-acsl/tests/temporal/oracle/gen_t_memcpy.c
@@ -756,7 +756,7 @@ void *__gen_e_acsl_memset(void *s, int c, size_t n)
     __gen_e_acsl_assert_data_3.pred_txt = "\\result == \\old(s)";
     __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_3.fct = "memset";
-    __gen_e_acsl_assert_data_3.line = 135;
+    __gen_e_acsl_assert_data_3.line = 152;
     __gen_e_acsl_assert_data_3.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_3);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
@@ -854,7 +854,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __gen_e_acsl_assert_data_4.pred_txt = "\\valid_read((char *)dest + (0 .. n - 1))";
     __gen_e_acsl_assert_data_4.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_4.fct = "memcpy";
-    __gen_e_acsl_assert_data_4.line = 98;
+    __gen_e_acsl_assert_data_4.line = 115;
     __gen_e_acsl_assert_data_4.name = "separated_guard";
     __e_acsl_assert(__gen_e_acsl_valid_read,& __gen_e_acsl_assert_data_4);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_4);
@@ -885,7 +885,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __gen_e_acsl_assert_data_5.pred_txt = "\\valid_read((char *)src + (0 .. n - 1))";
     __gen_e_acsl_assert_data_5.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_5.fct = "memcpy";
-    __gen_e_acsl_assert_data_5.line = 98;
+    __gen_e_acsl_assert_data_5.line = 115;
     __gen_e_acsl_assert_data_5.name = "separated_guard";
     __e_acsl_assert(__gen_e_acsl_valid_read_2,& __gen_e_acsl_assert_data_5);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_5);
@@ -930,7 +930,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __gen_e_acsl_assert_data_3.pred_txt = "\\separated((char *)dest + (0 .. n - 1), (char *)src + (0 .. n - 1))";
     __gen_e_acsl_assert_data_3.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_3.fct = "memcpy";
-    __gen_e_acsl_assert_data_3.line = 98;
+    __gen_e_acsl_assert_data_3.line = 115;
     __gen_e_acsl_assert_data_3.name = "separation";
     __e_acsl_assert(__gen_e_acsl_separated,& __gen_e_acsl_assert_data_3);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_3);
@@ -960,7 +960,7 @@ void *__gen_e_acsl_memcpy(void * restrict dest, void const * restrict src,
     __gen_e_acsl_assert_data_7.pred_txt = "\\result == \\old(dest)";
     __gen_e_acsl_assert_data_7.file = "FRAMAC_SHARE/libc/string.h";
     __gen_e_acsl_assert_data_7.fct = "memcpy";
-    __gen_e_acsl_assert_data_7.line = 102;
+    __gen_e_acsl_assert_data_7.line = 119;
     __gen_e_acsl_assert_data_7.name = "result_ptr";
     __e_acsl_assert(__retres == __gen_e_acsl_at,& __gen_e_acsl_assert_data_7);
     __e_acsl_assert_clean(& __gen_e_acsl_assert_data_7);
diff --git a/src/plugins/e-acsl/tests/temporal/oracle/t_fun_lib.res.oracle b/src/plugins/e-acsl/tests/temporal/oracle/t_fun_lib.res.oracle
index 014073a4bba894b34d813b8db4b56715fbb9f203..479597f91297167d45c819ba1520d30791d43710 100644
--- a/src/plugins/e-acsl/tests/temporal/oracle/t_fun_lib.res.oracle
+++ b/src/plugins/e-acsl/tests/temporal/oracle/t_fun_lib.res.oracle
@@ -2,57 +2,57 @@
 [e-acsl] Warning: annotating undefined function `realpath':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:755: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:838: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:757: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:840: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:772: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:855: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:779: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:862: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:787: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:870: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:799: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:882: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:755: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:838: Warning: 
   Some assumes clauses could not be translated.
   Ignoring complete and disjoint behaviors annotations.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:755: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:838: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:770: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:853: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:777: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:860: Warning: 
   E-ACSL construct `\fresh' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:777: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:860: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:785: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:868: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:792: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:876: Warning: 
   no assigns clause generated for function valid_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:278: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:274: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:796: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:880: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:804: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:888: Warning: 
   E-ACSL construct
   `logic functions or predicates with no definition nor reads clause'
   is not yet supported.
diff --git a/src/plugins/e-acsl/tests/temporal/oracle/t_getenv.res.oracle b/src/plugins/e-acsl/tests/temporal/oracle/t_getenv.res.oracle
index 512e712c13d305d6a7a8a8d3aa316915f3246491..8587f5a2e6a228103cb6663da293c8b1905a8c06 100644
--- a/src/plugins/e-acsl/tests/temporal/oracle/t_getenv.res.oracle
+++ b/src/plugins/e-acsl/tests/temporal/oracle/t_getenv.res.oracle
@@ -2,28 +2,21 @@
 [e-acsl] Warning: annotating undefined function `getenv':
   the generated program may miss memory instrumentation
   if there are memory-related annotations.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:522: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:554: Warning: 
   no assigns clause generated for function valid_read_string because pointers as arguments is not yet supported
-[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:281: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/__fc_string_axiomatic.h:277: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/stdlib.h:521: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:553: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
+[e-acsl] FRAMAC_SHARE/libc/stdlib.h:558: Warning: 
+  E-ACSL construct `logic functions or predicates performing read accesses'
+  is not yet supported.
+  Ignoring annotation.
 [e-acsl] translation done in project "e-acsl".
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:524: Warning: 
-  function __e_acsl_assert_register_ptr: precondition data->values == \null ||
-                                                      \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:524: Warning: 
-  function __e_acsl_assert_register_ulong: precondition data->values == \null ||
-                                                        \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:524: Warning: 
-  function __e_acsl_assert_register_int: precondition data->values == \null ||
-                                                      \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:524: Warning: 
-  function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:524: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:558: Warning: 
   function __gen_e_acsl_getenv: postcondition 'null_or_valid_result' got status unknown.
 [eva:alarm] t_getenv.c:13: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
diff --git a/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle b/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle
index 9106573e05febb9ac0e542e9402eeab84e00c929..d421a5613b26293031f99c2f68eb452ebc82d9f2 100644
--- a/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle
+++ b/src/plugins/e-acsl/tests/temporal/oracle/t_memcpy.res.oracle
@@ -1,26 +1,26 @@
 [e-acsl] beginning translation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:131: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:148: Warning: 
   no assigns clause generated for function valid_or_empty because pointers as arguments is not yet supported
 [e-acsl] FRAMAC_SHARE/libc/string.h:49: Warning: 
   E-ACSL construct `predicates with labels' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:131: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:148: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:134: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:151: Warning: 
   E-ACSL construct `datacons' is not yet supported. Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:95: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:112: Warning: 
   E-ACSL construct `predicates with labels' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:96: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:113: Warning: 
   no assigns clause generated for function valid_read_or_empty because pointers as arguments is not yet supported
 [e-acsl] FRAMAC_SHARE/libc/string.h:52: Warning: 
   E-ACSL construct `predicates with labels' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:95: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:112: Warning: 
   E-ACSL construct `assigns clause in behavior' is not yet supported.
   Ignoring annotation.
-[e-acsl] FRAMAC_SHARE/libc/string.h:101: Warning: 
+[e-acsl] FRAMAC_SHARE/libc/string.h:118: Warning: 
   E-ACSL construct `logic functions or predicates performing read accesses'
   is not yet supported.
   Ignoring annotation.
@@ -49,27 +49,27 @@
 [eva:alarm] t_memcpy.c:21: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_int: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert, behavior blocking: precondition got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:98: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:102: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:119: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:101: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:118: Warning: 
   function __gen_e_acsl_memcpy: postcondition 'copied_contents' got status unknown.
 [eva:alarm] t_memcpy.c:25: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
@@ -95,10 +95,10 @@
 [eva:alarm] t_memcpy.c:26: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
                                                         \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:135: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:152: Warning: 
   function __e_acsl_assert_register_ptr: precondition data->values == \null ||
                                                       \valid(data->values) got status unknown.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:134: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:151: Warning: 
   function __gen_e_acsl_memset: postcondition 'acsl_c_equiv' got status unknown.
 [eva:alarm] t_memcpy.c:30: Warning: 
   function __e_acsl_assert_register_ulong: precondition data->values == \null ||
diff --git a/src/plugins/e-acsl/tests/wrapper.sh b/src/plugins/e-acsl/tests/wrapper.sh
index 6b8e981b800d22b43deb51aeef4874e0071af1eb..6e6805b564dcf425b0997785b4c765d2aaa2e6c3 100755
--- a/src/plugins/e-acsl/tests/wrapper.sh
+++ b/src/plugins/e-acsl/tests/wrapper.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of the Frama-C's E-ACSL plug-in.                    #
 #                                                                        #
-#  Copyright (C) 2012-2023                                               #
+#  Copyright (C) 2012-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/eva/.gitattributes b/src/plugins/eva/.gitattributes
index deef66cd8639e14890c171d484edc68e3be4a093..5b64acfa4e8ce16c3817273801b4da36ab46d79b 100644
--- a/src/plugins/eva/.gitattributes
+++ b/src/plugins/eva/.gitattributes
@@ -2,6 +2,6 @@
 # HEADER_SPEC: .ignore #
 ########################
 
-/Eva.header header_spec=.ignore
+/gen_api/Eva.header header_spec=.ignore
 /Changelog_non_free header_spec=.ignore
 /legacy/TOREMOVE header_spec=.ignore
diff --git a/src/plugins/eva/Eva.mli b/src/plugins/eva/Eva.mli
index 1a8fe1b2101e763421ef6889a479e982fe6eb818..eb0c7aaecbdee05569a5ae9011f86b9cdc18cdf5 100644
--- a/src/plugins/eva/Eva.mli
+++ b/src/plugins/eva/Eva.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -113,7 +113,6 @@ module Analysis: sig
 end
 
 module Callstack: sig
-
   (** A call is identified by the function called and the call statement *)
   type call = Cil_types.kernel_function * Cil_types.stmt
 
@@ -175,11 +174,9 @@ module Callstack: sig
   (** Gives the list of call from the bottom to the top of the callstack
       (i.e. reverse order of the call stack). *)
   val to_call_list : t -> (Cil_types.kernel_function * Cil_types.kinstr) list
-
 end
 
 module Deps: sig
-
   (** Memory dependencies of an expression. *)
   type t = {
     data: Locations.Zone.t;
@@ -221,7 +218,6 @@ module Deps: sig
 end
 
 module Results: sig
-
   (** Eva's result API is a new interface to access the results of an analysis,
       once it is completed. It may slightly change in the future.
 
@@ -538,11 +534,9 @@ module Results: sig
       Raises [Stdlib.Invalid_argument] if the statement is not a [Call]
       instruction or a [Local_init] with [ConsInit] initializer. *)
   val callee : Cil_types.stmt -> Kernel_function.t list
-
 end
 
 module Parameters: sig
-
   (** Configuration of the analysis. *)
 
   (** Returns the list (name, descr) of currently enabled abstract domains. *)
@@ -559,7 +553,6 @@ module Parameters: sig
 end
 
 module Eva_annotations: sig
-
   (** Register special annotations to locally guide the Eva analysis:
 
       - slevel annotations: "slevel default", "slevel merge" and "slevel i"
@@ -582,6 +575,7 @@ module Eva_annotations: sig
 
   type split_kind = Static | Dynamic
 
+  (** Splits can be performed according to a C expression or an ACSL predicate. *)
   type split_term =
     | Expression of Cil_types.exp
     | Predicate of Cil_types.predicate
@@ -623,7 +617,6 @@ module Eva_annotations: sig
 end
 
 module Eval: sig
-
   (** Can the results of a function call be cached with memexec? *)
   type cacheable =
     | Cacheable      (** Functions whose result can be safely cached. *)
@@ -635,7 +628,6 @@ module Eval: sig
 end
 
 module Assigns: sig
-
   module DepsOrUnassigned : sig
 
     type t =
@@ -688,21 +680,29 @@ module Assigns: sig
 
   val top : t
   val join : t -> t -> t
+end
 
+module Eva_ast: sig
+  (** Eva Syntax Tree. *)
+
+  include module type of Eva_ast_types
+  include module type of Eva_ast_typing
+  include module type of Eva_ast_printer
+  include module type of Eva_ast_datatype
+  include module type of Eva_ast_builder
+  include module type of Eva_ast_utils
+  include module type of Eva_ast_visitor
 end
 
 module Builtins: sig
-
   (** Eva analysis builtins for the cvalue domain, more efficient than their
       equivalent in C. *)
 
-  open Cil_types
-
   exception Invalid_nb_of_args of int
   exception Outside_builtin_possibilities
 
   (* Signature of a builtin: type of the result, and type of the arguments. *)
-  type builtin_type = unit -> typ * typ list
+  type builtin_type = unit -> Eva_ast.typ * Eva_ast.typ list
 
   (** Can the results of a builtin be cached? See {!Eval} for more details.*)
   type cacheable = Eval.cacheable = Cacheable | NoCache | NoCacheCallers
@@ -739,7 +739,7 @@ module Builtins: sig
   (** Type of a cvalue builtin, whose arguments are:
       - the memory state at the beginning of the function call;
       - the list of arguments of the function call. *)
-  type builtin = Cvalue.Model.t -> (exp * Cvalue.V.t) list -> call_result
+  type builtin = Cvalue.Model.t -> (Eva_ast.exp * Cvalue.V.t) list -> call_result
 
   (** [register_builtin name ?replace ?typ cacheable f] registers the function [f]
       as a builtin to be used instead of the C function of name [name].
@@ -756,7 +756,6 @@ module Builtins: sig
 end
 
 module Cvalue_callbacks: sig
-
   (** Register actions to performed during the Eva analysis,
       with access to the states of the cvalue domain.
       This API is for internal use only, and may be modified or removed
@@ -815,11 +814,9 @@ module Cvalue_callbacks: sig
   (** Registers a function to be applied at the end of the analysis of each
       function call. *)
   val register_call_results_hook: call_results_hook -> unit
-
 end
 
 module Logic_inout: sig
-
   (** Functions used by the Inout and From plugins to interpret predicate
       and assigns clauses. This API may change according to these plugins
       development. *)
@@ -873,11 +870,9 @@ module Logic_inout: sig
       - a formal or local of [kf] and the corresponding argument is [true]. *)
   val accept_base:
     formals:bool -> locals:bool -> Kernel_function.t -> Base.t -> bool
-
 end
 
 module Eva_results: sig
-
   (** Internal temporary API: please do not use it, as it should be removed in a
       future version. *)
 
@@ -916,11 +911,9 @@ module Eva_results: sig
   val eval_tlval_as_location :
     ?result:Cil_types.varinfo ->
     Cvalue.Model.t ->  Cil_types.term -> Locations.location
-
 end
 
 module Unit_tests: sig
-
   (** Currently tested by this module:
       - semantics of sign values. *)
 
diff --git a/src/plugins/eva/alarmset.ml b/src/plugins/eva/alarmset.ml
index 426b1850d42a3e8517e1318c23c324c47da1b2d2..b16a212f352b9d1dcc9548d65c898a5251c64e97 100644
--- a/src/plugins/eva/alarmset.ml
+++ b/src/plugins/eva/alarmset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/alarmset.mli b/src/plugins/eva/alarmset.mli
index 850f8e6d7b3d3772b62089c77f996cdd2254472b..ca1897a15955ce99349e261f03088a2e33187c0a 100644
--- a/src/plugins/eva/alarmset.mli
+++ b/src/plugins/eva/alarmset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/api/general_requests.ml b/src/plugins/eva/api/general_requests.ml
index 3666a0c4345da0dbe0554481a50459fd1dd98453..ec649515e95eabd457e0263c5db12ce4f0abc597 100644
--- a/src/plugins/eva/api/general_requests.ml
+++ b/src/plugins/eva/api/general_requests.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/api/general_requests.mli b/src/plugins/eva/api/general_requests.mli
index 7e98550daa190962d7250a23df777bc81c9d9d7a..fb88c4ba5b0e7bf08c73e627345778089998bee0 100644
--- a/src/plugins/eva/api/general_requests.mli
+++ b/src/plugins/eva/api/general_requests.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/api/values_request.ml b/src/plugins/eva/api/values_request.ml
index a6b0d03f404d4a31f66db66b006a737c5ef968c1..401d42f473131eed05eb435afe9900debdafb8e5 100644
--- a/src/plugins/eva/api/values_request.ml
+++ b/src/plugins/eva/api/values_request.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -450,9 +450,9 @@ module Proxy(A : Analysis.S) : EvaProxy = struct
 
   (* --- Evaluates an expression or lvalue into an evaluation [result]. ----- *)
 
-  let lval_to_offsetmap lval state =
+  let lval_to_offsetmap (lval : Eva_ast.lval) state =
     let cvalue_state = get_cvalue_or_top state in
-    match lval with
+    match lval.node with
     | Var vi, NoOffset ->
       let r = extract_single_var vi cvalue_state in
       `Value r, Alarmset.none
@@ -461,8 +461,8 @@ module Proxy(A : Analysis.S) : EvaProxy = struct
       let precise_loc = get_precise_loc loc in
       find_offsetmap cvalue_state precise_loc
 
-  let eval_lval lval state =
-    match Cil.(unrollType (typeOfLval lval)) with
+  let eval_lval (lval : Eva_ast.lval) state =
+    match Cil.unrollType lval.typ with
     | TInt _ | TEnum _ | TPtr _ | TFloat _ ->
       A.copy_lvalue state lval >>=: fun value -> Value value
     | _ ->
@@ -489,8 +489,9 @@ module Proxy(A : Analysis.S) : EvaProxy = struct
   let do_next eval state eval_point callstack =
     match next_steps eval_point with
     | `Condition (stmt, cond) ->
-      let then_state = (A.assume_cond stmt state cond true :> dstate) in
-      let else_state = (A.assume_cond stmt state cond false :> dstate) in
+      let cond' = Eva_ast.translate_exp cond in
+      let then_state = (A.assume_cond stmt state cond' true :> dstate) in
+      let else_state = (A.assume_cond stmt state cond' false :> dstate) in
       Cond (eval then_state, eval else_state)
     | `Effect stmt ->
       let after_state = get_stmt_state ~after:true stmt callstack in
@@ -516,9 +517,11 @@ module Proxy(A : Analysis.S) : EvaProxy = struct
   let evaluate (term, eval_point) callstack =
     match term with
     | Plval lval ->
-      eval_steps (Cil.typeOfLval lval) (eval_lval lval) eval_point callstack
+      let lval' = Eva_ast.translate_lval lval in
+      eval_steps lval'.typ (eval_lval lval') eval_point callstack
     | Pexpr expr ->
-      eval_steps (Cil.typeOf expr) (eval_expr expr) eval_point callstack
+      let expr' = Eva_ast.translate_exp expr in
+      eval_steps expr'.typ (eval_expr expr') eval_point callstack
     | Ppred pred ->
       eval_steps Cil.intType (eval_pred eval_point pred) eval_point callstack
 end
diff --git a/src/plugins/eva/api/values_request.mli b/src/plugins/eva/api/values_request.mli
index 7b6e5bba9a2a91dfb08360935938566e1cf086b9..aa047e1d48574b3bd321f010682175d765aaf244 100644
--- a/src/plugins/eva/api/values_request.mli
+++ b/src/plugins/eva/api/values_request.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/ast/eva_ast.ml b/src/plugins/eva/ast/eva_ast.ml
new file mode 100644
index 0000000000000000000000000000000000000000..a925e447f26a6957b7eedf8527644f347a8c5dd0
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast.ml
@@ -0,0 +1,29 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+include Eva_ast_types
+include Eva_ast_typing
+include Eva_ast_printer
+include Eva_ast_datatype
+include Eva_ast_builder
+include Eva_ast_utils
+include Eva_ast_visitor
diff --git a/src/plugins/eva/ast/eva_ast.mli b/src/plugins/eva/ast/eva_ast.mli
new file mode 100644
index 0000000000000000000000000000000000000000..2227b775371d7b85965972fc0acaaad90c4067f0
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast.mli
@@ -0,0 +1,35 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+[@@@ api_start]
+
+(** Eva Syntax Tree. *)
+
+include module type of Eva_ast_types
+include module type of Eva_ast_typing
+include module type of Eva_ast_printer
+include module type of Eva_ast_datatype
+include module type of Eva_ast_builder
+include module type of Eva_ast_utils
+include module type of Eva_ast_visitor
+
+[@@@ api_end]
diff --git a/src/plugins/eva/ast/eva_ast_builder.ml b/src/plugins/eva/ast/eva_ast_builder.ml
new file mode 100644
index 0000000000000000000000000000000000000000..6653c1fcee256f03a61917c77a6e2c84d8184de4
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_builder.ml
@@ -0,0 +1,268 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+[@@@alert "-eva_ast_builder"]
+
+(* --- Constructors --- *)
+
+let mk_exp ?(origin=Built) node =
+  let typ = Eva_ast_typing.type_of_exp_node node in
+  Eva_ast_types.mk_tag ~node ~typ ~origin
+
+let mk_lval ?(origin=Built) node =
+  let typ = Eva_ast_typing.type_of_lval_node node in
+  Eva_ast_types.mk_tag ~node ~typ ~origin
+
+
+(* --- Translation from Cil --- *)
+
+let translate_unop : Cil_types.unop -> Eva_ast_types.unop = function
+  | Neg -> Neg
+  | BNot -> BNot
+  | LNot -> LNot
+
+let translate_binop : Cil_types.binop -> Eva_ast_types.binop = function
+  | PlusA -> PlusA
+  | PlusPI -> PlusPI
+  | MinusA -> MinusA
+  | MinusPI -> MinusPI
+  | MinusPP -> MinusPP
+  | Mult -> Mult
+  | Div -> Div
+  | Mod -> Mod
+  | Shiftlt -> Shiftlt
+  | Shiftrt -> Shiftrt
+  | Lt -> Lt
+  | Gt -> Gt
+  | Le -> Le
+  | Ge -> Ge
+  | Eq -> Eq
+  | Ne -> Ne
+  | BAnd -> BAnd
+  | BXor -> BXor
+  | BOr -> BOr
+  | LAnd -> LAnd
+  | LOr -> LOr
+
+
+let rec translate_exp (e : Cil_types.exp) =
+  let node = match e.enode with
+    | Const (CStr _ | CWStr _) ->
+      Const (CString (Base.of_string_exp e))
+    | Const cst -> Const (translate_constant cst)
+    | Lval lval -> Lval (translate_lval lval)
+    | UnOp (unop, expr, typ) ->
+      UnOp (translate_unop unop, translate_exp expr, typ)
+    | BinOp (binop, e1, e2, typ) ->
+      BinOp (translate_binop binop, translate_exp e1, translate_exp e2, typ)
+    | CastE (typ, expr) -> CastE (typ, translate_exp expr)
+    | AddrOf lval -> AddrOf (translate_lval lval)
+    | StartOf lval -> StartOf (translate_lval lval)
+    | SizeOf _ | SizeOfE _ | SizeOfStr _ | AlignOf _ | AlignOfE _ ->
+      match (Cil.constFold true e).enode with
+      | Const c -> Const (translate_constant c)
+      | _ -> Const (CTopInt Cil.theMachine.kindOfSizeOf)
+  in
+  mk_exp ~origin:(Exp e) node
+
+and translate_host : Cil_types.lhost -> Eva_ast_types.lhost = function
+  | Var vi -> Var vi
+  | Mem e -> Mem (translate_exp e)
+
+and translate_offset : Cil_types.offset -> Eva_ast_types.offset = function
+  | NoOffset -> NoOffset
+  | Index (expr, offset) ->
+    Index (translate_exp expr, translate_offset offset)
+  | Field (fieldinfo, offset) ->
+    Field (fieldinfo, translate_offset offset)
+
+and translate_lval (host, offset as lval) =
+  let node = translate_host host, translate_offset offset in
+  mk_lval ~origin:(Lval lval) node
+
+and translate_constant : Cil_types.constant -> Eva_ast_types.constant = function
+  | CStr _ | CWStr _ -> assert false (* Handled at higher level by translate_expr *)
+  | CInt64 (cst, ikind, str) -> CInt64 (cst, ikind, str)
+  | CChr chr -> CChr chr
+  | CReal (float, fkind, str) -> CReal (float, fkind, str)
+  | CEnum ei -> CEnum (ei, translate_exp ei.eival)
+
+let rec translate_init : Cil_types.init -> Eva_ast_types.init = function
+  | SingleInit e -> SingleInit (translate_exp e, e.eloc)
+  | CompoundInit (t, l) ->
+    let translate_field_init (o, i) =
+      translate_offset o, translate_init i
+    in
+    CompoundInit (t, List.map translate_field_init l)
+
+
+(* --- Relations --- *)
+
+let invert_relation : binop -> binop = function
+  | Gt -> Le
+  | Lt -> Ge
+  | Le -> Gt
+  | Ge -> Lt
+  | Eq -> Ne
+  | Ne -> Eq
+  | _ -> invalid_arg "invert_relation: must be given a comparison operator"
+
+let conv_relation : binop -> Abstract_interp.Comp.t = function
+  | Eq -> Eq
+  | Ne -> Ne
+  | Le -> Le
+  | Lt -> Lt
+  | Ge -> Ge
+  | Gt -> Gt
+  | _ -> invalid_arg "conv_relation: must be given a comparison operator"
+
+
+(* --- Offsets --- *)
+
+let rec concat_offset (o1 : offset) (o2 : offset) : offset =
+  match o1 with
+  | NoOffset -> o2
+  | Field (fid, o1') -> Field (fid, concat_offset o1' o2)
+  | Index (e, o1') -> Index (e, concat_offset o1' o2)
+
+let add_offset (lval : lval) (offset : offset) : lval =
+  let (lval_host, lval_offset) = lval.node in
+  mk_lval (lval_host, concat_offset lval_offset offset)
+
+
+(* --- Smart constructors --- *)
+
+module Build =
+struct
+  let integer ~ikind i =
+    let i', _truncated = Cil.truncateInteger64 ikind i in
+    mk_exp (Const (CInt64 (i', ikind, None)))
+
+  let int ~ikind i = integer ~ikind (Integer.of_int i)
+
+  let zero = int ~ikind:IInt 0
+  let one = int ~ikind:IInt 1
+  let bool = function false -> zero | true -> one
+
+  let float ~fkind f =
+    let f =
+      if fkind = Cil_types.FFloat
+      then Floating_point.round_to_single_precision_float f
+      else f
+    in
+    mk_exp (Const (CReal (f, fkind, None)))
+
+  let cast typ exp =
+    if Cil.need_cast exp.typ typ
+    then mk_exp (CastE (Cil.type_remove_qualifier_attributes typ, exp))
+    else exp
+
+  let binop op e1 e2 =
+    (* TODO: const folding *)
+    match op with
+    | PlusA | MinusA | Mult | Div ->
+      let t = Cil.arithmeticConversion e1.typ e2.typ in
+      mk_exp (BinOp (op,e1,e2,t))
+
+    | Eq | Ne | Lt | Le | Ge |Gt ->
+      let t =
+        if Cil.isArithmeticType e1.typ && Cil.isArithmeticType e2.typ then
+          Cil.arithmeticConversion e1.typ e2.typ
+        else if Cil.isPointerType e1.typ && Cil.isPointerType e2.typ then
+          if Cil.need_cast ~force:true e1.typ e2.typ then
+            Cil.theMachine.upointType
+          else
+            e1.typ
+        else
+          invalid_arg "unsupported construction"
+      in
+      mk_exp (BinOp (op, cast t e1, cast t e2, Cil.intType))
+
+    | _ -> invalid_arg "unsupported construction"
+
+  let add = binop PlusA
+  let eq = binop Eq
+  let ne = binop Ne
+
+  let index (base : lval) (index : exp) : lval =
+    assert (Cil.isArrayType base.typ);
+    add_offset base (Index (index, NoOffset))
+
+  let field (base : lval) (field : Cil_types.fieldinfo) : lval =
+    let field_belongs_to_typ fi typ =
+      match typ with
+      | Cil_types.TComp (ci,_attr) -> ci == fi.Cil_types.fcomp
+      | _ -> false
+    in
+    assert (field_belongs_to_typ field base.typ);
+    add_offset base (Field (field, NoOffset))
+
+  let mem (exp : exp) : lval =
+    match exp.node with
+    | AddrOf lv -> lv
+    | StartOf lv -> index lv zero (* Must be an array *)
+    | _ -> mk_lval (Mem exp, NoOffset)
+
+  let var vi = mk_lval (Var vi, NoOffset)
+  let var_exp vi = mk_exp (Lval (var vi))
+  let var_addr vi = mk_exp (AddrOf (var vi))
+
+  let lval lv =
+    Eva_ast_types.mk_tag ~node:(Lval lv) ~typ:lv.typ ~origin:lv.origin
+end
+
+
+(* --- Condition normalization --- *)
+
+let zero_typed (typ : Cil_types.typ) =
+  match typ with
+  | TFloat (fk, _) -> mk_exp (Const (CReal (0., fk, None)))
+  | TEnum ({ekind = ik },_)
+  | TInt (ik, _) -> mk_exp (Const (CInt64 (Integer.zero, ik, None)))
+  | TPtr _ ->
+    let ik = Cil.(theMachine.upointKind) in
+    let zero = mk_exp (Const (CInt64 (Integer.zero, ik, None))) in
+    Build.cast typ zero
+  | typ ->
+    Self.fatal ~current:true "non-scalar type %a" Printer.pp_typ typ
+
+(* Transform an expression supposed to be [positive] into an equivalent
+   one in which the root expression is a comparison operator. *)
+let rec normalize_condition exp positive =
+  match exp.node with
+  | UnOp (LNot, e, _) -> normalize_condition e (not positive)
+  | BinOp ((Le|Ne|Eq|Gt|Lt|Ge as binop), e1, e2, typ) ->
+    if positive
+    then exp
+    else mk_exp (BinOp (invert_relation binop, e1, e2, typ))
+  | _ ->
+    let op = if positive then Ne else Eq in
+    let typ = Cil.unrollType exp.typ in
+    mk_exp (BinOp (op, zero_typed typ, exp, Cil.intType))
+
+
+(* --- Hide mk optional paremeters --- *)
+
+let mk_exp = mk_exp ~origin:Built
+let mk_lval = mk_lval ~origin:Built
diff --git a/src/plugins/eva/ast/eva_ast_builder.mli b/src/plugins/eva/ast/eva_ast_builder.mli
new file mode 100644
index 0000000000000000000000000000000000000000..7a7bdcdcdc614698b005d31bd49cca0ec52bc539
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_builder.mli
@@ -0,0 +1,88 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+(* Constructors *)
+
+val mk_exp : exp_node -> exp
+val mk_lval : lval_node -> lval
+
+
+(* Translation from Cil *)
+
+val translate_exp : Cil_types.exp -> exp
+val translate_lval : Cil_types.lval -> lval
+val translate_offset : Cil_types.offset -> offset
+val translate_unop : Cil_types.unop -> unop
+val translate_binop : Cil_types.binop -> binop
+val translate_init : Cil_types.init -> init
+
+
+(* Relations *)
+
+(** Inverse a relation, op must be a comparison operator *)
+val invert_relation : binop -> binop
+
+(** Convert a relation to Abstract_interp.Comp, op must be a comparison
+    operator *)
+val conv_relation : binop -> Abstract_interp.Comp.t
+
+(** [normalize_condition e positive] returns the expression corresponding to
+    [e != 0] when [positive] is true, and [e == 0] otherwise. The
+    resulting expression will always have a comparison operation at its
+    root. *)
+val normalize_condition: exp -> bool -> exp
+
+
+(* Offsets *)
+
+val add_offset: lval -> offset -> lval
+
+
+(* Smart constructors *)
+
+module Build :
+sig
+  val zero: exp
+  val one: exp
+
+  val int: ikind:Cil_types.ikind -> int -> exp
+  val float: fkind:Cil_types.fkind -> float -> exp
+  val integer: ikind:Cil_types.ikind -> Integer.t -> exp
+  val bool: bool -> exp (* convert booleans to an expression 0 or 1 *)
+
+  val cast: typ -> exp -> exp (* (typ)x *)
+  val add: exp -> exp -> exp (* x + y *)
+  val eq: exp -> exp -> exp (* x == y *)
+  val ne: exp -> exp -> exp (* x != y *)
+
+  val index: lval -> exp -> lval (* x[y] *)
+  val field: lval -> Cil_types.fieldinfo -> lval (* x.field *)
+  val mem: exp -> lval (* *x *)
+
+  val var: Cil_types.varinfo -> lval
+  val var_exp: Cil_types.varinfo -> exp
+  val var_addr: Cil_types.varinfo -> exp (* &vi *)
+
+  val lval: lval -> exp
+end
diff --git a/src/plugins/eva/ast/eva_ast_datatype.ml b/src/plugins/eva/ast/eva_ast_datatype.ml
new file mode 100644
index 0000000000000000000000000000000000000000..b80fa956f0343d61fafd8d2f0d6fa70f36e9dc68
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_datatype.ml
@@ -0,0 +1,124 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+module Typ = Cil_datatype.Typ
+module Varinfo = Cil_datatype.Varinfo
+
+
+(** Hashing functions  *)
+
+let rec hash_lval lv =
+  let (h, o) = lv.node in
+  Hashtbl.hash (hash_lhost h, hash_offset o)
+
+and hash_lhost = function
+  | Var v -> Hashtbl.hash (1, Varinfo.hash v)
+  | Mem e -> Hashtbl.hash (2, hash_exp e)
+
+and hash_offset = function
+  | NoOffset -> Hashtbl.hash 1
+  | Index (e, o) -> Hashtbl.hash (2, hash_exp e, hash_offset o)
+  | Field (f, o) -> Hashtbl.hash (3, f.forder, hash_offset o)
+
+and hash_exp e =
+  match e.node with
+  | Const c -> Hashtbl.hash (1, hash_constant c)
+  | Lval lv -> Hashtbl.hash (2, hash_lval lv)
+  | UnOp (op, e, typ) -> Hashtbl.hash (3, op, hash_exp e, Typ.hash typ)
+  | BinOp (op, e1, e2, typ) ->
+    Hashtbl.hash (4, op, hash_exp e1, hash_exp e2, Typ.hash typ)
+  | CastE (typ, e) -> Hashtbl.hash (5, Typ.hash typ, hash_exp e)
+  | AddrOf lv -> Hashtbl.hash (6, hash_lval lv)
+  | StartOf lv -> Hashtbl.hash (7, hash_lval lv)
+
+and hash_constant c =
+  match c with
+  | CTopInt ikind -> Hashtbl.hash (1, ikind)
+  | CString base -> Hashtbl.hash (2, Base.hash base)
+  | CChr c -> Hashtbl.hash (3, c)
+  | CReal (fn, fk, _) -> Hashtbl.hash (4, fn, fk)
+  | CInt64 (n, k, _) -> Hashtbl.hash (5, n, k)
+  | CEnum (ei, _) -> Hashtbl.hash (6, ei.einame)
+
+
+(* Exported modules *)
+
+module Lval =
+  Datatype.Make_with_collections (struct
+    include Datatype.Serializable_undefined
+    type t = lval
+    let name = "Eva_ast_datatype.Lval"
+    let compare = compare_lval
+    let equal = equal_lval
+    let hash = hash_lval
+    let reprs = List.map Eva_ast_builder.translate_lval Cil_datatype.Lval.reprs
+    let pretty = Eva_ast_printer.pp_lval
+  end)
+
+module Lhost =
+  Datatype.Make_with_collections (struct
+    include Datatype.Serializable_undefined
+    type t = lhost
+    let name = "Eva_ast_datatype.Lhost"
+    let compare = compare_lhost
+    let equal = equal_lhost
+    let hash = hash_lhost
+    let reprs = List.map (fun v -> Var v) Cil_datatype.Varinfo.reprs
+    let pretty fmt h =
+      let lv = Eva_ast_builder.mk_lval (h, NoOffset) in
+      Eva_ast_printer.pp_lval fmt lv
+  end)
+
+module Offset = Datatype.Make_with_collections (struct
+    include Datatype.Serializable_undefined
+    type t = offset
+    let name = "Eva_ast_datatype.Offset"
+    let compare = compare_offset
+    let equal = equal_offset
+    let hash = hash_offset
+    let reprs = [NoOffset]
+    let pretty = Eva_ast_printer.pp_offset
+  end)
+
+module Exp = Datatype.Make_with_collections (struct
+    include Datatype.Serializable_undefined
+    type t = exp
+    let name = "Eva_ast_datatype.Exp"
+    let compare = compare_exp
+    let equal = equal_exp
+    let hash = hash_exp
+    let reprs = List.map Eva_ast_builder.translate_exp Cil_datatype.Exp.reprs
+    let pretty = Eva_ast_printer.pp_exp
+  end)
+
+module Constant = Datatype.Make_with_collections (struct
+    include Datatype.Serializable_undefined
+    type t = constant
+    let name = "Eva_ast_datatype.Constant"
+    let compare = compare_constant
+    let equal = equal_constant
+    let hash = hash_constant
+    let reprs = [ CInt64 (Integer.zero, IInt, None) ]
+    let pretty = Eva_ast_printer.pp_constant
+  end)
diff --git a/src/plugins/eva/ast/eva_ast_datatype.mli b/src/plugins/eva/ast/eva_ast_datatype.mli
new file mode 100644
index 0000000000000000000000000000000000000000..1498aa3043b26807a42b62ad1d44b5ca5c010c60
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_datatype.mli
@@ -0,0 +1,29 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+module Lhost : Datatype.S_with_collections with type t = lhost
+module Offset : Datatype.S_with_collections with type t = offset
+module Lval : Datatype.S_with_collections with type t = lval
+module Exp : Datatype.S_with_collections with type t = exp
+module Constant : Datatype.S_with_collections with type t = constant
diff --git a/src/plugins/eva/ast/eva_ast_printer.ml b/src/plugins/eva/ast/eva_ast_printer.ml
new file mode 100644
index 0000000000000000000000000000000000000000..b1c719b30147c10ecd91137cc5eb731c791cb355
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_printer.ml
@@ -0,0 +1,144 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+module Precedence =
+struct
+  let lval_level lv = match lv.node with
+    | Mem _, _
+    | Var _, (Field _|Index _) -> 20
+    | Var _, NoOffset -> 0
+
+  let binop_level = function
+    | LAnd -> 83
+    | LOr -> 85
+    | BOr | BXor | BAnd -> 75
+    | Eq | Ne | Gt | Lt | Ge | Le -> 70
+    | MinusA | MinusPP | MinusPI | PlusA | PlusPI | Shiftlt | Shiftrt -> 60
+    | Div | Mod | Mult-> 40
+
+  let exp_level e = match e.node with
+    | BinOp (op, _, _, _) -> binop_level op
+    | CastE _ | AddrOf _ | StartOf _ | UnOp _ -> 30
+    | Lval lval -> lval_level lval
+    | Const _ -> 0
+end
+
+let rec pp_lval fmt lval =
+  let pp_exp' = pp_exp' ~precedence:(Precedence.lval_level lval) in
+  match lval.node with
+  | Var vi, o ->
+    Format.fprintf fmt "%s%a" vi.vname pp_offset o
+  | Mem e, Field(fi, o) ->
+    Format.fprintf fmt "%a->%s%a" pp_exp' e fi.fname pp_offset o
+  | Mem e, NoOffset ->
+    Format.fprintf fmt "*%a" pp_exp' e
+  | Mem e, o ->
+    Format.fprintf fmt "(*%a)%a" pp_exp' e pp_offset o
+
+and pp_lval' ~precedence fmt lval =
+  if Precedence.lval_level lval >= precedence then
+    Format.fprintf fmt "(%a)" pp_lval lval
+  else
+    pp_lval fmt lval
+
+and pp_offset fmt = function
+  | NoOffset -> ()
+  | Field (fi, o) ->
+    Format.fprintf fmt ".%s%a" fi.Cil_types.fname pp_offset o
+  | Index (e, o) ->
+    Format.fprintf fmt "[%a]%a" pp_exp e pp_offset o
+
+and pp_exp fmt exp =
+  let precedence = Precedence.exp_level exp in
+  let pp_exp' = pp_exp' ~precedence in
+  match exp.node with
+  | Const c ->
+    pp_constant fmt c
+  | Lval lv ->
+    pp_lval fmt lv
+  | UnOp (op, e1, _) ->
+    Format.fprintf fmt "%a %a" pp_unop op pp_exp' e1
+  | BinOp (op, e1, e2, _) ->
+    Format.fprintf fmt "@[%a %a %a@]" pp_exp' e1 pp_binop op pp_exp' e2
+  | CastE (t, e) ->
+    Format.fprintf fmt "(%a)%a" Printer.pp_typ t pp_exp' e
+  | AddrOf lv ->
+    Format.fprintf fmt "& %a" (pp_lval' ~precedence) lv
+  | StartOf lv ->
+    Format.fprintf fmt "%a" (pp_lval' ~precedence) lv
+
+and pp_exp' ~precedence fmt exp =
+  if Precedence.exp_level exp >= precedence then
+    Format.fprintf fmt "(%a)" pp_exp exp
+  else
+    pp_exp fmt exp
+
+and pp_unop fmt u =
+  let s = match u with
+    | Neg -> "-"
+    | BNot -> "~"
+    | LNot -> "!"
+  in
+  Format.fprintf fmt "%s" s
+
+and pp_binop fmt b =
+  let s = match b with
+    | PlusA | PlusPI -> "+"
+    | MinusA | MinusPP | MinusPI -> "-"
+    | Mult -> "*"
+    | Div -> "/"
+    | Mod -> "%"
+    | Shiftlt -> "<<"
+    | Shiftrt -> ">>"
+    | Lt -> "<"
+    | Gt -> ">"
+    | Le -> "<="
+    | Ge -> ">="
+    | Eq -> "=="
+    | Ne -> "!="
+    | BAnd -> "&"
+    | BXor -> "^"
+    | BOr -> "|"
+    | LAnd -> "&&"
+    | LOr -> "||"
+  in
+  Format.fprintf fmt "%s" s
+
+and pp_constant fmt = function
+  | CTopInt _ ->
+    Format.fprintf fmt "%s" (Unicode.top_string ())
+  | CInt64 (_, _, Some s) ->
+    Format.fprintf fmt "%s" s
+  | CInt64 (i, _, None) ->
+    Integer.pretty fmt i
+  | CString base ->
+    Base.pretty fmt base
+  | CChr c ->
+    Format.fprintf fmt "'%s'" (Escape.escape_char c)
+  | CReal (_, _, Some s) ->
+    Format.fprintf fmt "%s" s
+  | CReal (f, _, None) ->
+    Floating_point.pretty fmt f
+  | CEnum ({ einame }, _) ->
+    Format.fprintf fmt "%s" einame
diff --git a/src/plugins/eva/ast/eva_ast_printer.mli b/src/plugins/eva/ast/eva_ast_printer.mli
new file mode 100644
index 0000000000000000000000000000000000000000..6ef98481e4b6e17fcf5ecf83ffc2618fdae99bfd
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_printer.mli
@@ -0,0 +1,30 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+val pp_lval : Format.formatter -> lval -> unit
+val pp_offset : Format.formatter -> offset -> unit
+val pp_exp : Format.formatter -> exp -> unit
+val pp_constant : Format.formatter -> constant -> unit
+val pp_unop : Format.formatter -> unop -> unit
+val pp_binop : Format.formatter -> binop -> unit
diff --git a/src/plugins/eva/ast/eva_ast_types.ml b/src/plugins/eva/ast/eva_ast_types.ml
new file mode 100644
index 0000000000000000000000000000000000000000..1b1a85b5dbd55b0c45133a49600948df4ee9e84a
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_types.ml
@@ -0,0 +1,130 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_datatype
+
+(** Eva AST. *)
+
+(* The equality and comparison functions generated in this file compare all
+   arguments of a type, including the textual representation of floating-point
+   constants — meaning that two constants representing the same value are not
+   equal if their textual representations differ.
+   This is required when option -eva-all-rounding-modes-constants is enabled,
+   as the evaluation of floating-point constants may depend on their textual
+   representation: when the constant is not exactly representable in the
+   floating-point type, an interval is used instead of the nearest singleton
+   value. *)
+
+type origin =
+  | Lval of Cil_types.lval
+  | Exp of Cil_types.exp
+  | Term of Cil_types.identified_term
+  | Built (* Not present in the original source code *)
+
+type 'a tag = {
+  node: 'a;
+  typ: Cil_types.typ;
+  origin: origin;
+}
+
+let mk_tag ~node ~typ ~origin = { node ; origin ; typ }
+
+let equal_tag equal_node t1 t2 = equal_node t1.node t2.node
+let compare_tag compare_node t1 t2 = compare_node t1.node t2.node
+
+type typ = Typ.t [@@deriving eq,ord]
+type varinfo = Varinfo.t [@@deriving eq,ord]
+
+type exp = exp_node tag
+
+and exp_node =
+  | Const      of constant
+  | Lval       of lval
+  | UnOp       of unop * exp * typ
+  | BinOp      of binop * exp * exp * typ
+  | CastE      of typ * exp
+  | AddrOf     of lval
+  | StartOf    of lval
+
+(** Constants *)
+and constant =
+  | CTopInt of ikind (* an unknown integer; currently introduced when
+                        sizeof/alignof cannot be evaluated as a constant *)
+  | CInt64 of Integer.t * ikind * string option
+  | CString of Base.t (* the base must be [Base.String _] *)
+  | CChr of char
+  | CReal of float * fkind * string option
+  | CEnum of Enumitem.t * exp (* the translated expression that this enumitem refers to *)
+
+and lval = lval_node tag
+
+and lval_node = lhost * offset
+
+and lhost =
+  | Var of varinfo
+  | Mem of exp
+
+and offset =
+  | NoOffset
+  | Field of Fieldinfo.t * offset
+  | Index of exp * offset
+
+and ikind = Cil_types.ikind [@equal (=)] [@compare Stdlib.compare]
+and fkind = Cil_types.fkind [@equal (=)] [@compare Stdlib.compare]
+[@@deriving eq,ord]
+
+
+and unop = Neg | BNot | LNot
+
+and binop =
+  | PlusA
+  | PlusPI
+  | MinusA
+  | MinusPI
+  | MinusPP
+  | Mult
+  | Div
+  | Mod
+  | Shiftlt
+  | Shiftrt
+  | Lt
+  | Gt
+  | Le
+  | Ge
+  | Eq
+  | Ne
+  | BAnd
+  | BXor
+  | BOr
+  | LAnd
+  | LOr
+
+type init =
+  | SingleInit of (exp * Cil_types.location)
+  | CompoundInit of typ * (offset * init) list
+
+
+(* Optimization of comparaison functions on lvalues and expressions. *)
+let compare_exp e1 e2 = if e1 == e2 then 0 else compare_exp e1 e2
+let compare_lval lv1 lv2 = if lv1 == lv2 then 0 else compare_lval lv1 lv2
+let equal_exp e1 e2 = e1 == e2 || equal_exp e1 e2
+let equal_lval lv1 lv2 = lv1 == lv2 || equal_lval lv1 lv2
diff --git a/src/plugins/eva/ast/eva_ast_types.mli b/src/plugins/eva/ast/eva_ast_types.mli
new file mode 100644
index 0000000000000000000000000000000000000000..bac1bc9a6892eec6e46adb32c27a55560ac6ece2
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_types.mli
@@ -0,0 +1,127 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(** Types definition of the Eva AST for lvalues and expressions.
+    Should also include ACSL terms and predicates in the future.
+    Most types are similar to {!Cil_types}. *)
+
+type origin =
+  | Lval of Cil_types.lval
+  | Exp of Cil_types.exp
+  | Term of Cil_types.identified_term
+  | Built (* Not present in the original source code *)
+
+type 'a tag = private {
+  node: 'a;
+  typ: Cil_types.typ;
+  origin: origin;
+}
+
+type typ = Cil_types.typ
+type varinfo = Cil_types.varinfo
+
+type exp = exp_node tag
+
+and exp_node =
+  | Const      of constant
+  | Lval       of lval
+  | UnOp       of unop * exp * typ
+  | BinOp      of binop * exp * exp * typ
+  | CastE      of typ * exp
+  | AddrOf     of lval
+  | StartOf    of lval
+
+(** Constants *)
+and constant =
+  | CTopInt of ikind (* an unknown integer; currently introduced when
+                        sizeof/alignof cannot be evaluated as a constant *)
+  | CInt64 of Integer.t * ikind * string option
+  | CString of Base.t (* the base must be [Base.String _] *)
+  | CChr of char
+  | CReal of float * fkind * string option
+  | CEnum of Cil_types.enumitem * exp (* the translated expression that this enumitem refers to *)
+
+and lval = lval_node tag
+
+and lval_node = lhost * offset
+
+and lhost =
+  | Var of varinfo
+  | Mem of exp
+
+and offset =
+  | NoOffset
+  | Field of Cil_types.fieldinfo * offset
+  | Index of exp * offset
+
+and ikind = Cil_types.ikind
+and fkind = Cil_types.fkind
+
+and unop = Neg | BNot | LNot
+
+and binop =
+  | PlusA
+  | PlusPI
+  | MinusA
+  | MinusPI
+  | MinusPP
+  | Mult
+  | Div
+  | Mod
+  | Shiftlt
+  | Shiftrt
+  | Lt
+  | Gt
+  | Le
+  | Ge
+  | Eq
+  | Ne
+  | BAnd
+  | BXor
+  | BOr
+  | LAnd
+  | LOr
+
+type init =
+  | SingleInit of (exp * Cil_types.location)
+  | CompoundInit of typ * (offset * init) list
+
+
+(** Structural comparaison and equality functions, generated by ppx deriving.
+    Equivalent to the functions provided by {!Cil_datatype.ConstantStrict}
+    and {!Cil_datatype.ExpStructEqStrict}. *)
+
+val compare_constant: constant -> constant -> int
+val equal_constant: constant -> constant -> bool
+val compare_exp: exp -> exp -> int
+val equal_exp: exp -> exp -> bool
+val compare_lval: lval -> lval -> int
+val equal_lval: lval -> lval -> bool
+val compare_lhost: lhost -> lhost -> int
+val equal_lhost: lhost -> lhost -> bool
+val compare_offset: offset -> offset -> int
+val equal_offset: offset -> offset -> bool
+
+(** Tag builder for {!Eva_ast_builder} only. *)
+val mk_tag: node: 'a -> typ: Cil_types.typ -> origin: origin -> 'a tag
+[@@alert eva_ast_builder
+    "For internal use only; use mk_exp and mk_lval builders instead."]
diff --git a/src/plugins/eva/ast/eva_ast_typing.ml b/src/plugins/eva/ast/eva_ast_typing.ml
new file mode 100644
index 0000000000000000000000000000000000000000..365636554cf73e45f9ad1b9ca0f9cd4351865c7f
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_typing.ml
@@ -0,0 +1,68 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+let type_of_const : constant -> typ = function
+  | CTopInt ik -> Cil_types.TInt (ik, [])
+  | CInt64 (_, ik, _) -> Cil_types.TInt (ik, [])
+  | CChr _ -> Cil.intType
+  | CString (String (_, Base.CSString _)) -> Cil.theMachine.stringLiteralType
+  | CString (String (_, Base.CSWstring _)) -> TPtr (Cil.theMachine.wcharType, [])
+  | CString (_) -> assert false (* it must be a String base*)
+  | CReal (_, fk, _) -> TFloat (fk, [])
+  | CEnum (_ei, e) -> e.typ
+
+let rec type_of_offset (basetyp : typ) : offset -> typ = function
+  | NoOffset -> basetyp
+  | Index (_, o) ->
+    type_of_offset (Cil.typeOf_array_elem basetyp) o
+  | Field (fi, o) ->
+    let base_attrs = Cil.typeAttr (Cil.unrollType basetyp) in
+    let base_attrs = Cil.filter_qualifier_attributes base_attrs in
+    let base_attrs =
+      if Cil.hasAttribute Cil.frama_c_mutable fi.fattr then
+        Cil.dropAttribute "const" base_attrs
+      else
+        base_attrs
+    in
+    type_of_offset (Cil.typeAddAttributes base_attrs fi.ftype) o
+
+let type_of_lhost : lhost -> typ = function
+  | Var vi -> vi.vtype
+  | Mem addr -> Cil.typeOf_pointed addr.typ
+
+let type_of_lval_node (host, offset : lval_node) : typ =
+  let basetyp = type_of_lhost host in
+  type_of_offset basetyp offset
+
+let type_of_exp_node : exp_node -> typ = function
+  | Const c -> type_of_const c
+  | Lval lv -> Cil.type_remove_qualifier_attributes lv.typ
+  | UnOp (_, _, t) -> t
+  | BinOp (_, _, _, t) -> t
+  | CastE (t, _) -> t
+  | AddrOf lv -> TPtr (lv.typ, [])
+  | StartOf lv ->
+    match Cil.unrollType lv.typ with
+    | TArray (t, _, attrs) -> TPtr (t, attrs)
+    | _ ->  assert false
diff --git a/src/plugins/eva/ast/eva_ast_typing.mli b/src/plugins/eva/ast/eva_ast_typing.mli
new file mode 100644
index 0000000000000000000000000000000000000000..edc814e822081e75feaa8c9300d44df2f42c385f
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_typing.mli
@@ -0,0 +1,27 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+val type_of_exp_node : exp_node -> typ
+val type_of_lval_node : lval_node -> typ
+val type_of_lhost : lhost -> typ
diff --git a/src/plugins/eva/ast/eva_ast_utils.ml b/src/plugins/eva/ast/eva_ast_utils.ml
new file mode 100644
index 0000000000000000000000000000000000000000..a2fc04ecc4db9a596f4f0674a6ff1adeeea1f3b2
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_utils.ml
@@ -0,0 +1,470 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+open Eva_ast_builder
+
+
+(* --- Conversion to Cil --- *)
+
+(* Memoization to avoid creating too many expressions. *)
+module ConversionToCil =
+  State_builder.Hashtbl
+    (Eva_ast_datatype.Exp.Hashtbl)
+    (Cil_datatype.Exp)
+    (struct
+      let name = "Eva.Eva_ast_utils.ConversionToCil"
+      let size = 16
+      let dependencies = [ Ast.self ]
+    end)
+
+let rec to_cil_exp exp =
+  match exp.origin with
+  | Exp e -> e
+  | _ -> ConversionToCil.memo build_cil_exp exp
+
+and build_cil_exp exp =
+  let exp_node : Cil_types.exp_node =
+    match exp.node with
+    | Const c -> Const (to_cil_const c)
+    | Lval lv -> Lval (to_cil_lval lv)
+    | UnOp (op, e, t) -> UnOp (to_cil_unop op, to_cil_exp e, t)
+    | BinOp (op, e1, e2, t) ->
+      BinOp (to_cil_binop op, to_cil_exp e1, to_cil_exp e2, t)
+    | CastE (t, e) -> CastE (t, to_cil_exp e)
+    | AddrOf lv -> AddrOf (to_cil_lval lv)
+    | StartOf lv -> StartOf (to_cil_lval lv)
+  in
+  Cil.new_exp ~loc:Cil_datatype.Location.unknown exp_node
+
+and to_cil_unop : Eva_ast_types.unop -> Cil_types.unop = function
+  | Neg -> Neg
+  | BNot -> BNot
+  | LNot -> LNot
+
+and to_cil_binop : Eva_ast_types.binop -> Cil_types.binop = function
+  | PlusA -> PlusA
+  | PlusPI -> PlusPI
+  | MinusA -> MinusA
+  | MinusPI -> MinusPI
+  | MinusPP -> MinusPP
+  | Mult -> Mult
+  | Div -> Div
+  | Mod -> Mod
+  | Shiftlt -> Shiftlt
+  | Shiftrt -> Shiftrt
+  | Lt -> Lt
+  | Gt -> Gt
+  | Le -> Le
+  | Ge -> Ge
+  | Eq -> Eq
+  | Ne -> Ne
+  | BAnd -> BAnd
+  | BXor -> BXor
+  | BOr -> BOr
+  | LAnd -> LAnd
+  | LOr -> LOr
+
+and to_cil_lval lval =
+  match lval.origin with
+  | Lval lv -> lv
+  | _ ->
+    let (lhost, offset) = lval.node in
+    to_cil_lhost lhost, to_cil_offset offset
+
+and to_cil_lhost : Eva_ast_types.lhost -> Cil_types.lhost = function
+  | Var vi -> Var vi
+  | Mem e -> Mem (to_cil_exp e)
+
+and to_cil_offset : Eva_ast_types.offset -> Cil_types.offset = function
+  | NoOffset -> NoOffset
+  | Field (fi, off) -> Field (fi, to_cil_offset off)
+  | Index (e, off) -> Index (to_cil_exp e, to_cil_offset off)
+
+and to_cil_const : Eva_ast_types.constant -> Cil_types.constant = function
+  | CInt64 (i, ik, s) -> CInt64 (i, ik, s)
+  | CChr c -> CChr c
+  | CReal (f, fk, s) -> CReal (f, fk, s)
+  | CEnum (ei, _) -> CEnum ei
+  | CTopInt _ | CString _ as constant ->
+    Self.fatal "The Eva constant %a cannot be converted to cil"
+      Eva_ast_printer.pp_constant constant
+
+
+(* --- Queries --- *)
+
+let is_mutable (lval : lval) : bool =
+  let (lhost, offset) = lval.node in
+  let rec aux base_mutable typ off =
+    let base_mutable = base_mutable && not (Cil.isConstType typ) in
+    match Cil.unrollType typ, off with
+    | _, NoOffset -> base_mutable
+    | _, Field (fi, off) ->
+      let base_mutable = base_mutable || Cil.(hasAttribute frama_c_mutable fi.fattr) in
+      aux base_mutable fi.ftype off
+    | TArray(typ, _, _), Index(_, off) -> aux base_mutable typ off
+    | typ, Index _ ->
+      Self.fatal "Index on non-array type %a" Printer.pp_typ typ
+  in
+  aux false (Eva_ast_typing.type_of_lhost lhost) offset
+
+let rec is_initialized_exp (on_same_obj : bool) (exp : exp) =
+  match exp.node with
+  | Lval lv | AddrOf lv | StartOf lv ->
+    let (lh, _) = lv.node in
+    is_initialized_lhost on_same_obj lh
+  | BinOp ((PlusPI|MinusPI), e, _, _) | CastE (_, e) ->
+    is_initialized_exp on_same_obj e
+  | _ -> false
+
+and is_initialized_lhost (on_same_obj : bool) (lhost : lhost) =
+  match lhost with
+  | Var vi -> Cil.(hasAttribute frama_c_init_obj vi.vattr)
+  | Mem e -> on_same_obj && is_initialized_exp false e
+
+let is_initialized lval =
+  let (lhost, _) = lval.node in
+  is_initialized_lhost true lhost
+
+
+(* --- Heights --- *)
+
+let rec height_exp exp =
+  match exp.node with
+  | Const _ -> 0
+  | Lval lv | AddrOf lv | StartOf lv  -> height_lval lv + 1
+  | UnOp (_,e,_) | CastE (_, e) -> height_exp e + 1
+  | BinOp (_,e1,e2,_) -> max (height_exp e1) (height_exp e2) + 1
+
+and height_lval lv =
+  let host, offset = lv.node in
+  let h1 = match host with
+    | Var _ -> 0
+    | Mem e -> height_exp e + 1
+  in
+  max h1 (height_offset offset) + 1
+
+and height_offset = function
+  | NoOffset  -> 0
+  | Field (_,r) -> height_offset r + 1
+  | Index (e,r) -> max (height_exp e) (height_offset r) + 1
+
+
+(* --- Specialized visitors --- *)
+
+let exp_contains_volatile, lval_contains_volatile =
+  let open Eva_ast_visitor.Fold in
+  let neutral = false and combine b1 b2 = b1 || b2 in
+  let fold_lval ~visitor lval =
+    Cil.isVolatileType lval.typ || default.fold_lval ~visitor lval
+  in
+  let folder = { default with fold_lval } in
+  visit_exp ~neutral ~combine folder, visit_lval ~neutral ~combine folder
+
+let vars_in_exp, vars_in_lval =
+  let module VarSet = Cil_datatype.Varinfo.Set in
+  let open Eva_ast_visitor.Fold in
+  let neutral = VarSet.empty and combine = VarSet.union in
+  let fold_lval ~visitor lval =
+    let vars = default.fold_lval ~visitor lval in
+    match fst lval.node with
+    | Var vi -> VarSet.add vi vars
+    | Mem _ -> vars
+  in
+  let folder = { default with fold_lval } in
+  visit_exp ~neutral ~combine folder, visit_lval ~neutral ~combine folder
+
+
+(* Dependencies *)
+
+let rec deps_of_exp find_loc exp =
+  let rec process exp = match exp.node with
+    | Lval lval ->
+      deps_of_lval find_loc lval
+    | UnOp (_, e, _) | CastE (_, e) ->
+      process e
+    | BinOp (_, e1, e2, _) ->
+      Deps.join (process e1) (process e2)
+    | StartOf lv | AddrOf lv ->
+      Deps.data (indirect_zone_of_lval find_loc lv)
+    | Const _ ->
+      Deps.bottom
+  in
+  process exp
+
+and zone_of_exp find_loc exp = Deps.to_zone (deps_of_exp find_loc exp)
+
+and deps_of_lval find_loc lval =
+  let ploc = find_loc lval in
+  (* dereference of an lvalue: first, its address must be computed,
+     then its contents themselves are read *)
+  let indirect = indirect_zone_of_lval find_loc lval in
+  let data = Precise_locs.enumerate_valid_bits Read ploc in
+  { Deps.data ; indirect }
+
+and zone_of_lval find_loc lval = Deps.to_zone (deps_of_lval find_loc lval)
+
+(* Computations of the inputs of a lvalue : union of the "host" part and
+   the offset. *)
+and indirect_zone_of_lval find_loc lval =
+  let lhost, offset = lval.node in
+  let lhost_zone = zone_of_lhost find_loc lhost
+  and offset_zone = zone_of_offset find_loc offset in
+  Locations.Zone.join lhost_zone offset_zone
+
+(* Computation of the inputs of a host. Nothing for a variable, and the
+   inputs of [e] for a dereference [*e]. *)
+and zone_of_lhost find_loc = function
+  | Var _ -> Locations.Zone.bottom
+  | Mem e -> zone_of_exp find_loc e
+
+
+(* Computation of the inputs of an offset. *)
+and zone_of_offset find_loc = function
+  | NoOffset -> Locations.Zone.bottom
+  | Field (_, o) -> zone_of_offset find_loc o
+  | Index (e, o) ->
+    Locations.Zone.join
+      (zone_of_exp find_loc e) (zone_of_offset find_loc o)
+
+let rec to_integer e =
+  match e.node with
+  | Const (CInt64 (n,_,_)) -> Some n
+  | Const (CChr c) -> Some (Cil.charConstToInt c)
+  | Const (CEnum ({eival = v}, _)) -> Cil.isInteger v
+  | CastE (typ, e) when Cil.isPointerType typ ->
+    begin match to_integer e with
+      | Some i as r when Cil.fitsInInt Cil.theMachine.upointKind i -> r
+      | _ -> None
+    end
+  | _ -> None
+
+let to_float e =
+  match e.node with
+  | Const (CReal (f,_,_)) -> Some f
+  | _ -> None
+
+let is_zero exp =
+  match to_integer exp with
+  | None -> false
+  | Some i -> Integer.is_zero i
+
+let is_zero_ptr exp =
+  is_zero exp && Cil.isPointerType exp.typ
+
+
+(* Constant folding *)
+
+(* These functions are largely based on Cil.constFold. See there for details. *)
+let rec const_fold (exp: exp) : exp =
+  match exp.node with
+  | Const (CChr c) -> Build.integer ~ikind:IInt (Cil.charConstToInt c)
+  | Const (CEnum(_ei, e)) -> const_fold e
+  | Const (CTopInt _ | CReal _ | CString _ | CInt64 _) -> exp
+  | Lval lv -> mk_exp (Lval (const_fold_lval lv))
+  | AddrOf lv -> mk_exp (AddrOf (const_fold_lval lv))
+  | StartOf lv -> mk_exp (StartOf (const_fold_lval lv))
+  | CastE (t, e) -> const_fold_cast t e
+  | UnOp (op, e, t) -> const_fold_unop op e t
+  | BinOp (op, e1, e2, t) -> const_fold_binop op e1 e2 t
+
+and const_fold_cast (t : typ) (e : exp) : exp  =
+  let e' = const_fold e in
+  let default () = mk_exp (CastE (t, e')) in
+  match e'.node, Cil.unrollType t with
+  (* integer -> integer *)
+  | Const (CInt64 (i,_k,_)), (TInt (ikind, a) | TEnum ({ekind = ikind}, a))
+    when !Cil_datatype.drop_fc_internal_attributes a = [] ->
+    Build.integer ~ikind i
+  (* real -> integer *)
+  | Const (CReal (f,_,_)), (TInt(ikind, a) | TEnum ({ekind = ikind}, a))
+    when a = [] ->
+    begin try
+        let i = Floating_point.truncate_to_integer f in
+        if Cil.fitsInInt ikind i
+        then Build.integer ~ikind i
+        else default ()
+      with Floating_point.Float_Non_representable_as_Int64 _ ->
+        default ()
+    end
+  (* real -> float *)
+  | Const (CReal (f,_,_)), TFloat (fkind, a) when a = [] ->
+    Build.float ~fkind f
+  (* int -> float *)
+  | Const (CInt64(i,_,_)), (TFloat (fkind, a)) when a = [] ->
+    let f = Integer.to_float i in
+    Build.float ~fkind f
+  | _, _ -> default ()
+
+and const_fold_unop (op : unop) (e : exp) (t : typ) : exp =
+  let e' = const_fold e in
+  let default () = mk_exp (UnOp (op, e', t)) in
+  match e'.node, Cil.unrollType t with
+  (* Integer operations *)
+  | Const (CInt64 (i,_ik,_repr)), (TInt (ikind, _) | TEnum ({ekind=ikind},_)) ->
+    begin match op with
+      | Neg -> Build.integer ~ikind (Integer.neg i)
+      | BNot -> Build.integer ~ikind (Integer.lognot i)
+      | LNot -> if Integer.(equal i zero) then Build.one else Build.zero
+    end
+  (* Float operations*)
+  | Const (CReal(f,_,_)), TFloat (fk,_) ->
+    begin match op with
+      | Neg ->
+        let f = match fk with
+          | FFloat -> Floating_point.round_to_single_precision_float f
+          | FDouble | FLongDouble -> f
+        in
+        mk_exp (Const (CReal(-.f,fk,None)))
+      | _ -> default ()
+    end
+  (* No possible folding *)
+  | _ -> default ()
+
+and const_fold_binop (op : binop) (e1 : exp) (e2 : exp) (t : typ) : exp =
+  (* TODO: float comparisons *)
+  let e1' = const_fold e1 in
+  let e2' = const_fold e2 in
+  let default () = mk_exp (BinOp (op, e1', e2', t)) in
+  (* Can a shift operation be safely computed ? *)
+  let shift_in_bounds i2 =
+    try
+      let size = Integer.of_int (Cil.bitsSizeOf e1'.typ) in
+      Integer.(ge i2 zero && lt i2 size)
+    with Cil.SizeOfError _ -> false
+  in
+  match Cil.unrollType t with
+  (* Integer operations *)
+  | TInt (ikind, _) | TEnum ({ekind=ikind},_) ->
+    begin match op, to_integer e1', to_integer e2' with
+      | PlusA, Some z, _ when Integer.is_zero z -> e2'
+      | (PlusA | MinusA), _, Some z when Integer.is_zero z -> e1'
+      | PlusPI, _, Some z when Integer.is_zero z -> e1'
+      | MinusPI, _, Some z when Integer.is_zero z -> e1'
+      | PlusA, Some i1, Some i2 ->
+        Build.integer ~ikind (Integer.add i1 i2)
+      | MinusA, Some i1, Some i2 ->
+        Build.integer ~ikind (Integer.sub i1 i2)
+      | Mult, Some i1, Some i2 ->
+        Build.integer ~ikind (Integer.mul i1 i2)
+      | Mult, Some z, _ when Integer.is_zero z -> e1'
+      | Mult, Some i1, _ when Integer.is_one i1 -> e2'
+      | Mult, _, Some z when Integer.is_zero z -> e2'
+      | Mult, _, Some i2 when Integer.is_one i2 -> e1'
+      | Div, Some i1, Some i2  ->
+        begin
+          try Build.integer ~ikind (Integer.c_div i1 i2)
+          with Division_by_zero -> default ()
+        end
+      | Div, _, Some i2 when Integer.is_one i2 -> e1'
+      | Mod, Some i1, Some i2 ->
+        begin
+          try Build.integer ~ikind (Integer.c_rem i1 i2)
+          with Division_by_zero -> default ()
+        end
+      | BAnd, Some i1, Some i2 ->
+        Build.integer ~ikind (Integer.logand i1 i2)
+      | BAnd, Some z, _ when Integer.is_zero z -> e1'
+      | BAnd, _, Some z when Integer.is_zero z -> e2'
+      | BOr, Some i1, Some i2 ->
+        Build.integer ~ikind (Integer.logor i1 i2)
+      | BOr, Some z, _ when Integer.is_zero z -> e2'
+      | BOr, _, Some z when Integer.is_zero z -> e1'
+      | BXor, Some i1, Some i2 ->
+        Build.integer ~ikind (Integer.logxor i1 i2)
+      | Shiftlt, Some i1, Some i2 when shift_in_bounds i2 ->
+        Build.integer ~ikind (Integer.shift_left i1 i2)
+      | Shiftlt, Some z, _ when Integer.is_zero z -> e1'
+      | Shiftlt, _, Some z when Integer.is_zero z -> e1'
+      | Shiftrt, Some i1, Some i2 when shift_in_bounds i2 ->
+        if Cil.isSigned ikind then
+          Build.integer ~ikind (Integer.shift_right i1 i2)
+        else
+          Build.integer ~ikind (Integer.shift_right_logical i1 i2)
+      | Shiftrt, Some z, _ when Integer.is_zero z -> e1'
+      | Shiftrt, _, Some z when Integer.is_zero z -> e1'
+      | Eq, Some i1, Some i2 ->
+        Build.bool (Integer.equal i1 i2)
+      | Ne, Some i1, Some i2 ->
+        Build.bool (not (Integer.equal i1 i2))
+      | Le, Some i1, Some i2 ->
+        Build.bool (Integer.le i1 i2)
+      | Ge, Some i1, Some i2 ->
+        Build.bool (Integer.ge i1 i2)
+      | Lt, Some i1, Some i2 ->
+        Build.bool (Integer.lt i1 i2)
+      | Gt, Some i1, Some i2 ->
+        Build.bool (Integer.gt i1 i2)
+      | LAnd, Some i1, _ ->
+        if Integer.is_zero i1 then Build.zero else e2'
+      | LAnd, _, Some i2 ->
+        if Integer.is_zero i2 then Build.zero else e1'
+      | LOr, Some i1, _ ->
+        if Integer.is_zero i1 then e2' else Build.one
+      | LOr, _, Some i2 ->
+        if Integer.is_zero i2 then e1' else Build.one
+      | _ -> default ()
+    end
+  (* Floating-point operation *)
+  | TFloat (fkind, _) ->
+    begin match op, to_float e1', to_float e2' with
+      | PlusA, Some f1, Some f2 ->
+        Build.float ~fkind (f1 +. f2)
+      | MinusA, Some f1, Some f2 ->
+        Build.float ~fkind (f1 -. f2)
+      | Mult, Some f1, Some f2 ->
+        Build.float ~fkind (f1 *. f2)
+      | Div, Some f1, Some f2 ->
+        Build.float ~fkind (f1 /. f2)
+      | _ -> default ()
+    end
+  | _ -> default ()
+
+and const_fold_lval (lval : lval) : lval =
+  let lhost, offset = lval.node in
+  mk_lval (const_fold_lhost lhost, const_fold_offset offset)
+
+and const_fold_lhost : lhost -> lhost = function
+  | Mem e -> Mem (const_fold e)
+  | Var _ as host -> host
+
+and const_fold_offset : offset -> offset = function
+  | NoOffset -> NoOffset
+  | Field (fi, o) -> Field (fi, const_fold_offset o)
+  | Index (e, o) -> Index (const_fold e, const_fold_offset o)
+
+let fold_to_integer exp =
+  to_integer (const_fold exp)
+
+
+(* --- Offsets --- *)
+
+let rec last_offset offset : offset =
+  match offset with
+  | NoOffset | Field(_,NoOffset) | Index(_,NoOffset) -> offset
+  | Field(_,off) | Index(_,off) -> last_offset off
+
+let is_bitfield lval =
+  let (_, offset) = lval.node in
+  match last_offset offset with
+  | Field({fbitfield=Some _}, _) -> true
+  | _ -> false
diff --git a/src/plugins/eva/ast/eva_ast_utils.mli b/src/plugins/eva/ast/eva_ast_utils.mli
new file mode 100644
index 0000000000000000000000000000000000000000..fa873df9126400e15cee749c0c5686a91c7206a0
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_utils.mli
@@ -0,0 +1,106 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(** Utilitary functions on the Eva AST of lvalues and expressions. *)
+
+open Eva_ast_types
+
+(** Conversion to Cil *)
+
+val to_cil_exp : exp -> Cil_types.exp
+val to_cil_lval : lval -> Cil_types.lval
+
+
+(** Queries *)
+
+(** Cf {!Cil.is_mutable_or_initialized}. *)
+val is_mutable : lval -> bool
+val is_initialized : lval -> bool
+
+
+(** Expressions/Lvalue heights *)
+
+(** Computes the height of an expression, that is the maximum number of nested
+    operations in this expression. *)
+val height_exp : exp -> int
+
+(** Computes the height of an lvalue. *)
+val height_lval : lval -> int
+
+
+(** Specialized visitors *)
+
+(** [exp_contains_volatile e] (resp. [lval_contains_volatile lv] is true
+    whenever one l-value contained inside the expression [e] (resp. the lvalue
+    [lv]) has volatile qualifier. Relational analyses should not learn
+    anything on such values. *)
+val exp_contains_volatile : exp -> bool
+val lval_contains_volatile : lval -> bool
+
+(** Returns the set of variables that syntactically appear in an expression or
+    lvalue. *)
+val vars_in_exp : exp -> Cil_datatype.Varinfo.Set.t
+val vars_in_lval : lval -> Cil_datatype.Varinfo.Set.t
+
+
+(** Dependences of expressions and lvalues. *)
+
+val zone_of_exp:
+  (lval -> Precise_locs.precise_location) -> exp -> Locations.Zone.t
+(** Given a function computing the location of lvalues, computes the memory zone
+    on which the value of an expression depends. *)
+
+val zone_of_lval:
+  (lval -> Precise_locs.precise_location) -> lval -> Locations.Zone.t
+(** Given a function computing the location of lvalues, computes the memory zone
+    on which the value of an lvalue depends. *)
+
+val indirect_zone_of_lval:
+  (lval -> Precise_locs.precise_location) -> lval -> Locations.Zone.t
+(** Given a function computing the location of lvalues, computes the memory zone
+    on which the offset and the pointer expression (if any) of an lvalue depend.
+*)
+
+val deps_of_exp:
+  (lval -> Precise_locs.precise_location) -> exp -> Deps.t
+(** Given a function computing the location of lvalues, computes the memory
+    dependencies of an expression. *)
+
+val deps_of_lval: (lval -> Precise_locs.precise_location) -> lval -> Deps.t
+(** Given a function computing the location of lvalues, computes the memory
+    dependencies of an lvalue. *)
+
+
+(** Constant conversion and folding. *)
+
+val const_fold: exp -> exp
+val fold_to_integer: exp -> Integer.t option
+
+val is_zero_ptr : exp -> bool
+
+(** Offsets *)
+
+(** Returns the last offset in the chain. *)
+val last_offset: offset -> offset
+
+(** Is an lvalue a bitfield? *)
+val is_bitfield: lval -> bool
diff --git a/src/plugins/eva/ast/eva_ast_visitor.ml b/src/plugins/eva/ast/eva_ast_visitor.ml
new file mode 100644
index 0000000000000000000000000000000000000000..b73b3eafedda9da37a63c39c971b7b0053054ed3
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_visitor.ml
@@ -0,0 +1,185 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+module Rewrite =
+struct
+  type visitor = {
+    exp : exp -> exp;
+    lval : lval -> lval;
+    varinfo : varinfo -> varinfo;
+    offset : offset -> offset;
+  }
+
+  type rewriter = {
+    rewrite_exp : visitor:visitor -> exp -> exp;
+    rewrite_lval : visitor:visitor -> lval -> lval;
+    rewrite_varinfo : visitor:visitor -> varinfo -> varinfo;
+    rewrite_offset : visitor:visitor -> offset -> offset;
+  }
+
+  let bind (r : rewriter) =
+    let rec visitor = {
+      exp = (fun e -> r.rewrite_exp ~visitor e);
+      lval = (fun lv -> r.rewrite_lval ~visitor lv);
+      varinfo = (fun vi -> r.rewrite_varinfo ~visitor vi);
+      offset = (fun o -> r.rewrite_offset ~visitor o);
+    }
+    in
+    visitor
+
+  let rewrite_exp ~visitor exp =
+    let replace_if condition node =
+      if condition then Eva_ast_builder.mk_exp node else exp
+    in
+    match exp.node with
+    | Lval lv ->
+      let lv' = visitor.lval lv in
+      replace_if (lv != lv') (Lval lv')
+    | AddrOf lv ->
+      let lv' = visitor.lval lv in
+      replace_if (lv != lv') (AddrOf lv')
+    | StartOf lv ->
+      let lv' = visitor.lval lv in
+      replace_if (lv != lv') (StartOf lv')
+    | UnOp (op, e, t) ->
+      let e' = visitor.exp e in
+      replace_if (e' != e) (UnOp (op, e', t))
+    | BinOp (op, e1, e2, t) ->
+      let e1' = visitor.exp e1
+      and e2' = visitor.exp e2 in
+      replace_if (e1' != e1 || e2' != e2) (BinOp (op, e1', e2', t))
+    | CastE (t, e) ->
+      let e' = visitor.exp e in
+      replace_if (e' != e) (CastE (t, e'))
+    | Const _ ->
+      exp
+
+  let rewrite_lval ~visitor lval =
+    let lhost, offset = lval.node in
+    let lhost' =
+      match lhost with
+      | Var vi ->
+        let vi' = visitor.varinfo vi in
+        if vi' != vi then Var vi' else lhost
+      | Mem e ->
+        let e' = visitor.exp e in
+        if e' != e then Mem e' else lhost
+    and offset' = visitor.offset offset in
+    if lhost' != lhost || offset' != offset
+    then Eva_ast_builder.mk_lval (lhost', offset')
+    else lval
+
+  let rewrite_offset ~visitor offset =
+    match offset with
+    | NoOffset -> offset
+    | Field (fi, o) ->
+      let o' = visitor.offset o in
+      if o' != o then Field (fi, o') else offset
+    | Index (e, o) ->
+      let e' = visitor.exp e
+      and o' = visitor.offset o in
+      if e != e' || o' != o then Index (e', o') else offset
+
+  let default = {
+    rewrite_exp;
+    rewrite_lval;
+    rewrite_varinfo = (fun ~visitor:_ vi -> vi);
+    rewrite_offset;
+  }
+
+  let visit_exp rewriter = let visitor = bind rewriter in visitor.exp
+  let visit_lval rewriter = let visitor = bind rewriter in visitor.lval
+end
+
+
+module Fold =
+struct
+  type 'a visitor = {
+    neutral : 'a;
+    combine : 'a -> 'a -> 'a;
+    exp : exp -> 'a;
+    lval : lval -> 'a;
+    varinfo : varinfo -> 'a;
+    offset : offset -> 'a;
+  }
+
+  type 'a folder = {
+    fold_exp : visitor:'a visitor -> exp -> 'a;
+    fold_lval : visitor:'a visitor -> lval -> 'a;
+    fold_varinfo : visitor:'a visitor -> varinfo -> 'a;
+    fold_offset : visitor:'a visitor -> offset -> 'a;
+  }
+
+  let bind ~(neutral : 'a) ~(combine : 'a -> 'a -> 'a) (r : 'a folder) =
+    let rec visitor = {
+      neutral; combine;
+      exp = (fun e -> r.fold_exp ~visitor e);
+      lval = (fun lv -> r.fold_lval ~visitor lv);
+      varinfo = (fun vi -> r.fold_varinfo ~visitor vi);
+      offset = (fun o -> r.fold_offset ~visitor o);
+    }
+    in
+    visitor
+
+  let fold_exp ~visitor exp =
+    match exp.node with
+    | Lval lv | AddrOf lv | StartOf lv ->
+      visitor.lval lv
+    | UnOp (_, e, _) | CastE (_, e) ->
+      visitor.exp e
+    | BinOp (_op, e1, e2, _t) ->
+      visitor.combine (visitor.exp e1) (visitor.exp e2)
+    | Const _ ->
+      visitor.neutral
+
+  let fold_lval ~visitor lval =
+    let lhost, offset = lval.node in
+    let x =
+      match lhost with
+      | Var vi -> visitor.varinfo vi
+      | Mem e -> visitor.exp e
+    and y = visitor.offset offset in
+    visitor.combine x y
+
+  let fold_offset ~visitor offset =
+    match offset with
+    | NoOffset -> visitor.neutral
+    | Field (_, o) -> visitor.offset o
+    | Index (e, o) ->
+      let x = visitor.exp e
+      and y = visitor.offset o in
+      visitor.combine x y
+
+  let default = {
+    fold_exp;
+    fold_lval;
+    fold_varinfo = (fun ~visitor _vi -> visitor.neutral);
+    fold_offset;
+  }
+
+  let visit_exp ~neutral ~combine rewriter =
+    let visitor = bind ~neutral ~combine rewriter in visitor.exp
+  let visit_lval ~neutral ~combine rewriter =
+    let visitor = bind ~neutral ~combine rewriter in visitor.lval
+end
diff --git a/src/plugins/eva/ast/eva_ast_visitor.mli b/src/plugins/eva/ast/eva_ast_visitor.mli
new file mode 100644
index 0000000000000000000000000000000000000000..8c7e96b9d2a86fd4452a674e4e2e65ebae528867
--- /dev/null
+++ b/src/plugins/eva/ast/eva_ast_visitor.mli
@@ -0,0 +1,74 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Eva_ast_types
+
+(** Rewriting visitor *)
+
+module Rewrite :
+sig
+  type visitor = {
+    exp : exp -> exp;
+    lval : lval -> lval;
+    varinfo : varinfo -> varinfo;
+    offset : offset -> offset;
+  }
+
+  type rewriter = {
+    rewrite_exp : visitor:visitor -> exp -> exp;
+    rewrite_lval : visitor:visitor -> lval -> lval;
+    rewrite_varinfo : visitor:visitor -> varinfo -> varinfo;
+    rewrite_offset : visitor:visitor -> offset -> offset;
+  }
+
+  val default : rewriter
+  val visit_exp : rewriter -> exp -> exp
+  val visit_lval : rewriter -> lval -> lval
+end
+
+
+(** Folding visitor *)
+
+module Fold :
+sig
+  type 'a visitor = {
+    neutral : 'a;
+    combine : 'a -> 'a -> 'a;
+    exp : exp -> 'a;
+    lval : lval -> 'a;
+    varinfo : varinfo -> 'a;
+    offset : offset -> 'a;
+  }
+
+  type 'a folder = {
+    fold_exp : visitor:'a visitor -> exp -> 'a;
+    fold_lval : visitor:'a visitor -> lval -> 'a;
+    fold_varinfo : visitor:'a visitor -> varinfo -> 'a;
+    fold_offset : visitor:'a visitor -> offset -> 'a;
+  }
+
+  val default : 'a folder
+  val visit_exp : neutral:'a -> combine:('a -> 'a -> 'a) ->
+    'a folder -> exp -> 'a
+  val visit_lval : neutral:'a -> combine:('a -> 'a -> 'a) ->
+    'a folder -> lval -> 'a
+end
diff --git a/src/plugins/eva/ast/eva_automata.ml b/src/plugins/eva/ast/eva_automata.ml
new file mode 100644
index 0000000000000000000000000000000000000000..79bfafcfc916bf740d50072189e33a1fe107d32d
--- /dev/null
+++ b/src/plugins/eva/ast/eva_automata.ml
@@ -0,0 +1,349 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+open Eva_ast
+
+(* --- Vertices and Edges types --- *)
+
+type vertex = {
+  vertex_key : int;
+  vertex_start_of : Cil_types.stmt option;
+  mutable vertex_wto_index : vertex list
+}
+
+type guard_kind = Interpreted_automata.guard_kind = Then | Else
+
+type transition =
+  | Skip
+  | Enter of block
+  | Leave of block
+  | Return of exp option * stmt
+  | Guard of exp * guard_kind * stmt
+  | Assign of lval * exp * stmt
+  | Call of lval option * exp * exp list * stmt
+  | Init of varinfo * init * stmt
+  | Asm of attributes * string list * extended_asm option * stmt
+
+type edge = {
+  edge_key : int;
+  edge_kinstr : kinstr;
+  edge_transition : transition;
+  edge_loc : location;
+}
+
+let dummy_vertex = {
+  vertex_key = -1;
+  vertex_start_of = None;
+  vertex_wto_index = [];
+}
+
+let dummy_edge = {
+  edge_key = -1;
+  edge_kinstr = Kglobal;
+  edge_transition = Skip;
+  edge_loc = Cil_datatype.Location.unknown;
+}
+
+module Vertex = Datatype.Make_with_collections (struct
+    include Datatype.Serializable_undefined
+    type t = vertex
+    let reprs = [dummy_vertex]
+    let name = "Eva_automata.Vertex"
+    let compare v1 v2 = v1.vertex_key - v2.vertex_key
+    let hash v = v.vertex_key
+    let equal v1 v2 = v1.vertex_key = v2.vertex_key
+    let pretty fmt v = Format.pp_print_int fmt v.vertex_key
+  end)
+
+module Transition = Datatype.Make (struct
+    include Datatype.Serializable_undefined
+    type t = transition
+    let name = "Eva_automata.Transition"
+    let reprs = [Skip]
+    let pretty fmt =
+      let open Format in
+      let print_var_list fmt l =
+        Pretty_utils.pp_list ~sep:", " Printer.pp_varinfo fmt l
+      in
+      function
+      | Skip -> ()
+      | Return (None,_) -> fprintf fmt "return"
+      | Return (Some exp,_) -> fprintf fmt "return %a" Eva_ast.pp_exp exp
+      | Guard (exp,Then,_) -> Eva_ast.pp_exp fmt exp
+      | Guard (exp,Else,_) -> fprintf fmt "!(%a)" Eva_ast.pp_exp exp
+      | Assign (_,_,stmt)
+      | Call (_,_,_,stmt)
+      | Init (_,_,stmt)
+      | Asm (_,_,_,stmt) -> Printer.pp_stmt fmt stmt
+      | Enter (b) -> fprintf fmt "Enter %a" print_var_list b.blocals
+      | Leave (b)  -> fprintf fmt "Exit %a" print_var_list b.blocals
+  end)
+
+module Edge =
+struct
+  include Datatype.Make_with_collections
+      (struct
+        include Datatype.Serializable_undefined
+        type t = edge
+        let reprs = [dummy_edge]
+        let name = "Eva_automata.Edge"
+        let compare e1 e2 = e1.edge_key - e2.edge_key
+        let hash e = e.edge_key
+        let equal e1 e2 = e1.edge_key = e2.edge_key
+        let pretty fmt e = Transition.pretty fmt e.edge_transition
+      end)
+  let default = dummy_edge
+end
+
+
+(* --- Automata types --- *)
+
+module G = Graph.Imperative.Digraph.ConcreteBidirectionalLabeled
+    (Vertex)
+    (Edge)
+
+type graph = G.t
+
+type wto = vertex Wto.partition
+
+module StmtTable = Cil_datatype.Stmt.Hashtbl
+
+type automaton = {
+  graph : graph;
+  wto : wto;
+  entry_point : vertex;
+  return_point : vertex;
+  stmt_table : (vertex * vertex) StmtTable.t;
+}
+
+module Automaton = Datatype.Make
+    (struct
+      include Datatype.Serializable_undefined
+      type t = automaton
+      let reprs = [{
+          graph=G.create ();
+          wto=[];
+          entry_point=dummy_vertex;
+          return_point=dummy_vertex;
+          stmt_table=StmtTable.create 0;
+        }]
+      let name = "Eva_automata.Automaton"
+      let pretty : t Pretty_utils.formatter = fun fmt g ->
+        Pretty_utils.pp_iter G.iter_vertex ~pre:"@[" ~suf:"@]" ~sep:";@ "
+          (fun fmt v ->
+             Format.fprintf fmt "@[<2>@[%a ->@]@ %a@]"
+               Vertex.pretty v
+               (Pretty_utils.pp_iter (fun f -> G.iter_succ f g.graph) ~sep:",@ " Vertex.pretty)
+               v
+          )
+          fmt g.graph
+    end)
+
+
+(* Wto *)
+
+module Scheduler = Wto.Make (Vertex)
+
+let build_wto graph entry_point =
+  let init = entry_point
+  and succs = fun v -> G.succ graph v
+  and pref v1 v2 =
+    match v1.vertex_start_of, v2.vertex_start_of with
+    | None, None -> 0
+    | None, _ -> -1
+    | _ , None -> 1
+    | Some _, Some _ -> 0
+  in
+  Scheduler.partition ~pref ~init ~succs
+
+
+(* Automata translation *)
+
+
+let translate_instr stmt instr =
+  let translate_call dest callee args _loc =
+    let dest' = Option.map translate_lval dest in
+    let callee' = translate_exp callee in
+    let args' = List.map translate_exp args in
+    Call (dest', callee', args', stmt)
+  in
+  match instr with
+  | Cil_types.Set (lval, exp, _loc) ->
+    let lval' = translate_lval lval in
+    let exp' = translate_exp exp in
+    Assign (lval', exp', stmt)
+  | Call (dest, callee, args, loc) ->
+    translate_call dest callee args loc
+  | Local_init (dest, Cil_types.ConsInit (callee, args, k), loc) ->
+    Cil.treat_constructor_as_func translate_call dest callee args k loc
+  | Local_init (vi, Cil_types.AssignInit init, _loc) ->
+    let init' = translate_init init in
+    Init (vi, init', stmt)
+  | Asm (attributes, string_list, ext_asm_opt, _loc) ->
+    Asm (attributes, string_list, ext_asm_opt, stmt)
+  | Skip (_loc) | Code_annot (_, _loc) ->
+    Skip
+
+let translate_transition transition =
+  match transition with
+  | Interpreted_automata.Skip -> Skip
+  | Return (exp_opt, stmt) ->
+    Return (Option.map translate_exp exp_opt, stmt)
+  | Guard (exp, guard_kind, stmt) ->
+    Guard (translate_exp exp, guard_kind, stmt)
+  | Prop _ ->
+    Skip
+  | Instr (inst, stmt) ->
+    translate_instr stmt inst
+  | Enter block ->
+    Enter block
+  | Leave block ->
+    Leave block
+
+(* Fill the wto index of the vertices *)
+let build_wto_index wto =
+  let rec iter_wto index w =
+    List.iter (iter_element index) w
+  and iter_element index = function
+    | Wto.Node v ->
+      v.vertex_wto_index <- index
+    | Wto.Component (h, w) ->
+      let new_index = h :: index in
+      iter_wto new_index (Wto.Node h :: w)
+  in
+  iter_wto [] wto
+
+let generate_literal_strings_bases kf =
+  (* Bases id for literal strings are generated the first time a base for the
+     string is required. The ordering of bases is built on this id, so the
+     order of generation changes the order of pretty printing. This function
+     visits the strings of a function in a standard order defined by frama-c
+     visitor to ensure the stability of pretty printing. *)
+  let visitor = object
+    inherit Visitor.frama_c_inplace
+    method !vexpr exp =
+      match exp.enode with
+      | Const (Cil_types.CStr _ | Cil_types.CWStr _) ->
+        ignore (Base.of_string_exp exp);
+        Cil.SkipChildren
+      | _ ->
+        Cil.DoChildren
+  end
+  in
+  ignore (Visitor.visitFramacKf visitor kf)
+
+let translate_automaton kf =
+  generate_literal_strings_bases kf;
+  let module Src = Interpreted_automata in
+  let module VertexTable = Src.Vertex.Hashtbl in
+  let src = Interpreted_automata.get_automaton kf in
+  let size = Src.(G.nb_vertex src.graph) in
+  let graph = G.create ~size () in
+  let table = VertexTable.create size in
+  let translate_vertex (v : Src.vertex) =
+    let v' = {
+      vertex_key = v.vertex_key;
+      vertex_start_of = v.vertex_start_of;
+      vertex_wto_index = [];
+    }
+    in
+    G.add_vertex graph v';
+    VertexTable.add table v v'
+  and translate_edge (v, e, w) =
+    let v' = VertexTable.find table v
+    and w' = VertexTable.find table w
+    and e' = {
+      edge_key = e.Src.edge_key;
+      edge_kinstr = e.Src.edge_kinstr;
+      edge_transition = translate_transition e.Src.edge_transition;
+      edge_loc = e.Src.edge_loc;
+    }
+    in
+    G.add_edge_e graph (v',e',w')
+  and translate_stmt_table t =
+    let module T = Cil_datatype.Stmt.Hashtbl in
+    let t' = T.create (T.length t) in
+    let translate_pair (v1, v2) =
+      VertexTable.find table v1, VertexTable.find table v2
+    in
+    T.iter (fun stmt (v1, v2) -> T.add t' stmt (translate_pair (v1, v2))) t;
+    t'
+  in
+  Src.G.iter_vertex translate_vertex src.graph;
+  Src.G.iter_edges_e translate_edge src.graph;
+  let entry_point = VertexTable.find table src.entry_point
+  and return_point = VertexTable.find table src.return_point
+  and stmt_table = translate_stmt_table src.stmt_table in
+  let wto = build_wto graph entry_point in
+  build_wto_index wto;
+  { graph; wto; entry_point; return_point; stmt_table }
+
+
+(* Automata memoization *)
+
+module State = Kernel_function.Make_Table (Automaton)
+    (struct
+      let size = 97
+      let name = "Eva_automata.State"
+      let dependencies = [Ast.self]
+    end)
+
+let get_automaton = State.memo translate_automaton
+
+
+(* Algorithms *)
+
+let exit_strategy =
+  let module Algorithms = Interpreted_automata.Algorithms (G) in
+  Algorithms.exit_strategy
+
+let output_to_dot =
+  let module Vertex = struct
+    include Vertex
+    let start_of v = v.vertex_start_of end
+  in
+  let module Dot = Interpreted_automata.Dot (Vertex) (Edge) (G) in
+  fun out automaton ->
+    Dot.output_to_dot out ~labeling:`Both ~wto:automaton.wto automaton.graph
+
+let wto_index_diff v1 v2 =
+  let index1 = v1.vertex_wto_index and index2 = v2.vertex_wto_index in
+  let rec remove_common_prefix l1 l2 =
+    match l1, l2 with
+    | x :: l1, y :: l2 when Vertex.equal x y ->
+      remove_common_prefix l1 l2
+    | l1, l2 -> l1, l2
+  in
+  let l1 = List.rev index1
+  and l2 = List.rev index2
+  in
+  let left, entered = remove_common_prefix l1 l2 in
+  List.rev left, entered
+
+let is_wto_head v =
+  match v.vertex_wto_index with
+  | v' :: _ -> Vertex.equal v v'
+  | [] -> false
+
+let is_back_edge (v1,v2) =
+  List.exists (Vertex.equal v2) (v1.vertex_wto_index)
diff --git a/src/plugins/eva/ast/eva_automata.mli b/src/plugins/eva/ast/eva_automata.mli
new file mode 100644
index 0000000000000000000000000000000000000000..3a575edd130c607537a8fae891eca4c5ee87010f
--- /dev/null
+++ b/src/plugins/eva/ast/eva_automata.mli
@@ -0,0 +1,88 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(** Eva automata are [Interpreted_automata] where transitions have been
+    translated to the Eva AST and where useless transitions have been
+    replaced by Skip. As such, it essentially differs by its simpler
+    vertex, edge and transitions types. *)
+
+open Cil_types
+open Eva_ast
+
+type vertex = private {
+  vertex_key : int;
+  vertex_start_of : Cil_types.stmt option;
+  mutable vertex_wto_index : vertex list;
+}
+
+type guard_kind = Then | Else
+
+type transition =
+  | Skip
+  | Enter of block
+  | Leave of block
+  | Return of exp option * stmt
+  | Guard of exp * guard_kind * stmt
+  | Assign of lval * exp * stmt
+  | Call of lval option * exp * exp list * stmt
+  | Init of varinfo * init * stmt
+  | Asm of attributes * string list * extended_asm option * stmt
+
+type edge = private {
+  edge_key : int;
+  edge_kinstr : kinstr;
+  edge_transition : transition;
+  edge_loc : location;
+}
+
+module G : Graph.Sig.I
+  with type V.t = vertex
+   and  type E.t = vertex * edge * vertex
+   and  type V.label = vertex
+   and  type E.label = edge
+
+type graph = G.t
+
+type wto = vertex Wto.partition
+
+type automaton = {
+  graph : graph;
+  wto : wto;
+  entry_point : vertex;
+  return_point : vertex;
+  stmt_table : (vertex * vertex) Cil_datatype.Stmt.Hashtbl.t;
+}
+
+module Transition : Datatype.S with type t = transition
+module Vertex : Datatype.S_with_collections with type t = vertex
+module Edge : Datatype.S_with_collections with type t = edge
+module Automaton : Datatype.S with type t = automaton
+
+val get_automaton : kernel_function -> automaton
+val output_to_dot : out_channel -> automaton -> unit
+
+(* Wto related functions *)
+
+val exit_strategy : graph -> vertex Wto.component -> wto
+val wto_index_diff : vertex -> vertex -> vertex list * vertex list
+val is_wto_head : vertex -> bool
+val is_back_edge : vertex * vertex -> bool
diff --git a/src/plugins/eva/contexts/abstract_context.ml b/src/plugins/eva/contexts/abstract_context.ml
new file mode 100644
index 0000000000000000000000000000000000000000..b93d201dfe43afc4f24b1af9968e75c19e4766e1
--- /dev/null
+++ b/src/plugins/eva/contexts/abstract_context.ml
@@ -0,0 +1,60 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(** An abstract context can be used to transfer information from the state of
+    an abstract domain, in which an expression or lvalue is evaluated, to a
+    value abstraction, which interprets operations during this evaluation.
+    The context is built by the function [build_context] of abstract domains,
+    and passed as argument of most transfer functions from {!Abstract_value}. *)
+
+open Eval
+
+module type S = sig
+  type t
+
+  (** The default context used in a top abstract state, or if no domain has been
+      enabled — or no domain providing this context. *)
+  val top : t
+
+  (** In a product of abstract domains, merges the context provided by the
+      abstract state of each domain. *)
+  val narrow : t -> t -> t or_bottom
+end
+
+(** Keys used to identify context modules. *)
+type 'c key = 'c Structure.Key_Context.key
+
+(** Signature for a leaf module of context. *)
+module type Leaf = sig
+  include S
+
+  (** The key identifies the module and the type [t] of context. *)
+  val key : t key
+end
+
+(** Eva abstractions are divided between contexts, values, locations and domains.
+    Values and domains depend on contexts, and use this type to declare such
+    dependencies. In the standard case, a value or domain depends on a single
+    context module [Ctx] and uses [Leaf (module Ctx)] to declare this dependency. *)
+type 'c dependencies =
+  | Leaf : (module Leaf with type t = 'c) -> 'c dependencies
+  | Node : 'l dependencies * 'r dependencies -> ('l * 'r) dependencies
diff --git a/src/plugins/eva/contexts/context_product.ml b/src/plugins/eva/contexts/context_product.ml
new file mode 100644
index 0000000000000000000000000000000000000000..4ca41b8fdc1ce92d1c2531b5afcd4dfade1ba9a6
--- /dev/null
+++ b/src/plugins/eva/contexts/context_product.ml
@@ -0,0 +1,28 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+module Make (L : Abstract_context.S) (R : Abstract_context.S) = struct
+  type t = L.t * R.t
+  let top = (L.top, R.top)
+  let narrow (l, r) (l', r') =
+    Lattice_bounds.Bottom.zip (L.narrow l l') (R.narrow r r')
+end
diff --git a/src/plugins/eva/contexts/context_product.mli b/src/plugins/eva/contexts/context_product.mli
new file mode 100644
index 0000000000000000000000000000000000000000..abbd6bfc9a965d81773516d727701b5480dcf799
--- /dev/null
+++ b/src/plugins/eva/contexts/context_product.mli
@@ -0,0 +1,26 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(** Cartesian product of two context abstractions. *)
+
+module Make (L : Abstract_context.S) (R : Abstract_context.S)
+  : Abstract_context.S with type t = L.t * R.t
diff --git a/src/plugins/eva/contexts/unit_context.ml b/src/plugins/eva/contexts/unit_context.ml
new file mode 100644
index 0000000000000000000000000000000000000000..86669eb7cde87661606d07dcea04d6b8780c0e7f
--- /dev/null
+++ b/src/plugins/eva/contexts/unit_context.ml
@@ -0,0 +1,26 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+type t = unit
+let top = ()
+let narrow () () = `Value ()
+let key = Structure.Key_Context.create_key "Unit context"
diff --git a/src/plugins/eva/contexts/unit_context.mli b/src/plugins/eva/contexts/unit_context.mli
new file mode 100644
index 0000000000000000000000000000000000000000..908e1f44c9645649be7b02488c667b29b49013a0
--- /dev/null
+++ b/src/plugins/eva/contexts/unit_context.mli
@@ -0,0 +1,23 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+include Abstract_context.Leaf with type t = unit
diff --git a/src/plugins/eva/domains/abstract_domain.ml b/src/plugins/eva/domains/abstract_domain.ml
index 3fba964a09919b7915885e47e520968da85e9eb3..79e3f38dfd288d3a0cab24613b6febabbb042e11 100644
--- a/src/plugins/eva/domains/abstract_domain.ml
+++ b/src/plugins/eva/domains/abstract_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -79,6 +79,9 @@
 (* The types of the Cil AST. *)
 open Cil_types
 
+type exp = Eva_ast.exp
+type lval = Eva_ast.lval
+
 (* Definition of the types frequently used in Eva. *)
 open Eval
 
@@ -127,6 +130,11 @@ module type Queries = sig
   (** Domain state. *)
   type state
 
+  (** Domains can optionally provide a context to be used by value abstractions
+      when evaluating expressions. This can be safely ignored for most domains.
+      Defined as unit (no context) by {!Domain_builder.Complete}. *)
+  type context
+
   (** Numerical values to which the expressions are evaluated. *)
   type value
 
@@ -166,28 +174,33 @@ module type Queries = sig
     state -> exp -> (value * origin option) evaluated
 
   (** Query function for lvalues:
-      [extract_lval ~oracle context t lval typ loc] returns the known value
-      stored at the location [loc] of the left value [lval] of type [typ].
+      [extract_lval ~oracle context t lval loc] returns the known value
+      stored at the location [loc] of the left value [lval].
       See above for more details on queries. *)
   val extract_lval :
     oracle:(exp -> value evaluated) -> evaluation_context ->
-    state -> lval -> typ -> location -> (value * origin option) evaluated
+    state -> lval -> location -> (value * origin option) evaluated
 
   (** [backward_location state lval typ loc v] reduces the location [loc] of the
-      lvalue [lval] of type [typ], so that only the locations that may have value
+      lvalue [lval], so that only the locations that may have value
       [v] are kept.
       The returned location must be included in [loc], but it is always sound
       to return [loc] itself.
       Also returns the value that may have the returned location, if not bottom.
       Defined by {!Domain_builder.Complete} with no reduction. *)
   val backward_location :
-    state -> lval -> typ -> location -> value -> (location * value) or_bottom
+    state -> lval -> location -> value -> (location * value) or_bottom
 
   (** Given a reduction [expr] = [value], provides more reductions that may
       be performed.
       Defined by {!Domain_builder.Complete} with no reduction. *)
   val reduce_further : state -> exp -> value -> (exp * value) list
 
+  (** Returns the current context to be used by value abstractions for the
+      evaluation of expressions or lvalues.
+      Defined by {!Domain_builder.Complete} with no context. *)
+  val build_context : state -> context or_bottom
+
 end
 
 (** Results of an evaluation: the results of all intermediate calculation (the
@@ -511,6 +524,11 @@ module type Leaf = sig
       Automatically created by {!Domain_builder.Complete}. *)
   val key: t key
 
+  (** The abstract context used by the domain.
+      It carries the [context] type used by the domain.
+      Defined by {!Domain_builder.Complete} for the unit context. *)
+  val context_dependencies : context Abstract_context.dependencies
+
   (** The abstract value used by the domain.
       It carries the [value] type used by the domain.
       See {!Main_values} for some abstract values available in Eva. *)
diff --git a/src/plugins/eva/domains/apron/apron_domain.ml b/src/plugins/eva/domains/apron/apron_domain.ml
index 2b47a0168f33ebef4a4a11257c5e7995b2bcf7fb..a8628869f240e3c93abcac00b7b927364ecde688 100644
--- a/src/plugins/eva/domains/apron/apron_domain.ml
+++ b/src/plugins/eva/domains/apron/apron_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,8 +20,8 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
+open Eva_ast
 open Apron
 
 let dkey = Self.register_category "d-apron"
@@ -35,21 +35,21 @@ let abort exclog =
     print_exc exclog.exn print_funid exclog.funid exclog.msg
 
 let is_relevant_varinfo varinfo =
-  not (Cil.typeHasQualifier "volatile" varinfo.vtype)
+  not (Cil.typeHasQualifier "volatile" varinfo.Cil_types.vtype)
   && (true || not varinfo.vglob)
 
-let is_relevant_lval = function
+let is_relevant_lval lval = match lval.node with
   | Var varinfo, NoOffset -> is_relevant_varinfo varinfo
   | _ -> false
 
-let rec contains_relevant_lval expr = match expr.enode with
+let rec contains_relevant_lval expr = match expr.node with
   | Lval lval -> is_relevant_lval lval
   | UnOp (_, e, _) | CastE (_, e) -> contains_relevant_lval e
   | BinOp (_, e1, e2, _) ->
     contains_relevant_lval e1 || contains_relevant_lval e2
   | _ -> false
 
-let is_relevant expr = match expr.enode with
+let is_relevant expr = match expr.node with
   | Lval _ -> true
   | UnOp (_, e, _) | CastE (_, e) -> contains_relevant_lval e
   | BinOp (_, e1, e2, _) ->
@@ -237,7 +237,7 @@ let translate_varinfo varinfo =
       var
     | _ -> raise (Out_of_Scope "translate_varinfo not integer")
 
-let translate_lval = function
+let translate_lval lval = match lval.node with
   | Var varinfo, NoOffset -> translate_varinfo varinfo
   | _ -> raise (Out_of_Scope "translate_lval not Var")
 
@@ -249,7 +249,7 @@ let translate_constant = function
   | _ -> raise (Out_of_Scope "translate_constant not integer")
 
 (* Translation of expressions from cil to apron. *)
-let rec translate_expr eval oracle expr = match expr.enode with
+let rec translate_expr eval oracle expr = match expr.node with
   | Const cst -> Texpr1.Cst (translate_constant cst)
   | Lval lval -> Texpr1.Var (translate_lval lval)
   | UnOp (Neg, e1, typ) ->
@@ -261,17 +261,13 @@ let rec translate_expr eval oracle expr = match expr.enode with
     let e1' = translate_expr_linearize eval oracle e1 in
     let e2' = translate_expr_linearize eval oracle e2 in
     let need_coercion = op = Mod || op = Div in
-    let e1' = if need_coercion then coerce eval (Cil.typeOf e1) e1' else e1' in
-    let e2' = if need_coercion then coerce eval (Cil.typeOf e2) e2' else e2' in
+    let e1' = if need_coercion then coerce eval e1.typ e1' else e1' in
+    let e2' = if need_coercion then coerce eval e2.typ e2' else e2' in
     let op' = translate_binop op in
     Texpr1.(Binop (op', e1', e2', translate_typ typ, round))
   | CastE (typ, e)->
     coerce ~cast:true eval typ (translate_expr_linearize eval oracle e)
   | AddrOf _ | StartOf _  -> raise (Out_of_Scope "translate_expr addr")
-  | SizeOf _ | SizeOfE _ | SizeOfStr _ | AlignOf _  | AlignOfE _ ->
-    match Cil.constFoldToInt expr with
-    | None -> raise (Out_of_Scope "translate_expr sizeof alignof")
-    | Some i -> Texpr1.Cst (Coeff.s_of_int (Integer.to_int_exn i))
 (* Expressions that cannot be translated by [translate_expr] are replaced
    using an oracle. Of course, this oracle must be sound!. If the oracle
    cannot find a suitable replacement, it can re-raise the expresssion. *)
@@ -281,17 +277,17 @@ and translate_expr_linearize eval oracle expr =
 
 (* Express a cil expression into an apron constraint. *)
 let rec constraint_expr eval oracle env expr positive =
-  match expr.enode with
+  match expr.node with
   | UnOp (LNot, e, _) -> constraint_expr eval oracle env e (not positive)
   | BinOp ((Le|Ne|Eq|Gt|Lt|Ge as binop), e1, e2, typ) ->
     let e1' = translate_expr_linearize eval oracle e1 in
     let e2' = translate_expr_linearize eval oracle e2 in
-    let e1'' = coerce eval (Cil.typeOf e1) e1' in
-    let e2'' = coerce eval (Cil.typeOf e2) e2' in
+    let e1'' = coerce eval e1.typ e1' in
+    let e2'' = coerce eval e2.typ e2' in
     let typ = translate_typ (Cil.unrollType typ) in
     let e = Texpr1.Binop (Texpr1.Sub, e1'', e2'', typ, round) in
     let expr = Texpr1.of_expr env e in
-    let binop = Eva_utils.conv_comp binop in
+    let binop = Eva_ast.conv_relation binop in
     let binop = if positive then binop else Abstract_interp.Comp.inv  binop in
     translate_relation expr typ binop
   | _ -> raise (Out_of_Scope "constraint_expr not handled")
@@ -450,7 +446,7 @@ module Make (Man : Input) = struct
 
   let _constraint_to_typ env state vars =
     let aux (var_apron, vi) =
-      match Eval_typ.classify_as_scalar vi.vtype with
+      match Eval_typ.classify_as_scalar vi.Cil_types.vtype with
       | Some (Eval_typ.TSInt range) ->
         let inf, sup, _size = bounds_of_typ range in
         let inf = Scalar.of_mpqf (Mpqf.of_mpz inf)
@@ -469,7 +465,7 @@ module Make (Man : Input) = struct
 
   let dummy_oracle _ exn = raise exn
 
-  let compute state expr typ =
+  let compute state expr =
     let top = `Value (None, None), Alarmset.all in
     if not (is_relevant expr)
     then top
@@ -477,6 +473,7 @@ module Make (Man : Input) = struct
       try
         let eval = make_eval state in
         let oracle = dummy_oracle in
+        let typ = expr.typ in
         let exp = coerce eval typ (translate_expr_linearize eval oracle expr) in
         let interval = eval exp in
         let interval = truncate_interval typ interval in
@@ -495,11 +492,11 @@ module Make (Man : Input) = struct
       | Z.Overflow | Failure _ -> top
 
   let extract_expr ~oracle:_ _context state expr =
-    compute state expr (Cil.typeOf expr)
+    compute state expr
 
-  let extract_lval ~oracle:_ _context state lval typ _loc =
-    let expr = Eva_utils.lval_to_exp lval in
-    compute state expr typ
+  let extract_lval ~oracle:_ _context state lval _loc =
+    let expr = Eva_ast.Build.lval lval in
+    compute state expr
 
   let maybe_bottom state =
     if Abstract1.is_bottom man state
@@ -559,7 +556,7 @@ module Make (Man : Input) = struct
      into Apron intervals. *)
   let make_oracle valuation =
     fun exp exn ->
-    if Cil.isIntegralType (Cil.typeOf exp) then
+    if Cil.isIntegralType exp.typ then
       match valuation.Abstract_domain.find exp with
       | `Value { value = { v = `Value itv } } ->
         let interval = ival_to_interval itv in
@@ -579,7 +576,7 @@ module Make (Man : Input) = struct
       then
         try
           let expr = translate_expr_linearize eval oracle exp in
-          let expr = coerce eval (Cil.typeOf exp) expr in
+          let expr = coerce eval exp.typ expr in
           (* When the value is top or bottom, no constraint is expressible. *)
           let cons = record.value.v >>- fun ival ->
             let interval = ival_to_interval ival in
@@ -606,7 +603,7 @@ module Make (Man : Input) = struct
           let var = translate_lval lvalue.lval in
           let expr = expr in
           let exp = translate_expr_linearize eval oracle expr in
-          let exp = coerce eval lvalue.ltyp exp in
+          let exp = coerce eval lvalue.lval.typ exp in
           let exp = Texpr1.of_expr (Abstract1.env state) exp in
           (* TODO: currently, all variables are present in the environment
              at all times. Change to a dynamic environment, in which new
diff --git a/src/plugins/eva/domains/apron/apron_domain.mli b/src/plugins/eva/domains/apron/apron_domain.mli
index fb06185c0fa58124d767e27515907ea33a980230..c81dfe0585cc540133b81d50bbe835b6475ad45c 100644
--- a/src/plugins/eva/domains/apron/apron_domain.mli
+++ b/src/plugins/eva/domains/apron/apron_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins.ml b/src/plugins/eva/domains/cvalue/builtins.ml
index e5eb37d3758b1884caa66f455f2a10b1d0f2f643..405b76bb14396767b3f61c00b506a431a1b32412 100644
--- a/src/plugins/eva/domains/cvalue/builtins.ml
+++ b/src/plugins/eva/domains/cvalue/builtins.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,12 +20,10 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
-
 exception Invalid_nb_of_args of int
 exception Outside_builtin_possibilities
 
-type builtin_type = unit -> typ * typ list
+type builtin_type = unit -> Eva_ast.typ * Eva_ast.typ list
 type cacheable = Eval.cacheable = Cacheable | NoCache | NoCacheCallers
 
 type full_result = {
@@ -39,7 +37,7 @@ type call_result =
   | Result of Cvalue.V.t list
   | Full of full_result
 
-type builtin = Cvalue.Model.t -> (exp * Cvalue.V.t) list -> call_result
+type builtin = Cvalue.Model.t -> (Eva_ast.exp * Cvalue.V.t) list -> call_result
 
 (* Table of all registered builtins; filled by [register_builtin] calls.  *)
 let table = Hashtbl.create 17
@@ -254,7 +252,8 @@ let process_result call state call_result =
       let b_ret = Base.of_varinfo vi_ret in
       let offsm = Eval_op.offsetmap_of_v ~typ:vi_ret.vtype value in
       let prefix = "Builtin " ^ Kernel_function.get_name call.kf in
-      Cvalue_transfer.warn_imprecise_offsm_write ~prefix (Cil.var vi_ret) offsm;
+      let lval_ret = Eva_ast.Build.var vi_ret in
+      Cvalue_transfer.warn_imprecise_offsm_write ~prefix lval_ret offsm;
       Cvalue.Model.add_base b_ret offsm state, clob
     | _, _ -> state, clob (* TODO: error? *)
   in
diff --git a/src/plugins/eva/domains/cvalue/builtins.mli b/src/plugins/eva/domains/cvalue/builtins.mli
index bf85aba9659e2bd3cac76f04b6af8814f283dac0..258bcfe8ffb5cc254858f723ddd95f11f9e50d0e 100644
--- a/src/plugins/eva/domains/cvalue/builtins.mli
+++ b/src/plugins/eva/domains/cvalue/builtins.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -25,13 +25,11 @@
 (** Eva analysis builtins for the cvalue domain, more efficient than their
     equivalent in C. *)
 
-open Cil_types
-
 exception Invalid_nb_of_args of int
 exception Outside_builtin_possibilities
 
 (* Signature of a builtin: type of the result, and type of the arguments. *)
-type builtin_type = unit -> typ * typ list
+type builtin_type = unit -> Eva_ast.typ * Eva_ast.typ list
 
 (** Can the results of a builtin be cached? See {!Eval} for more details.*)
 type cacheable = Eval.cacheable = Cacheable | NoCache | NoCacheCallers
@@ -68,7 +66,7 @@ type call_result =
 (** Type of a cvalue builtin, whose arguments are:
     - the memory state at the beginning of the function call;
     - the list of arguments of the function call. *)
-type builtin = Cvalue.Model.t -> (exp * Cvalue.V.t) list -> call_result
+type builtin = Cvalue.Model.t -> (Eva_ast.exp * Cvalue.V.t) list -> call_result
 
 (** [register_builtin name ?replace ?typ cacheable f] registers the function [f]
     as a builtin to be used instead of the C function of name [name].
@@ -91,7 +89,7 @@ val is_builtin: string -> bool
 val prepare_builtins: unit -> unit
 
 (** Is a given function replaced by a builtin? *)
-val is_builtin_overridden: kernel_function -> bool
+val is_builtin_overridden: Cil_types.kernel_function -> bool
 
 (** [clobbered_set_from_ret state ret] can be used for functions that return
     a pointer to where they have written some data. It returns all the bases
@@ -106,7 +104,8 @@ type result = Cvalue.Model.t * Locals_scoping.clobbered_set
     evaluated along with the builtin.
     [prepare_builtins] should have been called before using this function. *)
 val find_builtin_override:
-  kernel_function -> (string * builtin * cacheable * funspec) option
+  Cil_types.kernel_function ->
+  (string * builtin * cacheable * Cil_types.funspec) option
 
 (* Applies a cvalue builtin for the given call, in the given cvalue state. *)
 val apply_builtin:
diff --git a/src/plugins/eva/domains/cvalue/builtins_float.ml b/src/plugins/eva/domains/cvalue/builtins_float.ml
index 8e963d49efa48398a7e7d7912a7b41177d4c3f2e..c7b7161e541e4162224753a418cffd41eea04283 100644
--- a/src/plugins/eva/domains/cvalue/builtins_float.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_float.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_float.mli b/src/plugins/eva/domains/cvalue/builtins_float.mli
index b0855e5e15b5e7d0ca3056c1d9d46d44b21bbbf5..a8d7d58f316e7e555175722d894d34d53caf4e4d 100644
--- a/src/plugins/eva/domains/cvalue/builtins_float.mli
+++ b/src/plugins/eva/domains/cvalue/builtins_float.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_malloc.ml b/src/plugins/eva/domains/cvalue/builtins_malloc.ml
index 8e68e2198b4c4e8e7467b127b80c648bf42d1a83..ca5f650f358ec224b171f009865347899d6d42d7 100644
--- a/src/plugins/eva/domains/cvalue/builtins_malloc.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_malloc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_malloc.mli b/src/plugins/eva/domains/cvalue/builtins_malloc.mli
index 399b01a97c65de424fe157642df55c4b3f22c98b..c6115e5e5a6b8628d71661d5de641b72a115edcc 100644
--- a/src/plugins/eva/domains/cvalue/builtins_malloc.mli
+++ b/src/plugins/eva/domains/cvalue/builtins_malloc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_memory.ml b/src/plugins/eva/domains/cvalue/builtins_memory.ml
index f466617f59030c0b0438385e1b94fa5fb7784450..dc8645d225f1c589193e248a2f98772f4f28e95d 100644
--- a/src/plugins/eva/domains/cvalue/builtins_memory.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_memory.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -21,6 +21,7 @@
 (**************************************************************************)
 
 open Cil_types
+open Eva_ast
 open Cvalue
 open Abstract_interp
 open Locations
@@ -31,68 +32,12 @@ let register_builtin name ?replace builtin =
 let dkey = Self.register_category "imprecision"
 
 let rec lval_of_address exp =
-  match exp.enode with
+  match exp.node with
   | AddrOf lval -> lval
   | CastE (_typ, exp) -> lval_of_address exp
-  | _ -> Cil.mkMem ~addr:exp ~off:Cil_types.NoOffset
+  | _ -> Eva_ast.Build.mem exp
 
-let frama_C_is_base_aligned _state = function
-  | [_, x; _, y] ->
-    let result =
-      match Ival.project_small_set (Cvalue.V.project_ival y) with
-      | Some si ->
-        let aligned =
-          Location_Bytes.for_all
-            (fun b _o -> List.for_all (Base.is_aligned_by b) si)
-            x
-        in
-        if aligned then Cvalue.V.singleton_one else Cvalue.V.zero_or_one
-      | None
-      | exception Cvalue.V.Not_based_on_null -> Cvalue.V.zero_or_one
-    in
-    Builtins.Result [result]
-  | _ -> raise (Builtins.Invalid_nb_of_args 2)
-
-let () = register_builtin "Frama_C_is_base_aligned" frama_C_is_base_aligned
-
-
-let frama_c_offset _state = function
-  | [_, x] ->
-    let result =
-      try
-        let acc = Ival.bottom in
-        let offsets = Location_Bytes.fold_i (fun _b -> Ival.join) x acc in
-        Cvalue.V.inject_ival offsets
-      with Abstract_interp.Error_Top ->
-        Self.error ~current:true
-          "Builtin Frama_C_offset is applied to a value not \
-           guaranteed to be an address";
-        Cvalue.V.top_int
-    in
-    Builtins.Result [result]
-  | _ -> raise (Builtins.Invalid_nb_of_args 1)
-
-let () = register_builtin "Frama_C_offset" frama_c_offset
-
-exception Memcpy_result of (Cvalue.Model.t * Assigns.t * Zone.t)
-
-exception Indeterminate of V_Or_Uninitialized.t
-
-(*  Called by the [memcpy] builtin. Warns when the offsetmap contains
-    an indeterminate value, when the imprecision category is enabled *)
-let memcpy_check_indeterminate_offsetmap offsm =
-  if Self.is_debug_key_enabled dkey then
-    try
-      let aux_offset _ (v, _, _) =
-        match v with
-        | V_Or_Uninitialized.C_init_noesc _ -> ()
-        | _ -> raise (Indeterminate v)
-      in
-      V_Offsetmap.iter aux_offset offsm
-    with Indeterminate v ->
-      Self.debug ~current:true ~dkey ~once:true
-        "@[In memcpy@ builtin:@ precise@ copy of@ indeterminate@ values %a@]%t"
-        V_Or_Uninitialized.pretty v Eva_utils.pp_callstack
+let plevel = Parameters.ArrayPrecisionLevel.get
 
 (* Create a dependency [\from arg_n] where n is the nth argument of the
    currently called function. *)
@@ -103,282 +48,260 @@ let deps_nth_arg n =
     Deps.add_data Deps.bottom (Locations.zone_of_varinfo vi)
   with Failure _ -> Kernel.fatal "%d arguments expected" n
 
+(* Preconditions of memcpy, memmove and memset ensures that pointer arguments
+   are valid. Reduce them accordingly. *)
+let reduce_to_valid_loc dst size access =
+  let min_size = Ival.min_int size in
+  let size = Option.fold ~none:Int_Base.zero ~some:Int_Base.inject min_size in
+  let dst_loc = Locations.make_loc dst size in
+  let valid_dst_loc = Locations.valid_part ~bitfield:false access dst_loc in
+  valid_dst_loc.Locations.loc
+
+(* -------------------------------------------------------------------------- *)
+(*                             Memcpy & Memmove                               *)
+(* -------------------------------------------------------------------------- *)
+
+(*  Warns when the value is indeterminate. *)
+let warn_indeterminate_value ~name ?(precise = false) = function
+  | V_Or_Uninitialized.C_init_noesc _ -> ()
+  | _ ->
+    Self.result ~dkey ~current:true ~once:true
+      "@[In %s builtin:@ %sprecise copy@ of indeterminate values.@]%t"
+      name (if precise then "" else "im") Eva_utils.pp_callstack
+
+(*  Warns when the offsetmap contains an indeterminate value. *)
+let check_indeterminate_offsetmap ~name offsm =
+  if Self.is_debug_key_enabled dkey then
+    let warn _ (v, _, _) = warn_indeterminate_value ~name ~precise:true v in
+    V_Offsetmap.iter warn offsm
+
+(* Adds \from dependency from [src_loc] to [dst_loc]. *)
+let add_deps_loc ~exact ~src_loc ~dst_loc deps_table =
+  let src_zone = Locations.(enumerate_valid_bits Read src_loc) in
+  let dst_zone = Locations.(enumerate_valid_bits Write dst_loc) in
+  let deps = Deps.(add_data bottom src_zone) in
+  Assigns.Memory.add_binding ~exact deps_table dst_zone deps
+
+(* Adds a sure \from dependency of size [size] from [src] to [dst].
+   Also returns the written zone if it is a singleton. *)
+let add_sure_deps ~size ~src ~dst (deps_table, sure_output) =
+  let size = Int_Base.inject size in
+  let src_loc = Locations.make_loc src size in
+  let dst_loc = Locations.make_loc dst size in
+  let exact = Location_Bits.cardinal_zero_or_one dst in
+  let deps_table = add_deps_loc ~exact ~src_loc ~dst_loc deps_table in
+  let dst_zone = Locations.(enumerate_valid_bits Write dst_loc) in
+  let sure_zone = if exact then dst_zone else Zone.bottom in
+  deps_table, Zone.join sure_zone sure_output
+
+(* Copy the offsetmap of size [size] from [src] to [dst] in [state]. *)
+let copy_offsetmap ~name ~exact ~size ~src ~dst ~dst_lval state =
+  match Cvalue.Model.copy_offsetmap src size state with
+  | `Bottom -> Cvalue.Model.bottom
+  | `Value offsetmap ->
+    check_indeterminate_offsetmap ~name offsetmap;
+    let prefix = "Builtin " ^ name in
+    Cvalue_transfer.warn_imprecise_offsm_write ~prefix dst_lval offsetmap;
+    Cvalue.Model.paste_offsetmap ~from:offsetmap ~dst_loc:dst ~size ~exact state
+
+(* Returns the min and max size of a copy from an Ival.t. *)
+let min_max_size size =
+  let min, max = Ival.min_and_max size in
+  let min = Option.fold min ~none:Int.zero ~some:Int.(max zero) in
+  let max_max = Bit_utils.max_bit_size () in
+  let max = Option.fold max ~none:max_max ~some:Int.(max zero) in
+  min, max
+
+(* Computes the remaining [src], [dst] and [size] to be copied after [factor]
+   bits have already been copied. *)
+let shift ~factor:i src dst size =
+  let new_size = Int.sub size i in
+  let ival = Ival.inject_singleton i in
+  let new_src = Location_Bits.shift ival src in
+  let new_dst = Location_Bits.shift ival dst in
+  new_src, new_dst, new_size
+
+(* Performs the remaining copy from [src] to [dst] for all other possible [size],
+   after the copy for the minimum size has already been done.
+   Iterates on all possible values of [size] (after the first), and does the
+   copy for [previous_size..size]. *)
+let copy_remaining_size_by_size ~name ~src ~dst ~dst_lval ~size state =
+  let exception Result of Cvalue.Model.t in
+  let do_size size (state, previous_size) =
+    (* First iteration: this copy has already been performed, skip. *)
+    if Int.(equal previous_size minus_one)
+    then state, size
+    else
+      (* Copy data between [previous_size] and [size]. *)
+      let src, dst, size = shift ~factor:previous_size src dst size in
+      (* [exact] is false as all these copies may not happen according to the
+          concrete value of [size]. *)
+      let exact = false in
+      let new_state = copy_offsetmap ~name ~exact ~size ~src ~dst ~dst_lval state in
+      (* If this copy failed, the current size is completely invalid, and so
+         will be the following ones. Stop now with the previous state. *)
+      if not (Cvalue.Model.is_reachable new_state) then raise (Result state);
+      new_state, size
+  in
+  try fst (Ival.fold_int do_size size (state, Int.minus_one))
+  with Result state -> state
+
+(* Copy the value at location [src_loc] to location [dst_loc] in [state]. *)
+let imprecise_copy ~name ~src_loc ~dst_loc ~dst_lval state =
+  Self.debug ~dkey ~once:true ~current:true
+    "In %s builtin: too many sizes to enumerate, possible loss of precision"
+    name;
+  (* conflate_bottom:false as we want to copy padding bits *)
+  let v = Model.find_indeterminate ~conflate_bottom:false state src_loc in
+  warn_indeterminate_value ~name v;
+  let value = Cvalue.V_Or_Uninitialized.get_v v in
+  let prefix = "Builtin " ^ name in
+  Cvalue_transfer.warn_imprecise_write ~prefix dst_lval dst_loc value;
+  let new_state =
+    Cvalue.Model.add_indeterminate_binding ~exact:false state dst_loc v
+  in
+  (* Beware that all sizes may be invalid, in which case [add_binding] will
+     return [bottom]. In this case, return the previously computed state *)
+  if Model.is_reachable new_state then new_state else state
+
+(* Creates the location {loc + [0..max_size-1]} of size char. *)
+let char_location loc max_size =
+  let size_char = Bit_utils.sizeofchar () in
+  let max = Int.sub max_size size_char in
+  (* Use ranges modulo char_bits to read and write byte-by-byte, which can
+     preserve some precision.*)
+  let shift =
+    Ival.inject_interval ~min:(Some Int.zero) ~max:(Some max)
+      ~rem:Int.zero ~modu:size_char
+  in
+  let loc = Location_Bits.shift shift loc in
+  make_loc loc (Int_Base.inject size_char)
+
+let compute_memcpy ~name ~dst_lval ~dst ~src ~size state =
+  let size_min, size_max = min_max_size size in
+  (* Empty \from dependencies and sure output *)
+  let empty_deps = Assigns.Memory.empty, Zone.bottom in
+  (* First step: copy the bits we are sure to copy, i.e. for the minimum size
+     [size_min] if it is not zero. *)
+  let state, (deps_table, written_zone) =
+    if Int.gt size_min Int.zero
+    then
+      let state =
+        copy_offsetmap ~name ~exact:true ~size:size_min ~src ~dst ~dst_lval state
+      in
+      (* If the copy succeeded, update \from dependencies and sure output. *)
+      if Cvalue.Model.is_reachable state
+      then state, add_sure_deps ~size:size_min ~src ~dst empty_deps
+      else state, empty_deps
+    else state, empty_deps
+  in
+  (* Stop here if the first copy failed or if there is nothing more to copy. *)
+  if not (Cvalue.Model.is_reachable state) || Int.equal size_min size_max
+  then state, deps_table, written_zone
+  else
+    (* Second step: size is imprecise, we will now copy some bits that we are
+       not sure to copy, for all possible sizes greater than [size_min]. *)
+    (* [size_min] bits have already been copied. *)
+    let src_shift, dst_shift, size_diff = shift ~factor:size_min src dst size_max in
+    (* Remaining locations to be read/written, as locations of char size. *)
+    let src_loc = char_location src_shift size_diff
+    and dst_loc = char_location dst_shift size_diff in
+    let deps_table = add_deps_loc ~exact:false ~src_loc ~dst_loc deps_table in
+    (* If there is sufficiently few possible sizes, iter on each possible size
+       via [copy_remaining_size_by_size]. Otherwise, use [imprecise_copy] in one
+       step to read the entire range src+(size_min..size_max-1) as one byte, and
+       write the result as one byte in dst+(size_min..size_max-1). *)
+    let state =
+      if Ival.cardinal_is_less_than size (plevel () / 10)
+      then copy_remaining_size_by_size ~name ~src ~dst ~dst_lval ~size state
+      else imprecise_copy ~name ~src_loc ~dst_loc ~dst_lval state
+    in
+    state, deps_table, written_zone
 
 let frama_c_memcpy name state actuals =
-  let prefix = "Builtin " ^ name in
-  let compute (exp_dst,dst_bytes) (_exp_src,src_bytes) (_exp_size,size) =
-    let dst_lval = lval_of_address exp_dst in
-    let plevel = Parameters.ArrayPrecisionLevel.get() in
+  match actuals with
+  | [(dst_exp, dst_cvalue); (_src_exp, src_cvalue); (_size_exp, size_cvalue)] ->
+    let dst_lval = lval_of_address dst_exp in
     let size =
-      try Cvalue.V.project_ival size
+      try Cvalue.V.project_ival size_cvalue
       with Cvalue.V.Not_based_on_null -> Ival.top (* TODO: use size_t *)
     in
-    let min,max = Ival.min_and_max size in
-    let min = match min with None -> Int.zero | Some m -> Int.max m Int.zero in
-    let char_bits = Bit_utils.sizeofchar() in
-    let size_min = Int.mul char_bits min in
-    let src = loc_bytes_to_loc_bits src_bytes in
-    let dst = loc_bytes_to_loc_bits dst_bytes in
-    (* Remove read-only destinations *)
-    let dst_bits =
-      Location_Bits.filter_base (fun b -> not (Base.is_read_only b)) dst
-    in
-    let deps_return = deps_nth_arg 0 in
-    let empty_cfrom =
-      Assigns.{ memory = Memory.empty; return = deps_return }
-    in
-    let precise_copy state =
-      (* First step: copy the bytes we are sure to copy *)
-      if Int.gt size_min Int.zero then begin
-        match Cvalue.Model.copy_offsetmap src size_min state with
-        | `Bottom -> (* Read failed. Source was invalid, but must be read, we
-                        stop the analysis *)
-          raise (Memcpy_result (Cvalue.Model.bottom,empty_cfrom,Zone.bottom))
-        | `Value offsetmap ->
-          let loc_dst = make_loc dst_bits (Int_Base.inject size_min) in
-          memcpy_check_indeterminate_offsetmap offsetmap;
-          (* Read succeeded. We write the result *)
-          let loc_src = make_loc src (Int_Base.inject size_min) in
-          Cvalue_transfer.warn_imprecise_offsm_write ~prefix dst_lval offsetmap;
-          let new_state =
-            Cvalue.Model.paste_offsetmap
-              ~from:offsetmap ~dst_loc:dst_bits ~size:size_min ~exact:true state
-          in
-          let (deps_table, sure_zone) =
-            let zone_dst = enumerate_valid_bits Locations.Write  loc_dst in
-            let zone_src = enumerate_valid_bits Locations.Read loc_src in
-            let deps = Deps.data zone_src in
-            (* Note: actually a part may be written for sure (if the
-               difference between the offsets in loc_dst is smaller
-               than size), but keeping it imprecise reflects more the
-               imprecision of the value analysis here. *)
-            let exact = Location_Bits.cardinal_zero_or_one dst_bits in
-            let deps_table =
-              Assigns.Memory.add_binding ~exact
-                Assigns.Memory.empty zone_dst deps
-            in
-            let sure_zone = if exact then zone_dst else Zone.bottom in
-            (deps_table, sure_zone)
-          in
-          new_state, deps_table, sure_zone
-      end
-      else (* Nothing certain can be copied *)
-        (state, Assigns.Memory.empty, Zone.bottom)
+    (* Convert locations and size into bits. *)
+    let size = Ival.scale (Bit_utils.sizeofchar ()) size in
+    let src = loc_bytes_to_loc_bits src_cvalue in
+    let dst = loc_bytes_to_loc_bits dst_cvalue in
+    (* Remove invalid locations. *)
+    let src = reduce_to_valid_loc src size Locations.Read in
+    let dst = reduce_to_valid_loc dst size Locations.Write in
+    (* Do the copy. *)
+    let state, memory, sure_output =
+      compute_memcpy ~name ~dst_lval ~dst ~src ~size state
     in
-    let imprecise_copy new_state precise_assigns sure_zone =
-      (* Second step. Size is imprecise, we will now copy some bits
-         that we are not sure to copy *)
-      let size_min_ival = Ival.inject_singleton size_min in
-      let dst = Location_Bits.shift size_min_ival dst_bits in
-      let src = Location_Bits.shift size_min_ival src in
-      (* Size remaining to copy imprecisely *)
-      let diff = match max with
-        | Some max -> Some (Int.mul char_bits (Int.pred (Int.sub max min)))
-        | None -> None
-      in
-      (* Imprecise locations remaining to be read/written. By using ranges
-         modulo char_bits, we read and write byte-by-byte, which can preserve
-         some precision in the fallback. If sufficiently few sizes need
-         to be copied, we use a more precise method (see do_size below).
-         However, in all cases, those locations are used to compute the
-         read and written bits. *)
-      let range =
-        Ival.inject_interval ~min:(Some Int.zero) ~max:diff
-          ~rem:Int.zero ~modu:char_bits
-      in
-      let size_char = Int_Base.inject char_bits in
-      let loc_src = make_loc (Location_Bits.shift range src) size_char in
-      let loc_dst = make_loc (Location_Bits.shift range dst) size_char in
-      let c_from =
-        let zone_src = enumerate_valid_bits Locations.Read loc_src in
-        let zone_dst = enumerate_valid_bits Locations.Write  loc_dst in
-        let deps = Deps.data zone_src in
-        let memory =
-          Assigns.Memory.add_binding ~exact:false precise_assigns zone_dst deps
-        in
-        Assigns.{ memory; return = deps_return }
-      in
-      try
-        (* We try to iter on all the slices inside the value of slice.
-           If there are more too many of them, we use a backup solution *)
-        ignore (Ival.cardinal_less_than size (plevel / 10));
-        let do_size s (dst, src, prev_size, state) =
-          let s = Int.mul char_bits s in
-          let diff = Int.sub s prev_size in
-          if Int.equal s size_min then
-            (* occurs the very first time. This copy has already been
-               performed at the beginning, skip *)
-            (dst, src, s, state)
-          else begin
-            (* Copy data between prev_size and s *)
-            match Cvalue.Model.copy_offsetmap src diff state with
-            | `Bottom ->
-              (* This size is completely invalid. The following ones
-                 will also be invalid, stop now with current result *)
-              raise (Memcpy_result (state,c_from,sure_zone))
-            | `Value offsetmap ->
-              memcpy_check_indeterminate_offsetmap offsetmap;
-              Cvalue_transfer.warn_imprecise_offsm_write ~prefix dst_lval offsetmap;
-              let new_state =
-                Cvalue.Model.paste_offsetmap
-                  ~from:offsetmap ~dst_loc:dst ~size:diff ~exact:false state
-              in
-              if Cvalue.Model.is_reachable new_state then
-                let diffi = Ival.inject_singleton diff in
-                let dst = Location_Bits.shift diffi dst in
-                let src = Location_Bits.shift diffi src in
-                (dst, src, s, new_state)
-              else (* As above, invalid size, this time for the destination.
-                      We stop there *)
-                raise (Memcpy_result (state,c_from,sure_zone))
-          end
-        in
-        let _, _, _, state =
-          Ival.fold_int do_size size (dst, src, Int.zero, new_state)
-        in
-        raise (Memcpy_result (state,c_from,sure_zone))
-      with
-      | Abstract_interp.Not_less_than ->
-        Self.debug ~dkey ~once:true
-          ~current:true "In memcpy builtin: too many sizes to enumerate, \
-                         possible loss of precision";
-        (* Too many slices in the size. We read the entire range
-           src+(size_min..size_max-1) in one step, as one byte, and write the
-           result as one byte in dst+(size_min..size_max-1) *)
-        let v = (* conflate_bottom=false: we want to copy padding bits *)
-          Model.find_indeterminate ~conflate_bottom:false state loc_src
-        in
-        begin match v with
-          | V_Or_Uninitialized.C_init_noesc _ -> ()
-          | _ -> Self.result ~dkey ~current:true ~once:true
-                   "@[In memcpy@ builtin:@ imprecise@ copy of@ indeterminate@ values@]%t"
-                   Eva_utils.pp_callstack
-        end;
-        let value = Cvalue.V_Or_Uninitialized.get_v v in
-        Cvalue_transfer.warn_imprecise_write ~prefix dst_lval loc_dst value;
-        let updated_state =
-          Cvalue.Model.add_indeterminate_binding
-            ~exact:false new_state loc_dst v
-        in
-        (* Beware that all the imprecise sizes may be invalid, in which case
-           [add_binding] will return [Bottom]. In this case, return the
-           previously computed state *)
-        if Model.is_reachable updated_state then
-          raise (Memcpy_result (updated_state,c_from,sure_zone))
-        else
-          raise (Memcpy_result (new_state,c_from,sure_zone))
-    in
-    try
-      if Ival.is_zero size then
-        raise (Memcpy_result (state, empty_cfrom, Zone.bottom));
-      let (precise_state,precise_assigns,sure_zone) = precise_copy state in
-      if Option.fold ~none:false ~some:(Int.equal min) max then
-        begin
-          let c_assigns =
-            Assigns.{ memory = precise_assigns; return = deps_return }
-          in
-          raise (Memcpy_result (precise_state, c_assigns, sure_zone))
-        end;
-      imprecise_copy precise_state precise_assigns sure_zone
-    with
-    | Memcpy_result (new_state,c_assigns,sure_zone) ->
-      if Model.is_reachable new_state then
-        (* Copy at least partially succeeded (with perhaps an
-           alarm for some of the sizes *)
-        Builtins.Full
-          { Builtins.c_values = [Some dst_bytes, new_state];
-            c_clobbered = Builtins.clobbered_set_from_ret new_state dst_bytes;
-            c_assigns = Some (c_assigns,  sure_zone); }
+    (* Build the builtin results. *)
+    let return = deps_nth_arg 0 in
+    let froms = Assigns.{ memory; return } in
+    let c_assigns = Some (froms, sure_output) in
+    let return, c_clobbered =
+      if Model.is_reachable state then
+        (* Copy at least partially succeeded *)
+        Some dst_cvalue, Builtins.clobbered_set_from_ret state dst_cvalue
       else
-        Builtins.Full
-          { Builtins.c_values = [ None, Cvalue.Model.bottom];
-            c_clobbered = Base.SetLattice.bottom;
-            c_assigns = Some (c_assigns,  sure_zone); }
-  in
-  match actuals with
-  | [dst; src; size] -> compute dst src size
+        None, Base.SetLattice.bottom
+    in
+    Builtins.Full { c_values = [ return, state ]; c_clobbered; c_assigns }
   | _ -> raise (Builtins.Invalid_nb_of_args 3)
 
 let () =
   register_builtin ~replace:"memcpy" "Frama_C_memcpy" (frama_c_memcpy "memcpy");
   register_builtin ~replace:"memmove" "Frama_C_memmove" (frama_c_memcpy "memmove")
 
+(* -------------------------------------------------------------------------- *)
+(*                                  Memset                                    *)
+(* -------------------------------------------------------------------------- *)
+
 (*  Implementation of [memset] that accepts imprecise arguments. *)
 let frama_c_memset_imprecise state dst_lval dst v size =
   let prefix = "Builtin memset" in
-  let size_char = Bit_utils.sizeofchar () in
-  let size_min, size_max_bytes =
-    try
-      let size = Cvalue.V.project_ival size in
-      let min,max = Ival.min_and_max size in
-      let min = match min with
-        | None -> Int.zero
-        | Some m -> Int.mul size_char (Int.max m Int.zero)
-      and max = match max with
-        | None -> Bit_utils.max_bit_address ()
-        | Some m -> m
-      in min, max
-    with V.Not_based_on_null -> Int.zero, Bit_utils.max_bit_address ()
-  in
-  let left = loc_bytes_to_loc_bits dst in
+  let size_min, size_max = min_max_size size in
   (* Write [v] everywhere that might be written, ie between
      [dst] and [dst+size-1]. *)
-  let (new_state,over_zone) =
-    if Int.gt size_max_bytes Int.zero then
-      let shift =
-        Ival.inject_range (Some Int.zero) (Some (Int.pred size_max_bytes))
-      in
-      let loc = Location_Bytes.shift shift dst in
-      let loc = loc_bytes_to_loc_bits loc in
-      let loc = make_loc loc (Int_Base.inject size_char) in
+  let state, over_zone =
+    if Int.gt size_max Int.zero then
+      let loc = char_location dst size_max in
       Cvalue_transfer.warn_imprecise_write ~prefix dst_lval loc v;
       let state = Cvalue.Model.add_binding ~exact:false state loc v in
-      (state,enumerate_valid_bits Locations.Write loc)
-    else (state,Zone.bottom)
+      let written_zone = enumerate_valid_bits Locations.Write loc in
+      state, written_zone
+    else state, Zone.bottom
   in
   (* Write "sure" bytes in an exact way: they exist only if there is only
      one base, and within it, size_min+leftmost_loc > rightmost_loc *)
-  let (new_state',sure_zone) =
+  let state, sure_zone =
     try
-      let base, offset = Location_Bits.find_lonely_key left in
+      let base, offset = Location_Bits.find_lonely_key dst in
       let minb, maxb = match Ival.min_and_max offset with
         | Some minb, Some maxb -> minb, maxb
         | _ -> raise Not_found
       in
       let sure = Int.sub (Int.add minb size_min) maxb in
       if Int.gt sure Int.zero then
-        let left' = Location_Bits.inject base (Ival.inject_singleton maxb) in
+        let dst_loc = Location_Bits.inject base (Ival.inject_singleton maxb) in
         let vuninit = V_Or_Uninitialized.initialized v in
-        let from = V_Offsetmap.create ~size:sure vuninit ~size_v:size_char in
+        let size_v = Bit_utils.sizeofchar () in
+        let from = V_Offsetmap.create ~size:sure vuninit ~size_v in
         Cvalue_transfer.warn_imprecise_offsm_write ~prefix dst_lval from;
         let state =
           Cvalue.Model.paste_offsetmap
-            ~from ~dst_loc:left' ~size:sure ~exact:true new_state
+            ~from ~dst_loc ~size:sure ~exact:true state
         in
-        let sure_loc = make_loc left' (Int_Base.inject sure) in
+        let sure_loc = make_loc dst_loc (Int_Base.inject sure) in
         let sure_zone = enumerate_valid_bits Locations.Write sure_loc in
-        (state,sure_zone)
+        state, sure_zone
       else
-        (new_state,Zone.bottom)
-    with Not_found -> (new_state,Zone.bottom) (* from find_lonely_key + explicit raise *)
-  in
-  let c_assigns =
-    let value_dep = deps_nth_arg 1 in
-    let memory = Assigns.Memory.empty in
-    let memory =
-      Assigns.Memory.add_binding ~exact:false memory over_zone value_dep
-    in
-    let memory =
-      Assigns.Memory.add_binding ~exact:true memory sure_zone value_dep
-    in
-    let deps_return = deps_nth_arg 0 in
-    Assigns.{ memory; return = deps_return }
+        state, Zone.bottom
+    with Not_found -> state, Zone.bottom (* from find_lonely_key + explicit raise *)
   in
-  Builtins.Full
-    { Builtins.c_values = [Some dst, new_state'];
-      c_clobbered = Base.SetLattice.bottom;
-      c_assigns = Some (c_assigns,sure_zone); }
-(* let () = register_builtin "Frama_C_memset" frama_c_memset_imprecise *)
+  state, sure_zone, over_zone
 
 (* Type that describes why the 'precise memset' builtin may fail. *)
 type imprecise_memset_reason =
@@ -394,23 +317,15 @@ type imprecise_memset_reason =
 
 exception ImpreciseMemset of imprecise_memset_reason
 
-let pretty_imprecise_memset_reason fmt = function
-  | UnsupportedType ->
-    Format.pp_print_string fmt "destination has an unknown type"
-  | ImpreciseTypeSize ->
-    Format.pp_print_string fmt "destination has a type with unknown size"
-  | NoTypeForDest ->
-    Format.pp_print_string fmt "destination has an unknown form"
-  | NotSingletonLoc ->
-    Format.pp_print_string fmt "destination is not exact"
-  | SizeMismatch ->
-    Format.pp_print_string fmt "destination type and size differ"
-  | ImpreciseValue ->
-    Format.pp_print_string fmt "value to write is imprecise"
-  | ImpreciseSize ->
-    Format.pp_print_string fmt "size is imprecise"
-  | NegativeOrNullSize ->
-    Format.pp_print_string fmt "size is negative or null"
+let imprecision_descr = function
+  | UnsupportedType -> "destination has an unknown type"
+  | ImpreciseTypeSize -> "destination has a type with unknown size"
+  | NoTypeForDest -> "destination has an unknown form"
+  | NotSingletonLoc -> "destination is not exact"
+  | SizeMismatch -> "destination type and size differ"
+  | ImpreciseValue -> "value to write is imprecise"
+  | ImpreciseSize -> "size is imprecise"
+  | NegativeOrNullSize -> "size is negative or null"
 
 
 (*  [memset_typ_offsm typ i] returns an offsetmap of size [sizeof(typ)]
@@ -539,24 +454,21 @@ let memset_typ_offsm typ v =
     precise abstract values. *)
 let frama_c_memset_precise state dst_lval dst v (exp_size, size) =
   try
-    let size_char = Bit_utils.sizeofchar () in
     (* We want an exact size, Otherwise, we can use the imprecise memset as a
        fallback *)
-    let isize = V.project_ival size in
-    let size = Ival.project_int isize in
-    let size_bits = Integer.mul size_char size in
+    let size = Ival.project_int size in
     (* Extract the location, check that it is precise. *)
-    if Location_Bytes.(is_bottom dst || not (cardinal_zero_or_one dst)) then
+    if Location_Bits.(is_bottom dst || not (cardinal_zero_or_one dst)) then
       raise (ImpreciseMemset NotSingletonLoc);
     if not (Int.gt size Int.zero) then
       raise (ImpreciseMemset NegativeOrNullSize);
     (* Now, try to find a type that matches [size]. *)
     let typ =
       (* If [exp_size] is a sizeof, use this type. *)
-      let rec find_sizeof e = match e.enode with
-        | SizeOf typ -> Some typ
-        | SizeOfE e -> Some (Cil.typeOf e)
-        | CastE (_, e) -> find_sizeof e
+      let rec find_sizeof e = match e with
+        | { origin = Exp { enode = SizeOf typ } } -> Some typ
+        | { origin = Exp { enode = SizeOfE e } } -> Some (Cil.typeOf e)
+        | { node = CastE (_, e) } -> find_sizeof e
         | _ -> None
       in
       match find_sizeof exp_size with
@@ -564,39 +476,22 @@ let frama_c_memset_precise state dst_lval dst v (exp_size, size) =
       | None ->
         (* No such luck. Use the base and the offset of [dst] to resynthesize
            a type *)
-        let base_dst, offset_dst = Location_Bytes.find_lonely_binding dst in
-        let offset_dst = Ival.project_int offset_dst in
-        let offset_dst_bits = Int.mul offset_dst size_char in
+        let base_dst, offset_dst = Location_Bits.find_lonely_binding dst in
+        let offset = Ival.project_int offset_dst in
         let vi_dst = Base.to_varinfo base_dst in
-        let mo = Bit_utils.MatchSize size_bits in
-        snd (Bit_utils.(find_offset vi_dst.vtype ~offset:offset_dst_bits mo))
+        let mo = Bit_utils.MatchSize size in
+        snd (Bit_utils.(find_offset vi_dst.vtype ~offset mo))
     in
     let offsm = memset_typ_offsm typ v in
-    let dst_loc = Locations.loc_bytes_to_loc_bits dst in
-    let (c_from,dst_zone) =
-      let input = deps_nth_arg 1 in
-      let size_bits = Integer.mul size (Bit_utils.sizeofchar ())in
-      let dst_location = Locations.make_loc dst_loc (Int_Base.Value size_bits) in
-      let dst_zone = Locations.(enumerate_valid_bits Write dst_location) in
-      let memory =
-        Assigns.Memory.add_binding ~exact:true
-          Assigns.Memory.empty dst_zone input
-      in
-      let return = deps_nth_arg 0 in
-      let c_from = Assigns.{ memory; return  } in
-      c_from,dst_zone
-    in
-    let _ = c_from in
     let prefix = "Builtin memset" in
     Cvalue_transfer.warn_imprecise_offsm_write ~prefix dst_lval offsm;
-    let state' =
+    let state =
       Cvalue.Model.paste_offsetmap
-        ~from:offsm ~dst_loc ~size:size_bits ~exact:true state
+        ~from:offsm ~dst_loc:dst ~size ~exact:true state
     in
-    Builtins.Full
-      { Builtins.c_values = [Some dst, state'];
-        c_clobbered = Base.SetLattice.bottom;
-        c_assigns = Some (c_from,dst_zone); }
+    let dst_location = Locations.make_loc dst (Int_Base.Value size) in
+    let dst_zone = Locations.(enumerate_valid_bits Write dst_location) in
+    state, dst_zone, dst_zone
   with
   | Bit_utils.NoMatchingOffset -> raise (ImpreciseMemset SizeMismatch)
   | Base.Not_a_C_variable -> raise (ImpreciseMemset NoTypeForDest)
@@ -608,11 +503,18 @@ let frama_c_memset_precise state dst_lval dst v (exp_size, size) =
 
 let frama_c_memset state actuals =
   match actuals with
-  | [(exp_dst, dst); (_, v); (exp_size, size)] ->
+  | [(dst_exp, dst_cvalue); (_, v); (exp_size, size_cvalue)] ->
     begin
-      let dst_lval = lval_of_address exp_dst in
+      let dst_lval = lval_of_address dst_exp in
+      let size =
+        try Cvalue.V.project_ival size_cvalue
+        with Cvalue.V.Not_based_on_null -> Ival.top (* TODO: use size_t *)
+      in
+      (* Convert locations and size into bits. *)
+      let size = Ival.scale (Bit_utils.sizeofchar ()) size in
+      let dst = Locations.loc_bytes_to_loc_bits dst_cvalue in
       (* Remove read-only destinations *)
-      let dst = V.filter_base (fun b -> not (Base.is_read_only b)) dst in
+      let dst = reduce_to_valid_loc dst size Locations.Write in
       (* Keep only the first byte of the value argument *)
       let _, v = Cvalue.V.extract_bits
           ~topify:Origin.Misalign_read
@@ -620,18 +522,78 @@ let frama_c_memset state actuals =
           ~size:(Int.of_int (Cil.bitsSizeOfInt IInt))
           v
       in
-      try frama_c_memset_precise state dst_lval dst v (exp_size, size)
-      with ImpreciseMemset reason ->
-        Self.debug ~dkey ~current:true
-          "Call to builtin precise_memset(%a) failed; %a%t"
-          Eva_utils.pretty_actuals actuals pretty_imprecise_memset_reason reason
-          Eva_utils.pp_callstack;
-        frama_c_memset_imprecise state dst_lval dst v size
+      let state, sure_output, over_output =
+        try frama_c_memset_precise state dst_lval dst v (exp_size, size)
+        with ImpreciseMemset reason ->
+          Self.debug ~dkey ~current:true
+            "Call to builtin precise_memset(%a) failed; %s%t"
+            Eva_utils.pretty_actuals actuals (imprecision_descr reason)
+            Eva_utils.pp_callstack;
+          frama_c_memset_imprecise state dst_lval dst v size
+      in
+      let assigns =
+        let value_dep = deps_nth_arg 1 in
+        let memory = Assigns.Memory.empty in
+        let memory =
+          Assigns.Memory.add_binding ~exact:false memory over_output value_dep
+        in
+        let memory =
+          Assigns.Memory.add_binding ~exact:true memory sure_output value_dep
+        in
+        let return = deps_nth_arg 0 in
+        Assigns.{ memory; return }
+      in
+      Builtins.Full
+        { Builtins.c_values = [ Some dst_cvalue, state ];
+          c_clobbered = Base.SetLattice.bottom;
+          c_assigns = Some (assigns, sure_output); }
     end
   | _ -> raise (Builtins.Invalid_nb_of_args 3)
 
 let () = register_builtin ~replace:"memset" "Frama_C_memset" frama_c_memset
 
+(* -------------------------------------------------------------------------- *)
+(*                  is_base_aligned, offset, split, ungarbled                 *)
+(* -------------------------------------------------------------------------- *)
+
+let frama_C_is_base_aligned _state = function
+  | [_, x; _, y] ->
+    let result =
+      match Ival.project_small_set (Cvalue.V.project_ival y) with
+      | Some si ->
+        let aligned =
+          Location_Bytes.for_all
+            (fun b _o -> List.for_all (Base.is_aligned_by b) si)
+            x
+        in
+        if aligned then Cvalue.V.singleton_one else Cvalue.V.zero_or_one
+      | None
+      | exception Cvalue.V.Not_based_on_null -> Cvalue.V.zero_or_one
+    in
+    Builtins.Result [result]
+  | _ -> raise (Builtins.Invalid_nb_of_args 2)
+
+let () = register_builtin "Frama_C_is_base_aligned" frama_C_is_base_aligned
+
+
+let frama_c_offset _state = function
+  | [_, x] ->
+    let result =
+      try
+        let acc = Ival.bottom in
+        let offsets = Location_Bytes.fold_i (fun _b -> Ival.join) x acc in
+        Cvalue.V.inject_ival offsets
+      with Abstract_interp.Error_Top ->
+        Self.error ~current:true
+          "Builtin Frama_C_offset is applied to a value not \
+           guaranteed to be an address";
+        Cvalue.V.top_int
+    in
+    Builtins.Result [result]
+  | _ -> raise (Builtins.Invalid_nb_of_args 1)
+
+let () = register_builtin "Frama_C_offset" frama_c_offset
+
 let frama_c_interval_split _state actuals =
   match actuals with
   | [_,lower; _,upper] ->
diff --git a/src/plugins/eva/domains/cvalue/builtins_memory.mli b/src/plugins/eva/domains/cvalue/builtins_memory.mli
index 02253229c2854d0228702f3c658324c27e6bd2f3..21dbc3a807c726e8e96e606f34ba79535268f8a3 100644
--- a/src/plugins/eva/domains/cvalue/builtins_memory.mli
+++ b/src/plugins/eva/domains/cvalue/builtins_memory.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_misc.ml b/src/plugins/eva/domains/cvalue/builtins_misc.ml
index 47d8da9c980db7c8e0dad4beb6625dd7aef98d90..08bedfdd74b4f1ab7c6a58730471800f49409c49 100644
--- a/src/plugins/eva/domains/cvalue/builtins_misc.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_misc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_misc.mli b/src/plugins/eva/domains/cvalue/builtins_misc.mli
index 7a5ee17902b47fdcb22ec3ae90cc9e7e6e2fa1bb..313c4d8d8f051befa0fe291f437e4915f8d2929f 100644
--- a/src/plugins/eva/domains/cvalue/builtins_misc.mli
+++ b/src/plugins/eva/domains/cvalue/builtins_misc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_print_c.ml b/src/plugins/eva/domains/cvalue/builtins_print_c.ml
index 9063b9332ea346cddcb0fb0d94664adf73cc92a1..27c0cda0d479108473ea937c193c86c52fe84b59 100644
--- a/src/plugins/eva/domains/cvalue/builtins_print_c.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_print_c.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_print_c.mli b/src/plugins/eva/domains/cvalue/builtins_print_c.mli
index 81ab3e0518023a4ed49b4dead392250e70dbf422..8c0358fadb6189856b13a2ebe2997507cd5973e8 100644
--- a/src/plugins/eva/domains/cvalue/builtins_print_c.mli
+++ b/src/plugins/eva/domains/cvalue/builtins_print_c.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_split.ml b/src/plugins/eva/domains/cvalue/builtins_split.ml
index a6a2cf2812a911993cd1ed76bfefdec413ca2933..e688ca723c4e4593178251c30ee536b508d59467 100644
--- a/src/plugins/eva/domains/cvalue/builtins_split.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_split.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,8 +20,7 @@
 (*                                                                        *)
 (**************************************************************************)
 
-
-open Cil_types
+open Eva_ast
 open Abstract_interp
 open Cvalue
 
@@ -73,7 +72,7 @@ let warning warn s =
    singleton location with an arithmetic type, and that it contains no more than
    [max_card] elements. *)
 let split_v ~warn lv state max_card =
-  if Cil.isArithmeticOrPointerType (Cil.typeOfLval lv) then
+  if Cil.isArithmeticOrPointerType lv.typ then
     let loc = Cvalue_queries.lval_to_loc state lv in
     if Locations.Location_Bits.cardinal_zero_or_one loc.Locations.loc then
       let v_indet = Cvalue.Model.find_indeterminate state loc in
@@ -96,26 +95,26 @@ let split_v ~warn lv state max_card =
           V.fold_enum aux_v v []
         with Not_less_than ->
           warning warn "Location %a points to too many values (%a). \
-                        Cannot split." Printer.pp_lval lv V.pretty v;
+                        Cannot split." Eva_ast.pp_lval lv V.pretty v;
           [state]
     else begin
       warning warn "Location %a is not a singleton (%a). Cannot split."
-        Printer.pp_lval lv Locations.pretty loc;
+        Eva_ast.pp_lval lv Locations.pretty loc;
       [state]
     end
   else begin
     warning warn "Cannot split on lvalue %a of non-arithmetic type"
-      Printer.pp_lval lv;
+      Eva_ast.pp_lval lv;
     [state]
   end
 
 (* For an lvalue '*p' or 'p->off', split the values of 'p'. Do not split
    anything else. *)
 let split_pointer ~warn lv state max_card =
-  match lv with
-  | (Mem {enode = Lval lv}, _) -> split_v ~warn lv state max_card
+  match lv.node with
+  | (Mem {node = Lval lv}, _) -> split_v ~warn lv state max_card
   | _ ->
-    warning warn "cannot split on non-pointer %a" Printer.pp_lval lv;
+    warning warn "cannot split on non-pointer %a" Eva_ast.pp_lval lv;
     [state]
 
 (** The three functions below gather all lvalues with integral type that appear
@@ -125,15 +124,15 @@ let split_pointer ~warn lv state max_card =
     examing 't[i]+1', as it is important to proceed by case analysis on 'i'
     first, then on 't[i]'. *)
 let rec gather_lv_in_exp acc e =
-  match e.enode with
-  | Const _ | SizeOf _  | SizeOfE _ | SizeOfStr _ | AlignOf _ | AlignOfE _ ->
-    acc
+  match e.node with
+  | Const _ -> acc
   | Lval lv | AddrOf lv | StartOf lv -> gather_lv_in_lv acc lv
   | UnOp (_, e, _) | CastE (_, e) -> gather_lv_in_exp acc e
   | BinOp (_, e1, e2, _) -> gather_lv_in_exp (gather_lv_in_exp acc e1) e2
-and gather_lv_in_lv acc (host, offset as lv) =
+and gather_lv_in_lv acc lv =
+  let (host, offset) = lv.node in
   let acc =
-    if Cil.isArithmeticOrPointerType (Cil.typeOfLval lv)
+    if Cil.isArithmeticOrPointerType lv.typ
     then lv :: acc
     else acc
   in
@@ -174,7 +173,7 @@ let split_all ~warn lv state max_card =
 (* Auxiliary function, used to register a 'Frama_C_split' variant. Only the
    parsing and the error handling is shared; all the hard work is done by [f] *)
 let aux_split f state = function
-  | [({ enode = (Lval lv | CastE (_, {enode = Lval lv}))}, _); (_, card)] ->
+  | [({ node = (Lval lv | CastE (_, {node = Lval lv}))}, _); (_, card)] ->
     let states =
       try
         let max_card =
diff --git a/src/plugins/eva/domains/cvalue/builtins_split.mli b/src/plugins/eva/domains/cvalue/builtins_split.mli
index 8ab15184fd07fb1da968be518302bc4124e2a18b..0b34db139077a203e030e528486f21db593ee181 100644
--- a/src/plugins/eva/domains/cvalue/builtins_split.mli
+++ b/src/plugins/eva/domains/cvalue/builtins_split.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_string.ml b/src/plugins/eva/domains/cvalue/builtins_string.ml
index 0c69e72b9e91f1cc5931566c506ea30389ddb044..6700057446dfe5eea01141f97a5b600266f55769 100644
--- a/src/plugins/eva/domains/cvalue/builtins_string.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_string.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_string.mli b/src/plugins/eva/domains/cvalue/builtins_string.mli
index 71e1b0059d78ec6f31e002cfd6154717e30f4b00..045236e2ce4a04b050e147cc060ef0610242570f 100644
--- a/src/plugins/eva/domains/cvalue/builtins_string.mli
+++ b/src/plugins/eva/domains/cvalue/builtins_string.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/builtins_watchpoint.ml b/src/plugins/eva/domains/cvalue/builtins_watchpoint.ml
index 695278f28d6f4ae42c1d87c4c3887acdce294c40..681a6d020c13bc97bea141be86e35fdf47e834d3 100644
--- a/src/plugins/eva/domains/cvalue/builtins_watchpoint.ml
+++ b/src/plugins/eva/domains/cvalue/builtins_watchpoint.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -32,7 +32,7 @@ let equal_watch w1 w2 =
   | _ -> false
 
 type watchpoint =
-  { name_lv : Cil_types.exp;
+  { name_lv : Eva_ast.exp;
     loc: Locations.location;
     v: watch;
     mutable remaining_count: Integer.t;
@@ -115,7 +115,7 @@ let watch_hook _callstack stmt states =
          then begin
            Self.warning ~wkey:Self.wkey_watchpoint ~once:true ~current:true
              "%a %a%t"
-             Printer.pp_exp name
+             Eva_ast.pp_exp name
              V.pretty vs
              Eva_utils.pp_callstack;
            if Integer.is_zero current ||
diff --git a/src/plugins/eva/domains/cvalue/builtins_watchpoint.mli b/src/plugins/eva/domains/cvalue/builtins_watchpoint.mli
index f86de25fce2fae6633bfe6e86253ed25cfe3b92a..dce623465cbe892d3c977d0de826f1f012fcdbeb 100644
--- a/src/plugins/eva/domains/cvalue/builtins_watchpoint.mli
+++ b/src/plugins/eva/domains/cvalue/builtins_watchpoint.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/cvalue_domain.ml b/src/plugins/eva/domains/cvalue/cvalue_domain.ml
index 2256c9652b170ad1159a604bd20ccb7c9ee87f3a..3cb9259625114eea4f6a438b91e6c95db39c842c 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_domain.ml
+++ b/src/plugins/eva/domains/cvalue/cvalue_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -33,6 +33,9 @@ module State = struct
   let value_dependencies = Main_values.cval
   let location_dependencies = Main_locations.ploc
 
+  type context = unit
+  let context_dependencies = Abstract_context.Leaf (module Unit_context)
+
   let log_category = Self.dkey_cvalue_domain
 
   include Datatype.Make_with_collections (
@@ -74,15 +77,17 @@ module State = struct
   let extract_expr ~oracle context (state, _) expr =
     Cvalue_queries.extract_expr ~oracle context state expr
 
-  let extract_lval ~oracle context (state, _) lval typ loc =
-    Cvalue_queries.extract_lval ~oracle context state lval typ loc
+  let extract_lval ~oracle context (state, _) lval loc =
+    Cvalue_queries.extract_lval ~oracle context state lval loc
 
-  let backward_location (state, _) lval typ precise_loc value =
-    Cvalue_queries.backward_location state lval typ precise_loc value
+  let backward_location (state, _) lval precise_loc value =
+    Cvalue_queries.backward_location state lval precise_loc value
 
   let reduce_further (state, _) expr value =
     Cvalue_queries.reduce_further state expr value
 
+  let build_context (state, _) = Cvalue_queries.build_context state
+
   (* ------------------------------------------------------------------------ *)
   (*                            Transfer Functions                            *)
   (* ------------------------------------------------------------------------ *)
diff --git a/src/plugins/eva/domains/cvalue/cvalue_domain.mli b/src/plugins/eva/domains/cvalue/cvalue_domain.mli
index 4b7278ecbdb48e8878d2c74c96f83681b96893ce..d4c2b7d5e8f526977b6b0f4660b8d50fc4fc7c78 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_domain.mli
+++ b/src/plugins/eva/domains/cvalue/cvalue_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/cvalue_init.ml b/src/plugins/eva/domains/cvalue/cvalue_init.ml
index 3936eb4560c5989713c2523c02953ac78edc02b8..798c8bdf5f85f3a334a4122befa57d06e4c1bb9e 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_init.ml
+++ b/src/plugins/eva/domains/cvalue/cvalue_init.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/cvalue_init.mli b/src/plugins/eva/domains/cvalue/cvalue_init.mli
index 2b552f1c497c9c5d5ab0d3f66db9870c0f63d486..88361732778cd51bc24e046ddb7060bb579122d2 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_init.mli
+++ b/src/plugins/eva/domains/cvalue/cvalue_init.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/cvalue_offsetmap.ml b/src/plugins/eva/domains/cvalue/cvalue_offsetmap.ml
index b2d0019e28ae7a67b2e5a6e58ccda40dd182d66f..3bb203a658eb1079da9d8e586249c9fb74f5366c 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_offsetmap.ml
+++ b/src/plugins/eva/domains/cvalue/cvalue_offsetmap.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -32,4 +32,4 @@ let offsetmap_of_assignment state expr = function
   | Copy (lv, _value) ->
     Bottom.non_bottom (Eval_op.offsetmap_of_loc lv.lloc state)
   | Assign value ->
-    offsetmap_of_v ~typ:(Cil.typeOf expr) value
+    offsetmap_of_v ~typ:expr.Eva_ast.typ value
diff --git a/src/plugins/eva/domains/cvalue/cvalue_offsetmap.mli b/src/plugins/eva/domains/cvalue/cvalue_offsetmap.mli
index 8e0119621709ef78e080b02d5a3af3a896e8e94f..eb0d07611b1f7e86f972407d5477d712c0f9db4f 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_offsetmap.mli
+++ b/src/plugins/eva/domains/cvalue/cvalue_offsetmap.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,12 +22,11 @@
 
 (** Auxiliary functions on cvalue offsetmaps, used by the cvalue domain. *)
 
-open Cil_types
 open Cvalue
 
 (** Computes the offsetmap for an assignment:
     - in case of a copy, extracts the offsetmap from the state;
     - otherwise, translates the value assigned into an offsetmap. *)
 val offsetmap_of_assignment:
-  Model.t -> exp -> (Precise_locs.precise_location, V.t) Eval.assigned ->
+  Model.t -> Eva_ast.exp -> (Precise_locs.precise_location, V.t) Eval.assigned ->
   V_Offsetmap.t
diff --git a/src/plugins/eva/domains/cvalue/cvalue_queries.ml b/src/plugins/eva/domains/cvalue/cvalue_queries.ml
index a39492a45942563e4e8cdaaa3368a8812ff5480f..2ee6847b25d290ca8c6aaf871a2303ea7572505b 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_queries.ml
+++ b/src/plugins/eva/domains/cvalue/cvalue_queries.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -23,6 +23,7 @@
 module Queries = struct
 
   type state = Cvalue.Model.t
+  type context = unit
   type value = Main_values.CVal.t
   type location = Main_locations.PLoc.location
 
@@ -44,6 +45,7 @@ module Queries = struct
     let status =
       if Cvalue.V.is_bottom (get_v v) then Alarmset.False else Alarmset.Unknown
     in
+    let lval = Eva_ast.to_cil_lval lval in
     match v with
     | C_uninit_noesc _ -> Alarmset.singleton ~status (Alarms.Uninitialized lval)
     | C_init_esc _     -> Alarmset.singleton ~status (Alarms.Dangling lval)
@@ -54,7 +56,7 @@ module Queries = struct
     | C_init_noesc _   -> Alarmset.none
 
 
-  let eval_one_loc state lval typ =
+  let eval_one_loc state lval =
     let eval_one_loc single_loc =
       let v = Cvalue.Model.find_indeterminate state single_loc in
       Cvalue.V_Or_Uninitialized.get_v v, indeterminate_alarms lval v
@@ -68,7 +70,7 @@ module Queries = struct
     in
     fun loc (acc_result, acc_alarms) ->
       let result, alarms = eval_one_loc loc in
-      let result = Cvalue_forward.make_volatile ~typ:typ result in
+      let result = Cvalue_forward.make_volatile ~typ:lval.typ result in
       Cvalue.V.join result acc_result, join_alarms acc_alarms alarms
 
   (* The zero singleton is shared between float and integer representations in
@@ -80,8 +82,8 @@ module Queries = struct
     | Cvalue.V.Top (bases, origin) -> Origin.register_read bases origin
     | _ -> ()
 
-  let extract_scalar_lval state lval typ loc =
-    let process_one_loc = eval_one_loc state lval typ in
+  let extract_scalar_lval state lval loc =
+    let process_one_loc = eval_one_loc state lval in
     let acc = Cvalue.V.bottom, None in
     let value, alarms = Precise_locs.fold process_one_loc loc acc in
     let alarms = match alarms with None -> Alarmset.none | Some a -> a in
@@ -89,9 +91,9 @@ module Queries = struct
        the same type as the read lvalue. In this case, we don't update the state
        with the new value stemming from the evaluation, even if it has been
        reduced, in order to not propagate incompatible type. *)
-    let incompatible_type = is_float value <> Cil.isFloatingType typ in
+    let incompatible_type = is_float value <> Cil.isFloatingType lval.typ in
     let origin = if incompatible_type then Some value else None in
-    let value = Cvalue_forward.reinterpret typ value in
+    let value = Cvalue_forward.reinterpret lval.typ value in
     read_garbled_mix value;
     if Cvalue.V.is_bottom value
     then `Bottom, alarms
@@ -99,7 +101,7 @@ module Queries = struct
 
   (* Imprecise version for aggregate types that cvalues are unable to precisely
      represent. The initialization alarms must remain sound, though. *)
-  let extract_aggregate_lval state lval _typ ploc =
+  let extract_aggregate_lval state lval ploc =
     let loc = Precise_locs.imprecise_location ploc in
     match loc.Locations.size with
     | Int_Base.Top -> `Value (Cvalue.V.top, None), Alarmset.all
@@ -115,19 +117,19 @@ module Queries = struct
         let v = if Cvalue.V.is_bottom v then `Bottom else `Value (v, None) in
         v, alarms
 
-  let extract_lval ~oracle:_ _context state lval typ loc =
-    if Cil.isArithmeticOrPointerType typ
-    then extract_scalar_lval state lval typ loc
-    else extract_aggregate_lval state lval typ loc
+  let extract_lval ~oracle:_ _context state lval loc =
+    if Cil.isArithmeticOrPointerType lval.Eva_ast.typ
+    then extract_scalar_lval state lval loc
+    else extract_aggregate_lval state lval loc
 
-  let backward_location state _lval typ precise_loc value =
+  let backward_location state lval precise_loc value =
     let size = Precise_locs.loc_size precise_loc in
     let upto = succ (Int_set.get_small_cardinal()) in
     let loc = Precise_locs.imprecise_location precise_loc in
     let eval_one_loc single_loc =
       let v = Cvalue.Model.find state single_loc in
-      let v = Cvalue_forward.make_volatile ~typ v in
-      Cvalue_forward.reinterpret typ v
+      let v = Cvalue_forward.make_volatile ~typ:lval.Eva_ast.typ v in
+      Cvalue_forward.reinterpret lval.typ v
     in
     let process_ival base ival (acc_loc, acc_val as acc) =
       let loc_bits = Locations.Location_Bits.inject base ival in
@@ -158,6 +160,7 @@ module Queries = struct
       `Value (Precise_locs.make_precise_loc loc ~size, value)
 
   let reduce_further _state _expr _value = []
+  let build_context _ = `Value ()
 end
 
 include Queries
@@ -181,10 +184,10 @@ module Domain = struct
   include Queries
 end
 
-include Evaluation.Make (Value) (Main_locations.PLoc) (Domain)
+include Evaluation.Make (Unit_context) (Value) (Main_locations.PLoc) (Domain)
 
 let lval_to_loc state lval =
   let eval, _alarms = lvaluate ~for_writing:false state lval in
   match eval with
   | `Bottom -> Locations.loc_bottom
-  | `Value (_valuation, ploc, _typ) -> Precise_locs.imprecise_location ploc
+  | `Value (_valuation, ploc) -> Precise_locs.imprecise_location ploc
diff --git a/src/plugins/eva/domains/cvalue/cvalue_queries.mli b/src/plugins/eva/domains/cvalue/cvalue_queries.mli
index e6f423f25439ab77a9e34a23988997122a5e948e..888d0325b39094e8af3575507d8a082f144ce144 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_queries.mli
+++ b/src/plugins/eva/domains/cvalue/cvalue_queries.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -23,15 +23,17 @@
 (** Implementation of domain queries for the cvalue domain. *)
 include Abstract_domain.Queries
   with type state = Cvalue.Model.t
+   and type context = unit
    and type value = Main_values.CVal.t
    and type location = Main_locations.PLoc.location
    and type origin = Main_values.CVal.t
 
 (** Evaluation engine specific to the cvalue domain. *)
 include Evaluation_sig.S with type state := state
+                          and type context := unit
                           and type value := value
                           and type loc := location
                           and type origin := origin
 
 (** Evaluates the location of a lvalue in a given cvalue state. *)
-val lval_to_loc: state -> Cil_types.lval -> Locations.location
+val lval_to_loc: state -> Eva_ast.lval -> Locations.location
diff --git a/src/plugins/eva/domains/cvalue/cvalue_results.ml b/src/plugins/eva/domains/cvalue/cvalue_results.ml
index ff5b3a59f72f9395d9e3f9c42973bdfdcecfc715..248fd6549eed830da6788d5dac30aa2e02e9cbd8 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_results.ml
+++ b/src/plugins/eva/domains/cvalue/cvalue_results.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/cvalue_results.mli b/src/plugins/eva/domains/cvalue/cvalue_results.mli
index a5c6b9be684c26b3710fd6346962243a0212e68d..f6ffde338888865db869b5e0d425fa27e1c0fc52 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_results.mli
+++ b/src/plugins/eva/domains/cvalue/cvalue_results.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/cvalue_transfer.ml b/src/plugins/eva/domains/cvalue/cvalue_transfer.ml
index bbe73b8013d315befd32c8bdf48195e8a6a8ce61..434a3ad2bac5d1e74ba62a18bfc6ffc633490358 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_transfer.ml
+++ b/src/plugins/eva/domains/cvalue/cvalue_transfer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,8 +20,8 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
+open Eva_ast
 
 type value = Main_values.CVal.t
 type origin = value
@@ -42,7 +42,7 @@ let warn_imprecise_value ?prefix lval value =
       let prefix = Option.fold ~none:"A" ~some:(fun s -> s ^ ": a") prefix in
       Self.warning ~wkey:Self.wkey_garbled_mix_write ~once:true ~current:true
         "@[%sssigning imprecise value to %a@ because of %s.@]%t"
-        prefix Printer.pp_lval lval (Origin.descr origin)
+        prefix Eva_ast.pp_lval lval (Origin.descr origin)
         Eva_utils.pp_callstack
   | _ -> ()
 
@@ -70,8 +70,7 @@ let warn_imprecise_offsm_write ?prefix lval offsm =
 (* ---------------------------------------------------------------------- *)
 
 let reduce valuation lval value t =
-  let typ = Cil.typeOfLval lval in
-  if Cil.typeHasQualifier "volatile" typ
+  if Cil.typeHasQualifier "volatile" lval.typ
   then t
   else
     match valuation.Abstract_domain.find_loc lval with
@@ -91,9 +90,9 @@ let is_smaller_value typ v1 v2 =
 (* Update the state according to a Valuation. *)
 let update valuation t =
   let process exp record t =
-    match exp.enode with
+    match exp.node with
     | Lval lv ->
-      if record.reductness = Reduced && Cil.isScalarType (Cil.typeOfLval lv)
+      if record.reductness = Reduced && Cil.isScalarType lv.typ
       then
         let {v; initialized; escaping} = record.value in
         let v = unbottomize v in
@@ -105,8 +104,7 @@ let update valuation t =
              abstract values to choose the best value to keep. *)
           match record.origin with
           | Some previous_v ->
-            let typ = Cil.typeOfLval lv in
-            if is_smaller_value typ v previous_v then v else previous_v
+            if is_smaller_value lv.typ v previous_v then v else previous_v
           | _ -> v
         in
         let value = Cvalue.V_Or_Uninitialized.make ~initialized ~escaping v in
@@ -120,11 +118,11 @@ let update valuation t =
 (*                              Assignments                               *)
 (* ---------------------------------------------------------------------- *)
 
-let write_abstract_value state (lval, loc, typ) assigned_value =
+let write_abstract_value state (lval, loc) assigned_value =
   let {v; initialized; escaping} = assigned_value in
   let value = unbottomize v in
   let value =
-    if Cil.typeHasQualifier "volatile" typ
+    if Cil.typeHasQualifier "volatile" lval.typ
     then Cvalue_forward.make_volatile value
     else value
   in
@@ -136,16 +134,16 @@ let write_abstract_value state (lval, loc, typ) assigned_value =
 exception Do_assign_imprecise_copy
 
 let copy_one_loc state left_lv right_lv =
-  let left_lval, left_loc, left_typ = left_lv
-  and _right_lval, right_loc, right_typ = right_lv in
+  let left_lval, left_loc = left_lv
+  and right_lval, right_loc = right_lv in
   (* top size is tested before this function is called, in which case
      the imprecise copy mode is used. *)
   let size = Int_Base.project right_loc.Locations.size in
   let right_loc = right_loc.Locations.loc in
   let offsetmap = Cvalue.Model.copy_offsetmap right_loc size state in
   let make_volatile =
-    Cil.typeHasQualifier "volatile" left_typ ||
-    Cil.typeHasQualifier "volatile" right_typ
+    Cil.typeHasQualifier "volatile" left_lval.typ ||
+    Cil.typeHasQualifier "volatile" right_lval.typ
   in
   match offsetmap with
   | `Bottom -> `Bottom
@@ -158,7 +156,7 @@ let copy_one_loc state left_lv right_lv =
           (Cvalue.V_Or_Uninitialized.map Cvalue_forward.make_volatile) offsm
       else offsm
     in
-    if not (Eval_typ.offsetmap_matches_type left_typ offsetmap) then
+    if not (Eval_typ.offsetmap_matches_type left_lval.typ offsetmap) then
       raise Do_assign_imprecise_copy;
     warn_imprecise_offsm_write left_lval offsetmap;
     `Value
@@ -169,20 +167,20 @@ let make_determinate value =
   { v = `Value value; initialized = true; escaping = false }
 
 let copy_right_lval state left_lv right_lv copied_value =
-  let lval, loc, typ = left_lv in
+  let lval, loc = left_lv in
   (* Size mismatch between left and right size, or imprecise size.
      This cannot be done by copies, but require a conversion *)
   let right_size = Main_locations.PLoc.size right_lv.lloc
   and left_size = Main_locations.PLoc.size loc in
   if not (Int_Base.equal left_size right_size) || Int_Base.is_top right_size
   then
-    fun loc -> write_abstract_value state (lval, loc, typ) copied_value
+    fun loc -> write_abstract_value state (lval, loc) copied_value
   else
     fun loc ->
       try
         let process right_loc acc =
-          let left_lv = lval, loc, typ
-          and right_lv = right_lv.lval, right_loc, right_lv.ltyp in
+          let left_lv = lval, loc
+          and right_lv = right_lv.lval, right_loc in
           match copy_one_loc state left_lv right_lv with
           | `Bottom -> acc
           | `Value state -> Cvalue.Model.join acc state
@@ -190,17 +188,17 @@ let copy_right_lval state left_lv right_lv copied_value =
         Precise_locs.fold process right_lv.lloc Cvalue.Model.bottom
       with
         Do_assign_imprecise_copy ->
-        write_abstract_value state (lval, loc, typ) copied_value
+        write_abstract_value state (lval, loc) copied_value
 
-let assign _stmt { lval; ltyp; lloc } _expr assigned valuation state =
+let assign _stmt { lval; lloc } _expr assigned valuation state =
   let state = update valuation state in
   let assign_one_loc =
     match assigned with
     | Assign value ->
       let assigned_value = make_determinate value in
-      fun loc -> write_abstract_value state (lval, loc, ltyp) assigned_value
+      fun loc -> write_abstract_value state (lval, loc) assigned_value
     | Copy (right_lv, copied_value) ->
-      copy_right_lval state (lval, lloc, ltyp) right_lv copied_value
+      copy_right_lval state (lval, lloc) right_lv copied_value
   in
   let aux_loc loc acc_state =
     let s = assign_one_loc loc in
@@ -220,7 +218,7 @@ let actualize_formals state arguments =
     let offsm =
       Cvalue_offsetmap.offsetmap_of_assignment state arg.concrete arg.avalue
     in
-    warn_imprecise_offsm_write (Cil.var arg.formal) offsm;
+    warn_imprecise_offsm_write (Eva_ast.Build.var arg.formal) offsm;
     Cvalue.Model.add_base (Base.of_varinfo arg.formal) offsm state
   in
   List.fold_left treat_one_formal state arguments
@@ -232,15 +230,14 @@ let finalize_call _stmt _call _recursion ~pre:_ ~post:state =
   `Value state
 
 let show_expr valuation state fmt expr =
-  match expr.enode with
+  match expr.node with
   | Lval lval | StartOf lval ->
     let loc = match valuation.Abstract_domain.find_loc lval with
       | `Value record -> record.loc
       | `Top -> assert false
     in
     let offsm = Bottom.non_bottom (Eval_op.offsetmap_of_loc loc state) in
-    let typ = Cil.typeOfLval lval in
-    Eval_op.pretty_offsetmap typ fmt offsm
+    Eval_op.pretty_offsetmap lval.typ fmt offsm
   | _ -> Format.fprintf fmt "%s" (Unicode.top_string ())
 
 
diff --git a/src/plugins/eva/domains/cvalue/cvalue_transfer.mli b/src/plugins/eva/domains/cvalue/cvalue_transfer.mli
index 0b16f6a3034fcd4378805815ffe1644c711e8dde..a4947d3c828cf1a03b01a8086b86d85df540fb29 100644
--- a/src/plugins/eva/domains/cvalue/cvalue_transfer.mli
+++ b/src/plugins/eva/domains/cvalue/cvalue_transfer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -36,13 +36,13 @@ include Abstract_domain.Transfer
     value [v] into location [loc] if one of them is overly imprecise. [lval] is
     the assigned lvalue, and [prefix] is an optional prefix to the warning. *)
 val warn_imprecise_write:
-  ?prefix:string -> Cil_types.lval -> Locations.location -> Cvalue.V.t -> unit
+  ?prefix:string -> Eva_ast.lval -> Locations.location -> Cvalue.V.t -> unit
 
 (** [warn_imprecise_offsm_write lval offsm] emits a warning about the assignment
     of offsetmap [offsm] if it contains an overly imprecise value. [lval] is the
     assigned lvalue, and [prefix] is an optional prefix to the warning. *)
 val warn_imprecise_offsm_write:
-  ?prefix:string -> Cil_types.lval -> Cvalue.V_Offsetmap.t -> unit
+  ?prefix:string -> Eva_ast.lval -> Cvalue.V_Offsetmap.t -> unit
 
 (*
 Local Variables:
diff --git a/src/plugins/eva/domains/cvalue/locals_scoping.ml b/src/plugins/eva/domains/cvalue/locals_scoping.ml
index afd70681b564287638238667bde0e910b012714f..85568b72c52150ed254bccf6d546d990bbf556be 100644
--- a/src/plugins/eva/domains/cvalue/locals_scoping.ml
+++ b/src/plugins/eva/domains/cvalue/locals_scoping.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/cvalue/locals_scoping.mli b/src/plugins/eva/domains/cvalue/locals_scoping.mli
index abaf168a64d782eb7106b29bde409b2099d48271..8b2958f26b6fd6635654497871aea05c631e6167 100644
--- a/src/plugins/eva/domains/cvalue/locals_scoping.mli
+++ b/src/plugins/eva/domains/cvalue/locals_scoping.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/domain_builder.ml b/src/plugins/eva/domains/domain_builder.ml
index 5eb36d90703a1f5f995033729a1874ff84f1121a..eff6e6bf4f08faeb91a6b8a884a060e26c43a8aa 100644
--- a/src/plugins/eva/domains/domain_builder.ml
+++ b/src/plugins/eva/domains/domain_builder.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -23,16 +23,24 @@
 open Cil_types
 open Eval
 
+
+
 module type InputDomain = sig
   include Datatype.S
   val top: t
   val join: t -> t -> t
 end
 
+
+
 module type LeafDomain = sig
   type t
 
-  val backward_location: t -> lval -> typ -> 'loc -> 'v -> ('loc * 'v) or_bottom
+  type context = unit
+  val context_dependencies: context Abstract_context.dependencies
+  val build_context: t -> context or_bottom
+
+  val backward_location: t -> lval -> 'loc -> 'v -> ('loc * 'v) or_bottom
   val reduce_further: t -> exp -> 'v -> (exp * 'v) list
 
   val evaluate_predicate:
@@ -61,9 +69,14 @@ module type LeafDomain = sig
   val key: t Abstract_domain.key
 end
 
+
 module Complete (Domain: InputDomain) = struct
 
-  let backward_location _state _lval _typ loc value = `Value (loc, value)
+  type context = unit
+  let context_dependencies = Abstract_context.Leaf (module Unit_context)
+  let build_context _ = `Value ()
+
+  let backward_location _state _lval loc value = `Value (loc, value)
   let reduce_further _state _expr _value = []
 
   let evaluate_predicate _env _state _predicate = Alarmset.Unknown
@@ -88,6 +101,8 @@ module Complete (Domain: InputDomain) = struct
     Structure.Key_Domain.create_key Domain.name
 end
 
+
+
 open Simpler_domains
 
 let simplify_argument argument =
@@ -100,6 +115,8 @@ let simplify_call call =
     rest = List.map fst call.Eval.rest;
     return = call.Eval.return; }
 
+
+
 module Make_Minimal
     (Value: Abstract_value.Leaf)
     (Location: Abstract_location.Leaf)
@@ -122,7 +139,7 @@ module Make_Minimal
 
   let top_answer = `Value (Value.top, None), Alarmset.all
   let extract_expr ~oracle:_ _context _state _expr = top_answer
-  let extract_lval ~oracle:_ _context _state _lval _typ _location = top_answer
+  let extract_lval ~oracle:_ _context _state _lval _location = top_answer
 
   let update _valuation state = `Value state
 
@@ -148,7 +165,7 @@ module Make_Minimal
     Domain.initialize_variable lval ~initialized value state
 
   let initialize_variable_using_type _kind varinfo state =
-    let lval = Cil.var varinfo in
+    let lval = Eva_ast.Build.var varinfo in
     Domain.initialize_variable lval ~initialized:true Abstract_domain.Top state
 
   let logic_assign _assigns _location _state = top
@@ -157,6 +174,7 @@ module Make_Minimal
 end
 
 
+
 module Complete_Minimal
     (Value: Abstract_value.Leaf)
     (Location: Abstract_location.Leaf)
@@ -238,8 +256,8 @@ module Complete_Simple_Cvalue (Domain: Simpler_domains.Simple_Cvalue)
       let v = Domain.extract_expr state expr >>-: fun v -> v, None in
       v, Alarmset.all
 
-    let extract_lval ~oracle:_ _context state lval typ location =
-      let v = Domain.extract_lval state lval typ location >>-: fun v -> v, None in
+    let extract_lval ~oracle:_ _context state lval location =
+      let v = Domain.extract_lval state lval location >>-: fun v -> v, None in
       v, Alarmset.all
 
     let find valuation expr =
@@ -277,7 +295,7 @@ module Complete_Simple_Cvalue (Domain: Simpler_domains.Simple_Cvalue)
       Domain.initialize_variable lval ~initialized value state
 
     let initialize_variable_using_type _kind varinfo state =
-      let lval = Cil.var varinfo in
+      let lval = Eva_ast.Build.var varinfo in
       Domain.initialize_variable lval ~initialized:true Abstract_domain.Top state
 
     let logic_assign _assigns _location _state = top
@@ -298,8 +316,11 @@ let unique_name =
     name ^ string_of_int !counter
 
 module Restrict
-    (Value: Abstract_value.S)
-    (Domain: Abstract.Domain.Internal with type value = Value.t)
+    (Context: Abstract_context.S)
+    (Value: Abstract_value.S with type context = Context.t)
+    (Domain: Abstract.Domain.Internal
+     with type context = Context.t
+      and type value = Value.t)
     (Scope: sig val functions: Domain_mode.function_mode list end)
 = struct
 
@@ -348,10 +369,15 @@ module Restrict
     Abstract.Domain.(Option ((Node (Domain.structure, Void)), default))
 
   type state = t
+  type context = Domain.context
   type value = Domain.value
   type location = Domain.location
   type origin = Domain.origin
 
+  let build_context = function
+    | None -> `Value Context.top
+    | Some (state, _mode) -> Domain.build_context state
+
   let get_state = function
     | None -> Domain.top
     | Some (state, _mode) -> state
@@ -422,16 +448,16 @@ module Restrict
     make_query default_query
       (fun s -> Domain.extract_expr ~oracle context s expr) state
 
-  let extract_lval ~oracle context state lval typ location =
+  let extract_lval ~oracle context state lval location =
     make_query
       default_query
-      (fun s -> Domain.extract_lval ~oracle context s lval typ location)
+      (fun s -> Domain.extract_lval ~oracle context s lval location)
       state
 
-  let backward_location state lval typ location value =
+  let backward_location state lval location value =
     make_query
       (`Value (location, value))
-      (fun s -> Domain.backward_location s lval typ location value)
+      (fun s -> Domain.backward_location s lval location value)
       state
 
   let reduce_further state expr value =
diff --git a/src/plugins/eva/domains/domain_builder.mli b/src/plugins/eva/domains/domain_builder.mli
index 2670a7e0b9e4d9a7169ff7cd8ed0dd114b61115e..b7d44a0cf730ef516e817fdd91a0ec4b0682daa9 100644
--- a/src/plugins/eva/domains/domain_builder.mli
+++ b/src/plugins/eva/domains/domain_builder.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -40,7 +40,11 @@ end
 module type LeafDomain = sig
   type t
 
-  val backward_location: t -> lval -> typ -> 'loc -> 'v -> ('loc * 'v) or_bottom
+  type context = unit
+  val context_dependencies: context Abstract_context.dependencies
+  val build_context: t -> context or_bottom
+
+  val backward_location: t -> lval -> 'loc -> 'v -> ('loc * 'v) or_bottom
   val reduce_further: t -> exp -> 'v -> (exp * 'v) list
 
   val evaluate_predicate:
@@ -76,7 +80,8 @@ module Complete_Minimal
     (Value: Abstract_value.Leaf)
     (Location: Abstract_location.Leaf)
     (Domain: Simpler_domains.Minimal)
-  : Abstract_domain.Leaf with type value = Value.t
+  : Abstract_domain.Leaf with type context = unit
+                          and type value = Value.t
                           and type location = Location.location
                           and type state = Domain.t
 
@@ -84,13 +89,15 @@ module Complete_Minimal_with_datatype
     (Value: Abstract_value.Leaf)
     (Location: Abstract_location.Leaf)
     (Domain: Simpler_domains.Minimal_with_datatype)
-  : Abstract_domain.Leaf with type value = Value.t
+  : Abstract_domain.Leaf with type context = unit
+                          and type value = Value.t
                           and type location = Location.location
                           and type state = Domain.t
 
 module Complete_Simple_Cvalue
     (Domain: Simpler_domains.Simple_Cvalue)
-  : Abstract_domain.Leaf with type value = Cvalue.V.t
+  : Abstract_domain.Leaf with type context = unit
+                          and type value = Cvalue.V.t
                           and type location = Precise_locs.precise_location
                           and type state = Domain.t
 
@@ -100,8 +107,13 @@ module Complete_Simple_Cvalue
    in the current function and in all functions called from it.
    See {!Domain_mode} for more details. *)
 module Restrict
-    (Value: Abstract_value.S)
-    (Domain: Abstract.Domain.Internal with type value = Value.t)
+    (Context: Abstract_context.S)
+    (Value: Abstract_value.S with type context = Context.t)
+    (Domain: Abstract.Domain.Internal
+     with type context = Context.t
+      and type value = Value.t)
     (_: sig val functions: Domain_mode.function_mode list end)
-  : Abstract.Domain.Internal with type value = Value.t
-                              and type location = Domain.location
+  : Abstract.Domain.Internal
+    with type context = Context.t
+     and type value = Value.t
+     and type location = Domain.location
diff --git a/src/plugins/eva/domains/domain_lift.ml b/src/plugins/eva/domains/domain_lift.ml
index e2b03d231689272d6d0d396b8c513bd7ee44f3be..9f09c83beec8acb9b4d8195ee38f7deb64648b82 100644
--- a/src/plugins/eva/domains/domain_lift.ml
+++ b/src/plugins/eva/domains/domain_lift.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -36,6 +36,7 @@ end
 
 module Make
     (Domain: Input_Domain)
+    (Ctx: Conversion with type internal := Domain.context)
     (Val: Conversion with type internal := Domain.value)
     (Loc: Conversion with type internal := Domain.location)
 = struct
@@ -47,6 +48,7 @@ module Make
 
   let log_category = Domain.log_category
 
+  type context = Ctx.extended
   type value = Val.extended
   type location = Loc.extended
   type origin = Domain.origin
@@ -56,16 +58,15 @@ module Make
     Domain.extract_expr ~oracle context state exp >>=: fun (value, origin) ->
     Val.extend value, origin
 
-  let extract_lval ~oracle context state lval typ loc =
+  let extract_lval ~oracle context state lval loc =
     let oracle exp = oracle exp >>=: Val.restrict in
     let loc = Loc.restrict loc in
-    Domain.extract_lval ~oracle context state lval typ loc
+    Domain.extract_lval ~oracle context state lval loc
     >>=: fun (value, origin) ->
     Val.extend value, origin
 
-  let backward_location state lval typ loc value =
-    Domain.backward_location
-      state lval typ (Loc.restrict loc) (Val.restrict value)
+  let backward_location state lval loc value =
+    Domain.backward_location state lval (Loc.restrict loc) (Val.restrict value)
     >>-: fun (loc, value) ->
     Loc.extend loc, Val.extend value
 
@@ -73,6 +74,10 @@ module Make
     let list = Domain.reduce_further state expr (Val.restrict value) in
     List.map (fun (e, v) -> e, Val.extend v) list
 
+  let build_context state =
+    let open Bottom.Operators in
+    let+ context = Domain.build_context state in
+    Ctx.extend context
 
   let lift_left left = { left with lloc = Loc.restrict left.lloc }
   let lift_flagged_value value =
diff --git a/src/plugins/eva/domains/domain_lift.mli b/src/plugins/eva/domains/domain_lift.mli
index 3528a975514e4b1583c11753597cee5f5bd83f95..21989482d579856ac2a2c77e43de03a4a26cace1 100644
--- a/src/plugins/eva/domains/domain_lift.mli
+++ b/src/plugins/eva/domains/domain_lift.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -34,9 +34,11 @@ end
 
 module Make
     (Domain: Input_Domain)
+    (Ctx: Conversion with type internal := Domain.context)
     (Val: Conversion with type internal := Domain.value)
     (Loc: Conversion with type internal := Domain.location)
   : Abstract.Domain.Internal with type state = Domain.state
+                              and type context = Ctx.extended
                               and type value = Val.extended
                               and type location = Loc.extended
                               and type origin = Domain.origin
diff --git a/src/plugins/eva/domains/domain_mode.ml b/src/plugins/eva/domains/domain_mode.ml
index 96ef22b5d8b826ef18f27336641e14bbb3621694..3c800ff42807d01173cd3c541a13f768f118b1af 100644
--- a/src/plugins/eva/domains/domain_mode.ml
+++ b/src/plugins/eva/domains/domain_mode.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/domain_mode.mli b/src/plugins/eva/domains/domain_mode.mli
index aea32621565517f788b6c5fc8939837fc52bd108..8c0d26c1bcd6d074a04eddecb49bcb8c0475c4b8 100644
--- a/src/plugins/eva/domains/domain_mode.mli
+++ b/src/plugins/eva/domains/domain_mode.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/domain_product.ml b/src/plugins/eva/domains/domain_product.ml
index 45b71568bd946df35b2042012551fa803f82b1b1..db19d57645346a7d30f8fa72822e1af7d2f2dae2 100644
--- a/src/plugins/eva/domains/domain_product.ml
+++ b/src/plugins/eva/domains/domain_product.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -27,14 +27,22 @@ let counter = ref 0
 let product_category = Self.register_category "domain_product"
 
 module Make
-    (Value: Abstract_value.S)
-    (Left:  Abstract.Domain.Internal with type value = Value.t)
-    (Right: Abstract.Domain.Internal with type value = Left.value
-                                      and type location = Left.location)
+    (Context  : Abstract_context.S)
+    (Value    : Abstract_value.S with type context = Context.t)
+    (Location : Abstract_location.S with type value = Value.t)
+    (Left  : Abstract.Domain.Internal
+     with type context = Context.t
+      and type value = Value.t
+      and type location = Location.location)
+    (Right : Abstract.Domain.Internal
+     with type context = Context.t
+      and type value = Value.t
+      and type location = Location.location)
 = struct
 
-  type value = Left.value
-  type location = Left.location
+  type context = Context.t
+  type value = Value.t
+  type location = Location.location
 
   type origin = {
     left:  reductness * Left.origin option;
@@ -95,15 +103,15 @@ module Make
       (Left.extract_expr ~oracle context left expr)
       (Right.extract_expr ~oracle context right expr)
 
-  let extract_lval ~oracle context (left, right) lval typ location =
+  let extract_lval ~oracle context (left, right) lval location =
     merge
-      (Left.extract_lval ~oracle context left lval typ location)
-      (Right.extract_lval ~oracle context right lval typ location)
+      (Left.extract_lval ~oracle context left lval location)
+      (Right.extract_lval ~oracle context right lval location)
 
-  let backward_location (left, right) lval typ loc value =
+  let backward_location (left, right) lval loc value =
     (* TODO: Loc.narrow *)
-    Left.backward_location left lval typ loc value >>- fun (loc, value1) ->
-    Right.backward_location right lval typ loc value >>- fun (loc, value2) ->
+    Left.backward_location left lval loc value >>- fun (loc, value1) ->
+    Right.backward_location right lval loc value >>- fun (loc, value2) ->
     Value.narrow value1 value2 >>-: fun value ->
     loc, value
 
@@ -112,6 +120,12 @@ module Make
       (Left.reduce_further left expr value)
       (Right.reduce_further right expr value)
 
+  let build_context (left, right) =
+    let open Lattice_bounds.Bottom.Operators in
+    let* left  = Left.build_context  left  in
+    let* right = Right.build_context right in
+    Context.narrow left right
+
   let lift_record side record =
     let origin = Option.map side record.origin in
     let reductness =
diff --git a/src/plugins/eva/domains/domain_product.mli b/src/plugins/eva/domains/domain_product.mli
index a18152fc1efe714122c613a280c6577516175643..7456288492853772fff15bf172a9c16a8beba271 100644
--- a/src/plugins/eva/domains/domain_product.mli
+++ b/src/plugins/eva/domains/domain_product.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -23,13 +23,22 @@
 val product_category: Self.category
 
 module Make
-    (Value: Abstract_value.S)
-    (Left:  Abstract.Domain.Internal with type value = Value.t)
-    (Right: Abstract.Domain.Internal with type value = Left.value
-                                      and type location = Left.location)
-  : Abstract.Domain.Internal with type value = Value.t
-                              and type location = Left.location
-                              and type state = Left.state * Right.state
+    (Context  : Abstract_context.S)
+    (Value    : Abstract_value.S with type context = Context.t)
+    (Location : Abstract_location.S with type value = Value.t)
+    (Left  : Abstract.Domain.Internal
+     with type context = Context.t
+      and type value = Value.t
+      and type location = Location.location)
+    (Right : Abstract.Domain.Internal
+     with type context = Context.t
+      and type value = Value.t
+      and type location = Location.location)
+  : Abstract.Domain.Internal
+    with type context = Context.t
+     and type value = Value.t
+     and type location = Location.location
+     and type state = Left.state * Right.state
 
 
 (*
diff --git a/src/plugins/eva/domains/domain_store.ml b/src/plugins/eva/domains/domain_store.ml
index bdd154a2625e347f634e11e9a5b5927ae2075a4d..c330724e3fa54efba50e795912d2571d671a43b0 100644
--- a/src/plugins/eva/domains/domain_store.ml
+++ b/src/plugins/eva/domains/domain_store.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/domain_store.mli b/src/plugins/eva/domains/domain_store.mli
index f8779d56e301db38200b1346aa25da495c684e9a..bd7edb3d8af0a2a7954c5fea183fd5d8a5cdc24b 100644
--- a/src/plugins/eva/domains/domain_store.mli
+++ b/src/plugins/eva/domains/domain_store.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/equality/equality.ml b/src/plugins/eva/domains/equality/equality.ml
index 6ed3acba4a71ee7709430b4202946b0db5cef1f2..0683f1f9a5dad31bec3f8488a539e158f0d2ecd0 100644
--- a/src/plugins/eva/domains/equality/equality.ml
+++ b/src/plugins/eva/domains/equality/equality.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -184,12 +184,12 @@ module Set = struct
   let pick_representative set =
     let choose elt (current, height) =
       let elt = HCE.to_exp elt in
-      let h = Eva_utils.height_expr elt in
+      let h = Eva_ast.height_exp elt in
       if h < height then (elt, h) else (current, height)
     in
     let head = HCESet.choose set in
     let current = HCE.to_exp head in
-    let height = Eva_utils.height_expr current in
+    let height = Eva_ast.height_exp current in
     fst (HCESet.fold choose (HCESet.remove head set) (current, height))
 
   (* Binds the terms of the [equality] to [equality] in the [map].
diff --git a/src/plugins/eva/domains/equality/equality.mli b/src/plugins/eva/domains/equality/equality.mli
index 6e7bcf74b551a2b41e9ffa757cdf99f7135697cd..bff3cdb7e61ed2f08c6317ea53c9aefef6783e09 100644
--- a/src/plugins/eva/domains/equality/equality.mli
+++ b/src/plugins/eva/domains/equality/equality.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,8 +22,6 @@
 
 (** Equalities between syntactic lvalues and expressions. *)
 
-open Cil_types
-
 type 'a trivial = Trivial | NonTrivial of 'a
 
 type 'a tree = Empty | Leaf of 'a | Node of 'a tree * 'a tree
@@ -120,7 +118,7 @@ module Set : sig
 
   (** [remove lval set] remove any expression [e] such that [lval] belongs to
       [syntactic_lval e] from the set of equalities [set]. *)
-  val remove : Hcexprs.kill_type -> lval -> t -> t
+  val remove : Hcexprs.kill_type -> Eva_ast.lval -> t -> t
 
   (** [unite (a, a_set) (b, b_set) map] unites [a] and [b] in [map].
       [a_set] must be equal to [syntactic_lval a],
diff --git a/src/plugins/eva/domains/equality/equality_domain.ml b/src/plugins/eva/domains/equality/equality_domain.ml
index 55affa63dc9a97b8759e9139264972c7e574d5c2..adf3a68221646a5e5ec2e086c1881840c05b88ec 100644
--- a/src/plugins/eva/domains/equality/equality_domain.ml
+++ b/src/plugins/eva/domains/equality/equality_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,7 +20,6 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
 
 type call_init_state =
@@ -127,7 +126,7 @@ module Internal = struct
 
   let pretty fmt (eqs, _, _) = Equality.Set.pretty fmt eqs
 
-  let pretty_debug fmt (eqs, deps, modified) =
+  let _pretty_debug fmt (eqs, deps, modified) =
     Format.fprintf fmt
       "@[<v>@[<hov 2>Eqs: %a@]@.@[<hov 2>Deps: %a@]@.@[<hov 2>Changed: %a@]@]"
       Equality.Set.pretty eqs Deps.pretty deps
@@ -176,19 +175,24 @@ let project (t, _, _) = t
 
 (* ------------------------- Abstract Domain -------------------------------- *)
 
-module Make
-    (Value : Abstract.Value.External)
-= struct
+module type Context = Abstract.Context.External
+module type Value = Abstract.Value.External
+
+module Make (Context : Context) (Value : Value with type context = Context.t) =
+struct
 
   include Internal
   include Store
 
   let get_cvalue = Value.get Main_values.CVal.key
 
+  type context = Context.t
   type value = Value.t
   type location = Precise_locs.precise_location
   type origin
 
+  let build_context _ = `Value Context.top
+
   let reduce_further (equalities, _, _) expr value =
     let atom = HCE.of_exp expr in
     match Equality.Set.find_option atom equalities with
@@ -196,7 +200,7 @@ module Make
       Equality.Equality.fold
         (fun atom acc ->
            let e = HCE.to_exp atom in
-           if Cil_datatype.ExpStructEq.equal e expr
+           if Eva_ast.Exp.equal e expr
            then acc else (e, value) :: acc)
         equality []
     | None -> []
@@ -236,11 +240,11 @@ module Make
     | None -> `Value (Value.top, None), Alarmset.all
 
   let extract_expr ~oracle _context (equalities, _, _) expr =
-    let expr = Cil.constFold true expr in
+    let expr = Eva_ast.const_fold expr in
     let atom_e = HCE.of_exp expr in
     coop_eval oracle equalities atom_e
 
-  let extract_lval ~oracle _context (equalities, _, _) lval _typ _location =
+  let extract_lval ~oracle _context (equalities, _, _) lval _location =
     let atom_lv = HCE.of_lval lval in
     coop_eval oracle equalities atom_lv
 
@@ -315,11 +319,11 @@ module Make
     | E _ -> assert false
     | LV lv ->
       let zone =
-        match lv with
+        match lv.node with
         | Var vi, NoOffset -> Locations.zone_of_varinfo vi
         | _ ->
-          let expr = Cil.dummy_exp (Lval lv) in
-          Eva_utils.zone_of_expr (find_loc valuation) expr
+          let expr = Eva_ast.Build.lval lv in
+          Eva_ast.zone_of_exp (find_loc valuation) expr
       in
       Deps.add lval zone deps
 
@@ -341,8 +345,8 @@ module Make
     | `Top -> false (* should not happen *)
     | `Value { value = { v } } -> is_singleton v
 
-  let expr_is_cardinal_zero_or_one_loc valuation e =
-    match e.enode with
+  let expr_is_cardinal_zero_or_one_loc valuation (e : Eva_ast.exp) =
+    match e.node with
     | Lval lv -> begin
         let loc = valuation.Abstract_domain.find_loc lv in
         match loc with
@@ -375,9 +379,9 @@ module Make
        the reevaluation of [right_expr] would reduce it incorrectly, by
        removing indeterminate flags without emitting alarms. *)
   let assign_eq left_lval right_expr value valuation state =
-    if Eval_typ.lval_contains_volatile left_lval ||
-       Eval_typ.expr_contains_volatile right_expr ||
-       not (Cil.isArithmeticOrPointerType (Cil.typeOfLval left_lval)) ||
+    if Eva_ast.lval_contains_volatile left_lval ||
+       Eva_ast.exp_contains_volatile right_expr ||
+       not (Cil.isArithmeticOrPointerType left_lval.typ) ||
        indeterminate_copy value
     then state
     else
@@ -397,12 +401,12 @@ module Make
     let left_loc = Precise_locs.imprecise_location left_value.lloc in
     let direct_left_zone = Locations.(enumerate_valid_bits Write left_loc) in
     let state = kill Hcexprs.Modified direct_left_zone state in
-    let right_expr = Cil.constFold true right_expr in
+    let right_expr = Eva_ast.const_fold right_expr in
     try
       let indirect_left_zone =
-        Eva_utils.indirect_zone_of_lval (find_loc valuation) left_value.lval
+        Eva_ast.indirect_zone_of_lval (find_loc valuation) left_value.lval
       and right_zone =
-        Eva_utils.zone_of_expr (find_loc valuation) right_expr
+        Eva_ast.zone_of_exp (find_loc valuation) right_expr
       in
       (* After an assignment lv = e, the equality [lv == eq] holds iff the value
          of [e] and the location of [lv] are not modified by the assignment,
@@ -427,7 +431,7 @@ module Make
         state
       else
         try
-          let left_value = Var arg.formal, NoOffset in
+          let left_value = Eva_ast.Build.var arg.formal in
           assign_eq left_value arg.concrete arg.avalue valuation state
         with Top_location -> state
     in
@@ -442,18 +446,18 @@ module Make
      reasoning. This is the case for equalities between 0. and -0., and
      between non-comparable pointers, so we need to skip such equalities. *)
   let assume _stmt expr positive valuation (eqs, deps, modified_zone as state) =
-    match positive, expr.enode with
+    match positive, (expr : Eva_ast.exp).node with
     | true,  BinOp (Eq, e1, e2, _)
     | false, BinOp (Ne, e1, e2, _) ->
       begin
         if not (is_safe_equality valuation e1 e2)
         then `Value state
         else
-          let e1 = Cil.constFold true e1
-          and e2 = Cil.constFold true e2 in
-          if Eval_typ.expr_contains_volatile e1
-          || Eval_typ.expr_contains_volatile e2
-          || not (Cil.isArithmeticOrPointerType (Cil.typeOf e1))
+          let e1 = Eva_ast.const_fold e1
+          and e2 = Eva_ast.const_fold e2 in
+          if Eva_ast.exp_contains_volatile e1
+          || Eva_ast.exp_contains_volatile e2
+          || not (Cil.isArithmeticOrPointerType e1.typ)
           || (expr_is_cardinal_zero_or_one_loc valuation e1 &&
               expr_cardinal_zero_or_one valuation e2)
           || (expr_is_cardinal_zero_or_one_loc valuation e2 &&
@@ -534,7 +538,7 @@ end
 module Functor = struct
   type location = Precise_locs.precise_location
   let location_dependencies = Main_locations.ploc
-  module Make (V : Abstract.Value.External) = Make (V)
+  module Make (C : Context) (V : Value with type context = C.t) = Make (C) (V)
 end
 
 let registered =
diff --git a/src/plugins/eva/domains/equality/equality_domain.mli b/src/plugins/eva/domains/equality/equality_domain.mli
index 0377a640734e4fa4da87efe9dc23f09ab37fa22b..aa35a9e332641fc8cfafabdfbb903fee8caa6aed 100644
--- a/src/plugins/eva/domains/equality/equality_domain.mli
+++ b/src/plugins/eva/domains/equality/equality_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -35,12 +35,13 @@ type t
 val key: t Abstract_domain.key
 val project: t -> Equality.Set.t
 
-module Make (Value : Abstract.Value.External) : sig
-  include Abstract_domain.S with type value = Value.t
-                             and type location = Precise_locs.precise_location
-                             and type state = t
+module type Context = Abstract.Context.External
+module type Value = Abstract.Value.External
 
-  val pretty_debug : Format.formatter -> t -> unit
-end
+module Make (Context : Context) (Value : Value with type context = Context.t) :
+  Abstract_domain.S with type context = Context.t
+                     and type value = Value.t
+                     and type location = Precise_locs.precise_location
+                     and type state = t
 
 val registered : Abstractions.Domain.registered
diff --git a/src/plugins/eva/domains/gauges/gauges_domain.ml b/src/plugins/eva/domains/gauges/gauges_domain.ml
index 06e3667bb18ef4bf9f6ade0094ddc3f9fe2f778c..ea16b89bfc9aa57e7ab2168fb6cbf5097ca05f48 100644
--- a/src/plugins/eva/domains/gauges/gauges_domain.ml
+++ b/src/plugins/eva/domains/gauges/gauges_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,7 +20,7 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
+open Eva_ast
 open Eval
 
 type function_calls =
@@ -547,7 +547,7 @@ module G = struct
         "λ" Bounds.pretty i.nb MC.pretty i.coeffs
 
   let pretty_loop_step fmt (stmt, ii) =
-    Format.fprintf fmt "s%d: %a" stmt.sid pretty_iteration_info ii
+    Format.fprintf fmt "s%d: %a" stmt.Cil_types.sid pretty_iteration_info ii
 
   let pretty_loop_info =
     Pretty_utils.pp_list ~pre:"@[<v>" ~suf:"@]" ~sep:"@ " pretty_loop_step
@@ -768,7 +768,7 @@ module G = struct
   (* This function returns [true] if [vi] _may_ be tracked. Variables for
      which we return [false] will never be part of a state. *)
   let tracked_variable vi =
-    Cil.isIntegralOrPointerType vi.vtype &&
+    Cil.isIntegralOrPointerType vi.Cil_types.vtype &&
     (match function_calls_handling with
      | FullInterprocedural -> true
      | IntraproceduralAll -> not vi.vglob
@@ -993,31 +993,30 @@ module G = struct
 
   let translate_exp state to_loc to_v e =
     let ptr_size e =
-      let typ_pointed = Cil.typeOf_pointed (Cil.typeOf e) in
+      let typ_pointed = Cil.typeOf_pointed e.typ in
       try Integer.of_int (Cil.bytesSizeOf typ_pointed)
       with Cil.SizeOfError _ -> raise Untranslatable
     in
     (* This function translates the expression as a precise gauge. For any
        expression that cannot be handled, [Untranslatable] is raised. *)
     let rec aux_gauge e =
-      match e.enode with
-      | Const _ | SizeOf _ | SizeOfE _  | SizeOfStr _ | AlignOf _ | AlignOfE _
-      | AddrOf _ | StartOf _ ->
+      match e.node with
+      | Const _ | AddrOf _ | StartOf _ ->
         raise Untranslatable (* constant: using linearization directly *)
 
       | CastE (typ_dst ,e) ->
         fits_in_type ~is_cast:true typ_dst (aux e)
 
       | Lval lv ->
-        let b = loc_to_base (to_loc lv) (Cil.typeOfLval lv) in
+        let b = loc_to_base (to_loc lv) lv.typ in
         gauge_from_state b state
 
       | UnOp (Neg , e, _) ->
-        fits_in_type (Cil.typeOf e) (Gauge.neg (aux e))
+        fits_in_type e.typ (Gauge.neg (aux e))
 
       | UnOp ((BNot | LNot) ,_,_) -> raise Untranslatable
 
-      | BinOp (op, e1, e2, _) -> aux_binop (Cil.typeOf e) op e1 e2
+      | BinOp (op, e1, e2, _) -> aux_binop e.typ op e1 e2
 
     and aux_binop typ_res op e1 e2 =
       let g = match op with
@@ -1097,7 +1096,7 @@ module G = struct
   let assign to_loc to_v lv e state =
     let loc = to_loc lv in
     try
-      let b = loc_to_base loc (Cil.typeOfLval lv) in
+      let b = loc_to_base loc lv.typ in
       let g = translate_exp state to_loc to_v e in
       store_gauge b g state
     with Untranslatable ->
@@ -1155,14 +1154,14 @@ module D : Abstract_domain.Leaf
 
   let assume_exp valuation e r state =
     if r.reductness = Created || r.reductness = Reduced then
-      match e.enode with
+      match e.node with
       | Lval lv -> begin
           match valuation.Abstract_domain.find_loc lv with
           | `Top -> `Value state
           | `Value {loc} ->
             let loc = Precise_locs.imprecise_location loc in
             try
-              let b = loc_to_base loc (Cil.typeOfLval lv) in
+              let b = loc_to_base loc lv.typ in
               match r.value.v with
               | `Bottom -> `Value state
               | `Value v ->
@@ -1258,10 +1257,10 @@ module D : Abstract_domain.Leaf
   let extract_expr ~oracle:_ _context _state _exp =
     `Value (Cvalue.V.top, None), Alarmset.all
 
-  let extract_lval ~oracle:_ _context state _lv typ loc =
+  let extract_lval ~oracle:_ _context state lv loc =
     let v =
       try
-        let b = loc_to_base (Precise_locs.imprecise_location loc) typ in
+        let b = loc_to_base (Precise_locs.imprecise_location loc) lv.typ in
         match extract_gauge state b with
         | Some g -> eval_gauge state g
         | None -> Cvalue.V.top
diff --git a/src/plugins/eva/domains/gauges/gauges_domain.mli b/src/plugins/eva/domains/gauges/gauges_domain.mli
index 983f0e20782b78886d6e3578ab8ba5e96c1840dd..66d3159205539d28ad212579cc0281bc983ac789 100644
--- a/src/plugins/eva/domains/gauges/gauges_domain.mli
+++ b/src/plugins/eva/domains/gauges/gauges_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/hcexprs.ml b/src/plugins/eva/domains/hcexprs.ml
index c9a1d48b3bff48020d873f1a3880afec570b8506..b67b7b20813f6eda0150a2a51e00664247fea7d2 100644
--- a/src/plugins/eva/domains/hcexprs.ml
+++ b/src/plugins/eva/domains/hcexprs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,22 +20,8 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
-
-(* The default comparison of Cil_datatype does not distinguish constants
-   with different textual representations in the source code when they
-   represent the same value.
-   However, when option -eva-all-rounding-modes-constants is enabled, the
-   evaluation of floating-point constants may differ according to their
-   textual representation: when the constant is not exactly representable in the
-   floating-point type, an interval is used instead of the nearest singleton
-   value. In this case, two constants with the same nearest value but different
-   textual representation may not be equal. We thus use the [compare_strict]
-   comparison, which also compares the textual representation of constants. *)
-
-module Exp = Cil_datatype.ExpStructEqStrict
-
-module Lval = Cil_datatype.LvalStructEqStrict
+module Exp = Eva_ast.Exp
+module Lval = Eva_ast.Lval
 
 (* lvalues are never stored under a constructor [E]. *)
 type unhashconsed_exprs = E of Exp.t | LV of Lval.t
@@ -55,7 +41,7 @@ module E = struct
 
       type t = unhashconsed_exprs
       let name = "Value.Symbolic_exprs.key"
-      let reprs = [ E Cil_datatype.Exp.dummy ]
+      let reprs = List.map (fun e -> E e) Exp.reprs
 
       let structural_descr =
         Structural_descr.t_sum
@@ -83,24 +69,20 @@ module E = struct
       let copy c = c
     end)
 
-  let replace_visitor kind ~late ~heir = object
-    inherit Visitor.frama_c_copy (Project.current ())
-
-    method! vexpr expr =
-      match expr.enode with
+  let replace kind ~late ~heir =
+    let open Eva_ast.Rewrite in
+    let rewrite_exp ~visitor (exp : Eva_ast.exp) =
+      match exp.node with
       | Lval lval ->
-        if Lval.equal lval late then Cil.ChangeTo heir else Cil.JustCopy
+        if Lval.equal lval late then heir else exp
       | StartOf lval | AddrOf lval ->
         if kind = Modified
-        then Cil.JustCopy
-        else if Lval.equal lval late then raise NonExchangeable else Cil.JustCopy
-      | AlignOfE _ -> raise NonExchangeable
-      | _ -> Cil.DoChildren
-  end
-
-  let replace kind ~late ~heir expr =
-    let visitor = replace_visitor kind ~late ~heir in
-    Visitor.visitFramacExpr visitor expr
+        then exp
+        else if Lval.equal lval late then raise NonExchangeable else exp
+      | _ -> default.rewrite_exp ~visitor exp
+    in
+    let rewriter = { default with rewrite_exp } in
+    Eva_ast.Rewrite.visit_exp rewriter
 end
 
 module HCE = struct
@@ -118,14 +100,14 @@ module HCE = struct
 
   let of_lval lv = hashcons (LV lv)
 
-  let of_exp exp =
-    match exp.enode with
+  let of_exp (exp : Eva_ast.exp) =
+    match exp.node with
     | Lval lv -> of_lval lv
     | _ -> hashcons (E exp)
 
   let to_exp h = match get h with
     | E e -> e
-    | LV lv -> Eva_utils.lval_to_exp lv
+    | LV lv -> Eva_ast.Build.lval lv
 
   let to_lval h = match get h with
     | E _ -> None
@@ -136,13 +118,13 @@ module HCE = struct
     | LV _ -> true
 
   let type_of h = match get h with
-    | E e -> Cil.typeOf e
-    | LV lv -> Cil.typeOfLval lv
+    | E e -> e.typ
+    | LV lv -> lv.typ
 
   let replace kind ~late ~heir h = match get h with
     | E e ->
       let e = E.replace kind ~late ~heir e in
-      if Eva_utils.height_expr e > height_limit
+      if Eva_ast.height_exp e > height_limit
       then raise NonExchangeable
       else of_exp e
     | LV lval -> if Lval.equal lval late then of_exp heir else h
@@ -159,17 +141,12 @@ type lvalues = {
 let empty_lvalues = { read = HCESet.empty; addr = HCESet.empty; }
 
 let syntactic_lvalues expr =
-  let rec gather expr lvalues =
-    match expr.enode with
+  let rec gather (expr : Eva_ast.exp) lvalues =
+    match expr.node with
     | Lval lv ->
       { lvalues with read = HCESet.add (HCE.of_lval lv) lvalues.read }
     | AddrOf lv | StartOf lv ->
       { lvalues with addr = HCESet.add (HCE.of_lval lv) lvalues.addr }
-    | AlignOfE e | SizeOfE e ->
-      (* The lvalues appearing in [e] are not read, and must all be in addr. *)
-      let new_lvalues = gather e empty_lvalues in
-      let new_addr = HCESet.union new_lvalues.read new_lvalues.addr in
-      { lvalues with addr = HCESet.union new_addr lvalues.addr }
     | UnOp (_, e, _) | CastE (_, e) -> gather e lvalues
     | BinOp (_, e1, e2, _) -> gather e1 (gather e2 lvalues)
     | _ -> lvalues
diff --git a/src/plugins/eva/domains/hcexprs.mli b/src/plugins/eva/domains/hcexprs.mli
index 5d346bdf9de93bb74d7a49d098f6779b0033bd4f..0b65e6e224e4ef934e90f4bc6462398b6fecce50 100644
--- a/src/plugins/eva/domains/hcexprs.mli
+++ b/src/plugins/eva/domains/hcexprs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,9 +22,7 @@
 
 (** Hash-consed expressions and lvalues. *)
 
-open Cil_types
-
-type unhashconsed_exprs = private E of exp | LV of lval
+type unhashconsed_exprs = private E of Eva_ast.exp | LV of Eva_ast.lval
 (** lvalues are never stored under a constructor [E], only [LV] *)
 
 (** Raised when the replacement of an lvalue in an expression is impossible. *)
@@ -48,18 +46,18 @@ module HCE: sig
 
   (** Conversions between type [t] and Cil lvalues and expressions. *)
 
-  val of_lval: lval -> t
-  val of_exp: exp -> t
+  val of_lval: Eva_ast.lval -> t
+  val of_exp: Eva_ast.exp -> t
 
   val get: t -> unhashconsed_exprs
-  val to_exp: t -> exp
-  val to_lval: t -> lval option
+  val to_exp: t -> Eva_ast.exp
+  val to_lval: t -> Eva_ast.lval option
   val is_lval: t -> bool
-  val type_of: t -> typ
+  val type_of: t -> Cil_types.typ
 
   (** Replaces all occurrences of the lvalue [late] by the expression [heir].
       @raise NonExchangeable if the replacement is not feasible. *)
-  val replace: kill_type -> late:lval -> heir:exp -> t -> t
+  val replace: kill_type -> late:Eva_ast.lval -> heir:Eva_ast.exp -> t -> t
 end
 
 
@@ -84,7 +82,7 @@ val empty_lvalues: lvalues
     removed. This function only computes the first lvalues of the expression,
     and does not go through the lvalues (for the expression t[i]+1, only the
     lvalue t[i] is returned). *)
-val syntactic_lvalues: Cil_types.exp -> lvalues
+val syntactic_lvalues: Eva_ast.exp -> lvalues
 
 
 (** Maps from symbolic expressions to their memory dependencies, expressed as a
diff --git a/src/plugins/eva/domains/inout_domain.ml b/src/plugins/eva/domains/inout_domain.ml
index efcc0bea2fa83a0dd44d5bee81583c8b08811b5f..0b2f3dd185bff2798bfbe6afaa380376fe1e123e 100644
--- a/src/plugins/eva/domains/inout_domain.ml
+++ b/src/plugins/eva/domains/inout_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -162,7 +162,7 @@ module Transfer = struct
      in [e] into locations. Nothing is written, the memory locations
      present in [e] are read. *)
   let effects_assume to_z e =
-    let inputs = Eva_utils.zone_of_expr to_z e in
+    let inputs = Eva_ast.zone_of_exp to_z e in
     {
       over_outputs = Zone.bottom;
       over_inputs = inputs;
@@ -173,8 +173,8 @@ module Transfer = struct
   (* Effects of an assigment [lv = e]. [to_z] converts the lvalues present
      in [lv] and [e] into locations. *)
   let effects_assign to_z lv e =
-    let inputs_e = Eva_utils.zone_of_expr to_z e in
-    let inputs_lv = Eva_utils.indirect_zone_of_lval to_z lv.Eval.lval in
+    let inputs_e = Eva_ast.zone_of_exp to_z e in
+    let inputs_lv = Eva_ast.indirect_zone_of_lval to_z lv.Eval.lval in
     let inputs = Zone.join inputs_e inputs_lv in
     let outputs =
       Precise_locs.enumerate_valid_bits Locations.Write lv.Eval.lloc
@@ -263,7 +263,7 @@ module Domain = struct
   let top_query = `Value (Cvalue.V.top, None), Alarmset.all
 
   let extract_expr ~oracle:_ _context _state _expr = top_query
-  let extract_lval ~oracle:_ _context _state _lv _typ _locs = top_query
+  let extract_lval ~oracle:_ _context _state _lv _locs = top_query
 end
 
 include Domain
diff --git a/src/plugins/eva/domains/inout_domain.mli b/src/plugins/eva/domains/inout_domain.mli
index 64bcde166216da9461af294e60d7be5be634d00a..ab4f46657d572891cb2c4619892df12120b7c63b 100644
--- a/src/plugins/eva/domains/inout_domain.mli
+++ b/src/plugins/eva/domains/inout_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/abstract_memory.ml b/src/plugins/eva/domains/multidim/abstract_memory.ml
index 4bd0c7a63f8d1d6b10f6025dcfc7db27ea66e488..a21015dba02deeac52e113df92935de95bc77e08 100644
--- a/src/plugins/eva/domains/multidim/abstract_memory.ml
+++ b/src/plugins/eva/domains/multidim/abstract_memory.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -157,7 +157,7 @@ end
 
 type size = Integer.t
 type side = Left | Right
-type oracle = Cil_types.exp -> Int_val.t
+type oracle = Eva_ast.exp -> Int_val.t
 type bioracle = side -> oracle
 
 module type ProtoMemory =
@@ -190,5 +190,5 @@ sig
   val incr_bound : oracle:oracle -> Cil_types.varinfo -> Integer.t option ->
     t -> t
   val add_segmentation_bounds : oracle:oracle -> typ:Cil_types.typ ->
-    Cil_types.exp list -> t -> t
+    Eva_ast.exp list -> t -> t
 end
diff --git a/src/plugins/eva/domains/multidim/abstract_memory.mli b/src/plugins/eva/domains/multidim/abstract_memory.mli
index d321fe21c9057fb7d54f88b9d099c04fad7baee0..620d0e4a62113e42860116bd6472f7c9371b3019 100644
--- a/src/plugins/eva/domains/multidim/abstract_memory.mli
+++ b/src/plugins/eva/domains/multidim/abstract_memory.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -62,7 +62,7 @@ type size = Integer.t
 
 (* Oracles for memory abstraction *)
 type side = Left | Right
-type oracle = Cil_types.exp -> Int_val.t
+type oracle = Eva_ast.exp -> Int_val.t
 type bioracle = side -> oracle
 
 (* Early stage of memory abstraction building *)
@@ -96,5 +96,5 @@ sig
   val incr_bound : oracle:oracle -> Cil_types.varinfo -> Integer.t option ->
     t -> t
   val add_segmentation_bounds : oracle:oracle -> typ:Cil_types.typ ->
-    Cil_types.exp list -> t -> t
+    Eva_ast.exp list -> t -> t
 end
diff --git a/src/plugins/eva/domains/multidim/abstract_offset.ml b/src/plugins/eva/domains/multidim/abstract_offset.ml
index 010f2d4856a559f0b6edf825efe2f730c42534ae..c674bcdd542c506ccfb046c88409a2a004936ec7 100644
--- a/src/plugins/eva/domains/multidim/abstract_offset.ml
+++ b/src/plugins/eva/domains/multidim/abstract_offset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -25,7 +25,7 @@ open Top.Operators
 
 type t =
   | NoOffset of Cil_types.typ
-  | Index of Cil_types.exp option * Int_val.t * Cil_types.typ * t
+  | Index of Eva_ast.exp option * Int_val.t * Cil_types.typ * t
   | Field of Cil_types.fieldinfo * t
 
 let rec pretty fmt = function
@@ -37,7 +37,7 @@ let rec pretty fmt = function
       pretty s
   | Index (Some e, i, _t, s) ->
     Format.fprintf fmt "[%a∈%a]%a"
-      Cil_printer.pp_exp e
+      Eva_ast.pp_exp e
       Int_val.pretty i
       pretty s
 
@@ -59,14 +59,12 @@ let add_index oracle base exp =
       Field (fi, sub')
     | Index (e, i, t, (NoOffset _ as sub)) ->
       let idx' = Int_val.add i (oracle exp) in
-      let loc = Cil_datatype.Location.unknown in
       let e = match e with (* If i is singleton, we can use this as the index expression *)
         | None when Int_val.is_singleton i ->
-          let loc = Cil_datatype.Location.unknown in
-          Some (Cil.kinteger64 ~loc (Int_val.project_int i))
+          Some (Eva_ast.Build.integer ~ikind:IInt (Int_val.project_int i))
         | e -> e
       in
-      let e' = Option.map (Fun.flip (Cil.mkBinOp ~loc Cil_types.PlusA) exp) e in
+      let e' = Option.map (fun e -> Eva_ast.Build.(add e exp)) e in
       (* TODO: is idx inside bounds ? *)
       `Value (Index (e', idx', t, sub))
     | Index (e, i, t, sub) ->
@@ -87,7 +85,7 @@ let rec join o1 o2 =
   | Index (e1, i1, t, sub1), Index (e2, i2, t', sub2)
     when Bit_utils.type_compatible t t' ->
     let e = match e1, e2 with
-      | Some e1, Some e2 when Cil_datatype.ExpStructEq.equal e1 e2 ->
+      | Some e1, Some e2 when Eva_ast.Exp.equal e1 e2 ->
         Some e1 (* keep expression only when equivalent from both offsets *)
       | _ -> None
     in
@@ -118,20 +116,20 @@ let assert_valid_index idx size =
 let of_var_address vi =
   NoOffset vi.Cil_types.vtype
 
-let rec of_cil_offset oracle base_typ = function
-  | Cil_types.NoOffset -> `Value (NoOffset base_typ)
+let rec of_eva_offset (oracle : Eva_ast.exp -> Int_val.t) base_typ = function
+  | Eva_ast.NoOffset -> `Value (NoOffset base_typ)
   | Field (fi, sub) ->
     if Cil.typeHasQualifier "volatile" fi.ftype then
       `Top
     else
-      let+ sub' = of_cil_offset oracle fi.ftype sub in
+      let+ sub' = of_eva_offset oracle fi.ftype sub in
       Field (fi, sub')
   | Index (exp, sub) ->
     match Cil.unrollType base_typ with
     | TArray (elem_typ, array_size, _) ->
       let idx = oracle exp in
       let+ () = assert_valid_index idx array_size
-      and+ sub' = of_cil_offset oracle elem_typ sub in
+      and+ sub' = of_eva_offset oracle elem_typ sub in
       Index (Some exp, idx, elem_typ, sub')
     | _ -> assert false
 
@@ -248,7 +246,7 @@ let references =
     | NoOffset _ -> acc
     | Field (_, sub) | Index (None, _, _, sub) -> aux acc sub
     | Index (Some e, _, _, sub) ->
-      let r = Cil.extract_varinfos_from_exp e in
+      let r = Eva_ast.vars_in_exp e in
       let acc = Cil_datatype.Varinfo.Set.union r acc in
       aux acc sub
   in
diff --git a/src/plugins/eva/domains/multidim/abstract_offset.mli b/src/plugins/eva/domains/multidim/abstract_offset.mli
index 26d024bdc54e753c8e939069b3056b42db5eccc9..5d6f165991bb8171a0b02f1b3936a896aa96119f 100644
--- a/src/plugins/eva/domains/multidim/abstract_offset.mli
+++ b/src/plugins/eva/domains/multidim/abstract_offset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -24,14 +24,14 @@ open Lattice_bounds
 
 type t =
   | NoOffset of Cil_types.typ
-  | Index of Cil_types.exp option * Int_val.t * Cil_types.typ * t
+  | Index of Eva_ast.exp option * Int_val.t * Cil_types.typ * t
   | Field of Cil_types.fieldinfo * t
 
 val pretty : Format.formatter -> t -> unit
 
 val of_var_address : Cil_types.varinfo -> t
-val of_cil_offset : (Cil_types.exp -> Int_val.t) ->
-  Cil_types.typ -> Cil_types.offset -> t or_top
+val of_eva_offset : (Eva_ast.exp -> Int_val.t) ->
+  Cil_types.typ -> Eva_ast.offset -> t or_top
 val of_ival : base_typ:Cil_types.typ -> typ:Cil_types.typ -> Ival.t -> t or_top
 val of_term_offset : Cil_types.typ -> Cil_types.term_offset -> t or_top
 
@@ -40,4 +40,4 @@ val references : t -> Cil_datatype.Varinfo.Set.t (* variables referenced in the
 
 val append : t -> t -> t (* Does not check that the appened offset fits *)
 val join : t -> t -> t or_top
-val add_index : (Cil_types.exp -> Int_val.t) -> t -> Cil_types.exp -> t or_top
+val add_index : (Eva_ast.exp -> Int_val.t) -> t -> Eva_ast.exp -> t or_top
diff --git a/src/plugins/eva/domains/multidim/abstract_structure.ml b/src/plugins/eva/domains/multidim/abstract_structure.ml
index ddce48f727fc353e345829b9eaa8b3a20ede1b16..e53381f0cb4af843d92f0aebb96dba5bd95af189 100644
--- a/src/plugins/eva/domains/multidim/abstract_structure.ml
+++ b/src/plugins/eva/domains/multidim/abstract_structure.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/abstract_structure.mli b/src/plugins/eva/domains/multidim/abstract_structure.mli
index d5bd39032aff27ccb977a62ab69917dcd0483c75..809603c6615a8e35f720b9b830fdae30c7903def 100644
--- a/src/plugins/eva/domains/multidim/abstract_structure.mli
+++ b/src/plugins/eva/domains/multidim/abstract_structure.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/multidim.ml b/src/plugins/eva/domains/multidim/multidim.ml
index 1eb428f1c5d99ed5e79265d8af04d16c38a19d8e..7dafd24f7e9d9bb94c18709144d6749e794b6ca3 100644
--- a/src/plugins/eva/domains/multidim/multidim.ml
+++ b/src/plugins/eva/domains/multidim/multidim.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/multidim.mli b/src/plugins/eva/domains/multidim/multidim.mli
index c2b30086d9f381db7626620bc5ce45a5423d9a58..c5def08229d406d93f62121a24e7e907f2cba11d 100644
--- a/src/plugins/eva/domains/multidim/multidim.mli
+++ b/src/plugins/eva/domains/multidim/multidim.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/multidim_domain.ml b/src/plugins/eva/domains/multidim/multidim_domain.ml
index c5606b0ebeb8571025778bb05ca5f1fb8434c374..c0c20803688576a3502210fbcd9cae6e26af8d0c 100644
--- a/src/plugins/eva/domains/multidim/multidim_domain.ml
+++ b/src/plugins/eva/domains/multidim/multidim_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,7 +20,6 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
 open Lattice_bounds
 
@@ -175,19 +174,20 @@ struct
   let of_var (vi : Cil_types.varinfo) : t =
     Map.singleton (Base.of_varinfo vi) (`Value (Offset.of_var_address vi))
 
-  let of_lval oracle ((host,offset) as lval : Cil_types.lval) : t or_top =
+  let of_lval oracle (lval : lval) : t or_top =
+    let (host,offset) = lval.node in
     let oracle' = convert_oracle oracle in
-    let base_typ = Cil.typeOfLhost host in
+    let base_typ = Eva_ast.type_of_lhost host in
     let offset =
-      if Cil.typeHasQualifier "volatile" (Cil.typeOfLval lval) then
+      if Eva_ast.lval_contains_volatile lval then
         `Top
       else
-        Offset.of_cil_offset oracle' base_typ offset in
+        Offset.of_eva_offset oracle' base_typ offset in
     match host with
     | Var vi ->
       `Value (Map.singleton (Base.of_varinfo vi) offset)
     | Mem exp ->
-      let exp, index = match exp.enode with
+      let exp, index = match exp.node with
         | BinOp (PlusPI, e1, e2, _typ) ->
           e1, Some e2
         | _ -> exp, None
@@ -197,7 +197,7 @@ struct
           match Base.typeof base with
           | None -> `Top
           | Some base_typ ->
-            let typ = Cil.typeOf_pointed (Cil.typeOf exp) in
+            let typ = Cil.typeOf_pointed exp.typ in
             let* base_offset = Offset.of_ival ~base_typ ~typ ival in
             let* base_offset = match index with
               | None -> `Value (base_offset)
@@ -217,7 +217,7 @@ struct
 
   let of_term_lval env ((lhost, offset) as lval) =
     let+ vi = match lhost with
-      | TVar ({lv_origin=Some vi}) -> `Value (vi)
+      | Cil_types.TVar ({lv_origin=Some vi}) -> `Value (vi)
       | TResult _ -> Top.of_option env.Abstract_domain.result
       | _ -> `Top
     in
@@ -225,7 +225,7 @@ struct
     let offset' = Offset.of_term_offset vi.vtype offset in
     Map.singleton base' offset', Cil.typeOfTermLval lval
 
-  let of_term env t =
+  let of_term env (t : Cil_types.term) =
     match t.term_node with
     | TLval term_lval -> of_term_lval env term_lval
     | _ -> `Top
@@ -413,18 +413,19 @@ struct
       state referees
 
   let update_var_references ~oracle (dst : Cil_types.varinfo)
-      (src : Cil_types.exp option) (base_map,tracked : t) =
+      (src : Eva_ast.exp option) (base_map,tracked : t) =
     let incr = Option.bind src (fun expr ->
-        match expr.Cil_types.enode with
-        | BinOp ((PlusA|PlusPI), { enode=Lval (Var vi', NoOffset) }, exp, _typ)
-          when Cil_datatype.Varinfo.equal dst vi' ->
-          Cil.constFoldToInt exp
-        | BinOp ((PlusA|PlusPI), exp, { enode=Lval (Var vi', NoOffset)}, _typ)
-          when Cil_datatype.Varinfo.equal dst vi' ->
-          Cil.constFoldToInt exp
-        | BinOp ((MinusA|MinusPI), { enode=Lval (Var vi', NoOffset) }, exp, _typ)
-          when Cil_datatype.Varinfo.equal dst vi' ->
-          Option.map Integer.neg (Cil.constFoldToInt exp)
+        let is_dst (exp : Eva_ast.exp) = match exp.node with
+          | Lval { node = Var v, NoOffset } -> Cil_datatype.Varinfo.equal dst v
+          | _ -> false
+        in
+        match expr.node with
+        | BinOp ((PlusA|PlusPI), e1, e2, _typ) when is_dst e1 ->
+          Eva_ast.fold_to_integer e2
+        | BinOp ((PlusA|PlusPI), e1, e2, _typ) when is_dst e2 ->
+          Eva_ast.fold_to_integer e1
+        | BinOp ((MinusA|MinusPI), e1, e2, _typ) when is_dst e1 ->
+          Option.map Integer.neg (Eva_ast.fold_to_integer e2)
         | _ -> None)
     in
     (* [oracle] must be the oracle before the (non-invertible)
@@ -453,7 +454,7 @@ struct
     base_map, tracked
 
   let update_references ~oracle (dst : mdlocation)
-      (src : Cil_types.exp option) (state : t) =
+      (src : Eva_ast.exp option) (state : t) =
     let remove_references b state =
       match Base.to_varinfo b with
       | exception Base.Not_a_C_variable -> state (* only references to variables are kept *)
@@ -484,11 +485,11 @@ struct
     let oracle = convert_oracle oracle in
     read (Memory.get ~oracle) Value_or_Uninitialized.join state src
 
-  let mk_oracle (state : state) : Cil_types.exp -> value =
+  let mk_oracle (state : state) : Eva_ast.exp -> value =
     (* Until Eva gives access to good oracles, we use this poor stupid oracle
        instead *)
-    let rec oracle exp =
-      match exp.enode with
+    let rec oracle (exp : Eva_ast.exp) =
+      match exp.node with
       | Lval lval ->
         begin match Location.of_lval oracle lval with
           | `Top -> Value.top
@@ -509,15 +510,15 @@ struct
         Value.forward_binop_int ~typ (oracle e1) op (oracle e2)
       | CastE (typ, e) ->
         let scalar_type t = Option.get (Eval_typ.classify_as_scalar t) in
-        let src_type =  scalar_type (Cil.typeOf e)
+        let src_type =  scalar_type e.typ
         and dst_type = scalar_type typ in
         Value.forward_cast ~src_type ~dst_type (oracle e)
       | _ ->
         Self.fatal
           "This type of array index expression is not supported: %a"
-          Cil_printer.pp_exp exp
+          Eva_ast.pp_exp exp
     in
-    fun exp -> oracle (Cil.constFold true exp)
+    fun exp -> oracle (Eva_ast.const_fold exp)
 
   let mk_bioracle s1 s2 =
     let oracle_left = mk_oracle s1
@@ -671,8 +672,8 @@ struct
   let extract_expr ~oracle:_ _context _state _expr =
     `Value (Value.top, None), Alarmset.all
 
-  let extract_lval ~oracle _context state lv typ _loc =
-    if Cil.isScalarType typ then
+  let extract_lval ~oracle _context state lv _loc =
+    if Cil.isScalarType lv.Eva_ast.typ then
       let oracle = fun exp ->
         match oracle exp with
         | `Value v, alarms when Alarmset.is_empty alarms -> v (* only use values safely evaluated *)
@@ -687,7 +688,9 @@ struct
         | `Value v ->
           Value_or_Uninitialized.get_v_normalized v >>-: (fun v -> v, None),
           if Value_or_Uninitialized.is_initialized v
-          then Alarmset.(set (Alarms.Uninitialized lv) True all)
+          then
+            let origin = Eva_ast.to_cil_lval lv in
+            Alarmset.(set (Alarms.Uninitialized origin) True all)
           else Alarmset.all
     else
       `Value (Value.top, None), Alarmset.all
@@ -695,7 +698,7 @@ struct
 
   (* Eva Transfer *)
 
-  let valuation_to_oracle state valuation : Cil_types.exp -> value = fun exp ->
+  let valuation_to_oracle state valuation : Eva_ast.exp -> value = fun exp ->
     let multidim_oracle = mk_oracle state in
     match valuation.Abstract_domain.find exp with
     | `Top -> multidim_oracle exp
@@ -705,8 +708,8 @@ struct
   let assume_exp valuation expr record state' =
     let* state = state' in
     let oracle = valuation_to_oracle state valuation in
-    match expr.enode with
-    | Lval lv when Cil.isScalarType (Cil.typeOfLval lv) ->
+    match (expr : Eva_ast.exp).node with
+    | Lval lv when Cil.isScalarType lv.typ ->
       let value = Value_or_Uninitialized.from_flagged record.value in
       if not (Value.is_topint (Value_or_Uninitialized.get_v value)) then
         match Location.of_lval oracle lv with
@@ -749,8 +752,8 @@ struct
         | `Value src ->
           overwrite ~oracle state dst src
 
-  let assign _kinstr { lval=dst; ltyp } src assigned_value valuation state =
-    if Int_Base.is_zero (Bit_utils.sizeof ltyp)
+  let assign _kinstr { lval=dst } src assigned_value valuation state =
+    if Int_Base.is_zero (Bit_utils.sizeof dst.typ)
     then `Value state
     else
       let+ state = assume_valuation valuation state in
@@ -768,7 +771,7 @@ struct
     let oracle = valuation_to_oracle state valuation in
     let bind state arg =
       state >>-:
-      assign' ~oracle ~value:arg.avalue (Cil.var arg.formal) (Some arg.concrete)
+      assign' ~oracle ~value:arg.avalue (Eva_ast.Build.var arg.formal) (Some arg.concrete)
     in
     List.fold_left bind (`Value state) call.arguments
 
@@ -779,10 +782,11 @@ struct
       let args = List.map (fun arg -> arg.avalue) call.arguments in
       let+ assigned_result = f args in
       let oracle = mk_oracle post in
-      assign' ~oracle ~value:assigned_result (Cil.var return) None post
+      let dst = Eva_ast.Build.var return in
+      assign' ~oracle ~value:assigned_result dst None post
 
   let show_expr valuation state fmt expr =
-    match expr.enode with
+    match (expr : Eva_ast.exp).node with
     | Lval lval | StartOf lval ->
       let oracle = valuation_to_oracle state valuation in
       begin match Location.of_lval oracle lval with
@@ -820,7 +824,7 @@ struct
     erase ~oracle ~weak:true state dst b
 
   let reduce_by_papp env li _labels args positive state =
-    match li.l_var_info.lv_name, args with
+    match li.Cil_types.l_var_info.lv_name, args with
     | "\\are_finite", [arg] ->
       begin match Location.of_term env arg with
         | `Top -> `Value state (* can't resolve location, ignore *)
@@ -837,7 +841,7 @@ struct
 
   let reduce_by_predicate env state predicate truth =
     let rec reduce predicate truth state =
-      match truth, predicate.pred_content with
+      match truth, predicate.Cil_types.pred_content with
       | true, Pand (p1,p2) | false, Por (p1,p2) ->
         state |> reduce p1 truth >>- reduce p2 truth
       | _,Papp (li, labels, args) ->
@@ -847,12 +851,13 @@ struct
     reduce predicate truth state
 
   let interpret_acsl_extension extension _env state =
-    match extension.ext_name with
+    match extension.Cil_types.ext_name with
     | "array_partition" ->
       let annotation = Eva_annotations.read_array_segmentation extension in
       let vi,offset,bounds = annotation in
       (* Update the segmentation *)
-      let lval = Cil_types.Var vi, offset in
+      let bounds = List.map Eva_ast.translate_exp bounds in
+      let lval = Eva_ast.translate_lval (Var vi, offset) in
       let oracle = mk_oracle state in
       begin match Location.of_lval oracle lval with
         | `Top -> state
@@ -864,7 +869,7 @@ struct
           let state = write update state loc in
           (* Update the references *)
           let add acc e =
-            let r = Cil.extract_varinfos_from_exp e in
+            let r = Eva_ast.vars_in_exp e in
             (Cil_datatype.Varinfo.Set.to_seq r |> List.of_seq) @ acc
           in
           let references = List.fold_left add [] bounds in
@@ -900,7 +905,7 @@ struct
       erase ~oracle state dst d
 
   let initialize_variable_using_type _kind vi state =
-    let lval = Cil.var vi in
+    let lval = Eva_ast.Build.var vi in
     let oracle = mk_oracle state in
     match Location.of_lval oracle lval with
     | `Top -> top
@@ -931,7 +936,7 @@ let multidim_hook (module Abstract: Abstractions.S) : (module Abstractions.S) =
   | _, None -> (module Abstract)
   | Some get_cval,  Some get_multidim ->
     let module Eval =
-      Evaluation.Make (Abstract.Val) (Abstract.Loc) (Abstract.Dom)
+      Evaluation.Make (Abstract.Ctx) (Abstract.Val) (Abstract.Loc) (Abstract.Dom)
     in
     let module Dom = struct
       include Abstract.Dom
@@ -960,6 +965,7 @@ let multidim_hook (module Abstract: Abstractions.S) : (module Abstractions.S) =
     end
     in
     (module struct
+      module Ctx = Abstract.Ctx
       module Val = Abstract.Val
       module Loc = Abstract.Loc
       module Dom = Dom
diff --git a/src/plugins/eva/domains/multidim/multidim_domain.mli b/src/plugins/eva/domains/multidim/multidim_domain.mli
index ce8f376e509af1586a9c62aca8961812da09b2c6..46d893793dcd203f7b42c0ec18ef00e740eb1404 100644
--- a/src/plugins/eva/domains/multidim/multidim_domain.mli
+++ b/src/plugins/eva/domains/multidim/multidim_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/pretty_memory.ml b/src/plugins/eva/domains/multidim/pretty_memory.ml
index 0c96888fb468f66fca62949cd8c040e68d61eee9..7072e70e4c1d98237848020cbde6094089eaa7db 100644
--- a/src/plugins/eva/domains/multidim/pretty_memory.ml
+++ b/src/plugins/eva/domains/multidim/pretty_memory.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/pretty_memory.mli b/src/plugins/eva/domains/multidim/pretty_memory.mli
index 9f13472b279e1a93f8b6a36a1935d845051e2af4..fb04dfbf3214d037ee59faf8164fa372fb103e3d 100644
--- a/src/plugins/eva/domains/multidim/pretty_memory.mli
+++ b/src/plugins/eva/domains/multidim/pretty_memory.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/segmentation.ml b/src/plugins/eva/domains/multidim/segmentation.ml
index 3a9f3ce61ec69cf8c416f50c9e5e732ba2d5e920..3df764821ef6d23e08ce97a2a9a36ec6bf2d0978 100644
--- a/src/plugins/eva/domains/multidim/segmentation.ml
+++ b/src/plugins/eva/domains/multidim/segmentation.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -101,17 +101,12 @@ module Bound =
 struct
   open Top.Operators
   module Var = Cil_datatype.Varinfo
-  module Exp =
-  struct
-    include Cil_datatype.ExpStructEq
-    let equal e1 e2 =
-      if e1 == e2 then true else equal e1 e2
-  end
+  module Exp = Eva_ast.Exp
 
   type t =
     | Const of Integer.t
-    | Exp of Cil_types.exp * Integer.t (* x + c *)
-    | Ptroffset of Cil_types.exp * Cil_types.offset * Integer.t (* (x - &b.offset) + c *)
+    | Exp of Eva_ast.exp * Integer.t (* x + c *)
+    | Ptroffset of Eva_ast.exp * Cil_types.offset * Integer.t (* (x - &b.offset) + c *)
 
   let pretty fmt : t -> unit = function
     | Const i -> Integer.pretty fmt i
@@ -153,12 +148,11 @@ struct
   exception NonLinear
 
   (* Find a coefficient before vi in exp *)
-  let rec linearity vi exp =
-    match exp.Cil_types.enode with
+  let rec linearity vi (exp : Eva_ast.exp) =
+    match exp.node with
     | Const _
-    | SizeOf _ | SizeOfE _ | SizeOfStr _ | AlignOf _ | AlignOfE _
     | AddrOf _ | StartOf _ -> Integer.zero
-    | Lval (Var vi', NoOffset) ->
+    | Lval {node = Var vi', NoOffset} ->
       if Var.equal  vi' vi
       then Integer.one
       else Integer.zero
@@ -183,21 +177,21 @@ struct
     (* Check that the linearity of any variable is not hidden into a mem access *)
     ignore (linearity Var.dummy exp)
 
-  let of_exp exp =
+  let of_exp (exp : Eva_ast.exp) =
     check_support exp;
     (* Normalizes x + c, c + x and x - c *)
-    match Cil.constFoldToInt exp with
+    match Eva_ast.fold_to_integer exp with
     | Some i -> Const i
     | None ->
-      match exp.Cil_types.enode with
+      match exp.node with
       | BinOp ((PlusA|PlusPI), e1, e2, _typ) ->
-        begin match Cil.constFoldToInt e1, Cil.constFoldToInt e2 with
+        begin match Eva_ast.(fold_to_integer e1, fold_to_integer e2) with
           | None, Some i -> Exp (e1, i)
           | Some i, None -> Exp (e2, i)
           | _ -> Exp (exp, Integer.zero)
         end
       | BinOp ((MinusA|MinusPI), e1, e2, _typ) ->
-        begin match Cil.constFoldToInt e2 with
+        begin match Eva_ast.fold_to_integer e2 with
           | Some i -> Exp (e1, Integer.neg i)
           | None -> Exp (exp, Integer.zero)
         end
diff --git a/src/plugins/eva/domains/multidim/segmentation.mli b/src/plugins/eva/domains/multidim/segmentation.mli
index 2d819c5b2d891636f6fe52b955cc04e458251c28..4b5d523e385ed082bb9a99acc322cd7414c8ebb2 100644
--- a/src/plugins/eva/domains/multidim/segmentation.mli
+++ b/src/plugins/eva/domains/multidim/segmentation.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -34,7 +34,7 @@ module Bound :
 sig
   type t
   exception UnsupportedBoundExpression
-  val of_exp : Cil_types.exp -> t
+  val of_exp : Eva_ast.exp -> t
   val of_integer : Integer.t -> t
   val succ : t -> t
 end
diff --git a/src/plugins/eva/domains/multidim/typed_memory.ml b/src/plugins/eva/domains/multidim/typed_memory.ml
index 8032d728b61dceeb8993ec6b2102ea9fdc541fbb..15e30f18787417fc23779d735b11d983aea6e75b 100644
--- a/src/plugins/eva/domains/multidim/typed_memory.ml
+++ b/src/plugins/eva/domains/multidim/typed_memory.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/multidim/typed_memory.mli b/src/plugins/eva/domains/multidim/typed_memory.mli
index bcdd9965a0d45c58ab5c3cecc5400bf78a74a57c..7d4baefd196b9d2cbab9881853eb4c68da17cd37 100644
--- a/src/plugins/eva/domains/multidim/typed_memory.mli
+++ b/src/plugins/eva/domains/multidim/typed_memory.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -121,5 +121,5 @@ sig
   (* Update the array segmentation at the given offset so the given bound
      expressions appear in the segmentation *)
   val segmentation_hint : oracle:oracle ->
-    t -> location -> Cil_types.exp list -> t
+    t -> location -> Eva_ast.exp list -> t
 end
diff --git a/src/plugins/eva/domains/numerors/numerors_arithmetics.ml b/src/plugins/eva/domains/numerors/numerors_arithmetics.ml
index f69e08b3573d1074ccda0e1ab6d6fa48c0ab3857..e2fa4dafe8542109a5e773917df8ecf27505a316 100644
--- a/src/plugins/eva/domains/numerors/numerors_arithmetics.ml
+++ b/src/plugins/eva/domains/numerors/numerors_arithmetics.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_arithmetics.mli b/src/plugins/eva/domains/numerors/numerors_arithmetics.mli
index c667a3591948e94fb3cc1f4652f74592bb287b4e..0c3977b7f5db59412e2cdd0329fa61f3d4bad57b 100644
--- a/src/plugins/eva/domains/numerors/numerors_arithmetics.mli
+++ b/src/plugins/eva/domains/numerors/numerors_arithmetics.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_domain.ml b/src/plugins/eva/domains/numerors/numerors_domain.ml
index ab8f9a5eaf0df3332c7eb972fb22412b6c7a3493..bde3d56c0ef99c7a0937a4dd427bc60df05278b9 100644
--- a/src/plugins/eva/domains/numerors/numerors_domain.ml
+++ b/src/plugins/eva/domains/numerors/numerors_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -125,8 +125,8 @@ let reduce_cast (module Abstract: Abstractions.S) =
       | Some get_cvalue, true ->
         (* Otherwise, applies the [forward_cast] function, but updates the
            numerors component of the result. *)
-        fun ~src_type ~dst_type value ->
-          forward_cast ~src_type ~dst_type value >>-: fun result ->
+        fun context ~src_type ~dst_type value ->
+          forward_cast context ~src_type ~dst_type value >>-: fun result ->
           match src_type, dst_type with
           | Eval_typ.TSInt _, Eval_typ.TSFloat fkind ->
             begin
@@ -146,6 +146,7 @@ let reduce_cast (module Abstract: Abstractions.S) =
           | _, _ -> result
   end in
   (module struct
+    module Ctx = Abstract.Ctx
     module Val = Val
     module Loc = Abstract.Loc
     module Dom = Abstract.Dom
diff --git a/src/plugins/eva/domains/numerors/numerors_domain.mli b/src/plugins/eva/domains/numerors/numerors_domain.mli
index 184f827d6225b2022c452269ed95f3785c6122aa..159c43df86ceda82bad00807eeee8eea8c3df8a4 100644
--- a/src/plugins/eva/domains/numerors/numerors_domain.mli
+++ b/src/plugins/eva/domains/numerors/numerors_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_float.ml b/src/plugins/eva/domains/numerors/numerors_float.ml
index d98c0087fc60e087bdf149e230e6c893528e6941..81f13f8e039bad2a82b4a748d84c434d834de4a5 100644
--- a/src/plugins/eva/domains/numerors/numerors_float.ml
+++ b/src/plugins/eva/domains/numerors/numerors_float.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_float.mli b/src/plugins/eva/domains/numerors/numerors_float.mli
index 9c1e34f23882160b21fa290b2a9930189686ec77..261341c9d2258a4e64cca193e4ae02675808ffb0 100644
--- a/src/plugins/eva/domains/numerors/numerors_float.mli
+++ b/src/plugins/eva/domains/numerors/numerors_float.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_interval.ml b/src/plugins/eva/domains/numerors/numerors_interval.ml
index da4712d605d29649ac46303640e9ee4b1fb89212..8eabcb94f8ef1c9c71878014df44e72b662232a2 100644
--- a/src/plugins/eva/domains/numerors/numerors_interval.ml
+++ b/src/plugins/eva/domains/numerors/numerors_interval.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_interval.mli b/src/plugins/eva/domains/numerors/numerors_interval.mli
index 56c710ae547f8d7574b086508087aaab1348c3c2..90389c1f1087ee16dd1637091f7f82a806786402 100644
--- a/src/plugins/eva/domains/numerors/numerors_interval.mli
+++ b/src/plugins/eva/domains/numerors/numerors_interval.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_utils.ml b/src/plugins/eva/domains/numerors/numerors_utils.ml
index cbfe930f7e5e44256969173f3eff997a6767a32d..7f02dd4ee448819b90ab4b93854c0bf0be660117 100644
--- a/src/plugins/eva/domains/numerors/numerors_utils.ml
+++ b/src/plugins/eva/domains/numerors/numerors_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_utils.mli b/src/plugins/eva/domains/numerors/numerors_utils.mli
index 5274f67d4c12c0c185dcf9d30bcf70d6175f4d69..641914b8355cc69975a51d0cb48846fdb1c8bc98 100644
--- a/src/plugins/eva/domains/numerors/numerors_utils.mli
+++ b/src/plugins/eva/domains/numerors/numerors_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/numerors/numerors_value.ml b/src/plugins/eva/domains/numerors/numerors_value.ml
index 796589a461197016d7ee6b856ac18ade11a9d899..85485626c68e224449714f1415886299c7dd3b84 100644
--- a/src/plugins/eva/domains/numerors/numerors_value.ml
+++ b/src/plugins/eva/domains/numerors/numerors_value.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,8 +20,8 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
+open Eva_ast
 open Numerors_utils
 
 module I = Numerors_interval
@@ -116,6 +116,9 @@ include Datatype.Make(T)
 let pretty_debug = pretty
 let pretty_typ _ = pretty
 
+type context = unit
+let context = Abstract_context.Leaf (module Unit_context)
+
 
 (*-----------------------------------------------------------------------------
  *                            Constructors
@@ -156,7 +159,7 @@ module Rel_Err  = Arith.Rel_Err
 (*-----------------------------------------------------------------------------
  *                      Numerors value of a constant
  *---------------------------------------------------------------------------*)
-let constant _ = function
+let constant _ _ = function
   | CReal (r, fkind, opt) ->
     let prec = Precisions.of_fkind fkind in
     let exact =
@@ -177,7 +180,7 @@ let constant _ = function
 (*-----------------------------------------------------------------------------
  *              Forward unary operations on Numerors value
  *---------------------------------------------------------------------------*)
-let forward_unop _typ op v =
+let forward_unop _context _typ op v =
   match v, op with
   | Elt v, Neg ->
     let exact  , approx  = Exact.Forward.neg   v, Approx.Forward.neg  v in
@@ -194,7 +197,7 @@ let forward_unop _typ op v =
  * The cast of integers into floats is actually handled by the Numerors
  * domain in the module <MakeNumerorsCValuesProduct>.
  *---------------------------------------------------------------------------*)
-let forward_cast ~src_type ~dst_type = function
+let forward_cast _context ~src_type ~dst_type = function
   | Top   -> `Value Top
   | Zero  -> `Value Zero
   | Elt t ->
@@ -207,7 +210,7 @@ let forward_cast ~src_type ~dst_type = function
 (*-----------------------------------------------------------------------------
  *             Forward binary operations on Numerors values
  *---------------------------------------------------------------------------*)
-let forward_binop _typ op x y =
+let forward_binop _context _typ op x y =
   match x, y, op with
   | Elt x, Elt y, PlusA  ->
     let exact  , approx  = Exact.Forward.add   x y, Approx.Forward.add  x y in
@@ -234,7 +237,7 @@ let forward_binop _typ op x y =
 (*-----------------------------------------------------------------------------
  *            Backward unary operations on Numerors values
  *---------------------------------------------------------------------------*)
-let backward_unop ~typ_arg:_ op ~arg ~res =
+let backward_unop _context ~typ_arg:_ op ~arg ~res =
   match arg, res, op with
   | Elt x, Elt r, Neg ->
     Exact.Backward.neg   x r >>- fun exact   ->
@@ -248,7 +251,7 @@ let backward_unop ~typ_arg:_ op ~arg ~res =
 (*-----------------------------------------------------------------------------
  *            Backward binary operations on Numerors values
  *---------------------------------------------------------------------------*)
-let backward_binop ~input_type:_ ~resulting_type:_ op ~left ~right ~result =
+let backward_binop _ ~input_type:_ ~resulting_type:_ op ~left ~right ~result =
   match left, right, result, op with
   | Elt x, Elt y, Elt r, PlusA ->
     Exact.Backward.add   x y r >>- fun (x_exact   , y_exact   ) ->
@@ -313,8 +316,8 @@ let assume_not_nan ~assume_finite:_ _fkind v = `Unknown v
 let assume_pointer v = `Unknown v
 let assume_comparable _cmp v1 v2 = `Unknown (v1, v2)
 
-let rewrap_integer _ _ = top
-let backward_cast ~src_typ:_ ~dst_typ:_ ~src_val:_ ~dst_val:_ = `Value None
+let rewrap_integer _ _ _ = top
+let backward_cast _ ~src_typ:_ ~dst_typ:_ ~src_val:_ ~dst_val:_ = `Value None
 let resolve_functions _ = `Top, true
 let replace_base _substitution t = t
 
diff --git a/src/plugins/eva/domains/numerors/numerors_value.mli b/src/plugins/eva/domains/numerors/numerors_value.mli
index 8d860a502b5a92ef31b5d45afd60d74e036d6b24..4814acb57a0edd21e9225483776dff5eb02dd811 100644
--- a/src/plugins/eva/domains/numerors/numerors_value.mli
+++ b/src/plugins/eva/domains/numerors/numerors_value.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,7 +20,7 @@
 (*                                                                        *)
 (**************************************************************************)
 
-include Abstract_value.Leaf
+include Abstract_value.Leaf with type context = unit
 
 val pretty_debug : t Pretty_utils.formatter
 
diff --git a/src/plugins/eva/domains/octagons.ml b/src/plugins/eva/domains/octagons.ml
index 2cbaa286e1443f43629111580cac105071bd3683..3859cea67a4f0f823806bb1d8cf5ecdd6bbb8912 100644
--- a/src/plugins/eva/domains/octagons.ml
+++ b/src/plugins/eva/domains/octagons.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,8 +20,8 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
+open Eva_ast
 
 (* If [true], checks invariants of the states created by most functions. *)
 let debug = false
@@ -61,19 +61,19 @@ type dependencies = Deps.t = {
   indirect: Locations.Zone.t;
 }
 
-type evaluator = Cil_types.exp -> Cvalue.V.t or_top
+type evaluator = exp -> Cvalue.V.t or_top
 
 (* Abstract interface for the variables used by the octagons. *)
 module type Variable = sig
   include Datatype.S_with_collections
   (* Creates a variable from a lvalue. *)
   val make_lval: lval -> t
-  val make_int: varinfo -> t
-  val make_startof: varinfo -> t
+  val make_int: Cil_types.varinfo -> t
+  val make_startof: Cil_types.varinfo -> t
   val kind: t -> kind (* The kind of the variable: integer or float. *)
   val lval: t -> lval option (* The CIL lval corresponding to the variable. *)
   val id: t -> int (* Unique id, needed to use variables as hptmap keys. *)
-  val deps: eval_loc:(Cil_types.lval -> Precise_locs.precise_location) ->
+  val deps: eval_loc:(lval -> Precise_locs.precise_location) ->
     t -> dependencies
 end
 
@@ -83,9 +83,9 @@ module Variable : Variable = struct
   module HCE = Hcexprs.HCE
 
   type var =
-    | Var of varinfo
-    | Int of varinfo
-    | StartOf of varinfo
+    | Var of Cil_types.varinfo
+    | Int of Cil_types.varinfo
+    | StartOf of Cil_types.varinfo
     | Lval of HCE.t
 
   type tt = var * int
@@ -125,9 +125,10 @@ module Variable : Variable = struct
 
   let make var = var, make_id var
 
-  let make_lval = function
-    | Cil_types.Var vi, NoOffset -> make (Var vi)
-    | lval -> make (Lval (HCE.of_lval lval))
+  let make_lval (lval : lval) =
+    match lval.node with
+    | Var vi, NoOffset -> make (Var vi)
+    | _ -> make (Lval (HCE.of_lval lval))
 
   let make_int vi = make (Int vi)
   let make_startof vi = make (StartOf vi)
@@ -140,7 +141,7 @@ module Variable : Variable = struct
 
   let lval (var, _) =
     match var with
-    | Var vi -> Some (Cil_types.Var vi, NoOffset)
+    | Var vi -> Some (Eva_ast.Build.var vi)
     | Lval lval -> HCE.to_lval lval
     | Int _ | StartOf _ -> None
 
@@ -154,7 +155,7 @@ module Variable : Variable = struct
     | StartOf _ ->
       { data = Locations.Zone.bottom ; indirect = Locations.Zone.bottom }
     | Lval lval ->
-      Eva_utils.deps_of_lval eval_loc (Option.get (HCE.to_lval lval))
+      Eva_ast.deps_of_lval eval_loc (Option.get (HCE.to_lval lval))
 end
 
 module VarSet =
@@ -267,7 +268,7 @@ let _pretty_octagon fmt octagon =
    request to the environment may return a new or an existing variable.
    The abstract domain chooses which expressions are worth being represented
    by a variable; the environment may return [None] otherwise. *)
-type environment = Cil_types.exp -> (Variable.t * Ival.t) option
+type environment = exp -> (Variable.t * Ival.t) option
 
 (* Transforms Cil expressions into mathematical octagons.
    Use Ival.t to evaluate expressions. *)
@@ -332,7 +333,7 @@ module Rewriting = struct
      where [v1] and [v2] are the intervals for [e1] and [e2], and [typ] is
      the type of [e1]. Returns the empty list otherwise. *)
   let apply_binop f (eval : evaluator) typ e1 op e2 =
-    let kind = typ_kind (Cil.typeOf e1) in
+    let kind = typ_kind e1.typ in
     let v1 = eval e1 in
     let v2 = eval e2 in
     if Cil.isPointerType typ
@@ -358,7 +359,7 @@ module Rewriting = struct
     match env expr with
     | Some (var, ival) -> [ { var; sign = true; coeff = Ival.neg_int ival } ]
     | None ->
-      match expr.enode with
+      match expr.node with
       | UnOp (Neg, e, typ) ->
         let* v = project_ival (eval e) in
         if may_overflow typ (Arith.neg v)
@@ -396,10 +397,10 @@ module Rewriting = struct
         apply_binop rewrite_binop eval typ e1 op e2
 
       | CastE (typ, e) ->
-        if Cil.(isIntegralType typ && isIntegralType (typeOf e)) then
+        if Cil.(isIntegralType typ && isIntegralType e.typ) then
           let* v = project_ival (eval e) in
           if may_overflow ~cast:true typ v then [] else rewrite eval env e
-        else if Cil.(isPointerType typ && isPointerType (typeOf e)) then
+        else if Cil.(isPointerType typ && isPointerType e.typ) then
           rewrite eval env e
         else
           []
@@ -408,7 +409,7 @@ module Rewriting = struct
 
   (* Rewrites the operation [e1 ± e2] into equivalent octagons ±(X±Y-value). *)
   let rewrite_binop (eval : evaluator) (env : environment) e1 binop e2 =
-    let kind = typ_kind (Cil.typeOf e1) in
+    let kind = typ_kind e1.typ in
     let vars1 = rewrite eval env e1 in
     let vars2 = rewrite eval env e2 in
     let vars2 = if binop = Sub then List.map neg vars2 else vars2 in
@@ -430,18 +431,18 @@ module Rewriting = struct
 
   (* Returns the range of the expression X-Y when the comparison X#Y holds. *)
   let comparison_range =
-    let open Abstract_interp.Comp in
     function
-    | Lt -> Ival.inject_range None (Some Integer.minus_one)
+    | Eva_ast.Lt -> Ival.inject_range None (Some Integer.minus_one)
     | Gt -> Ival.inject_range (Some Integer.one) None
     | Le -> Ival.inject_range None (Some Integer.zero)
     | Ge -> Ival.inject_range (Some Integer.zero) None
     | Eq -> Ival.zero
     | Ne -> Ival.top
+    | _ -> assert false
 
   (* Transforms the constraint [expr] ∈ [ival] into a list of octagonal
      constraints. *)
-  let make_octagons evaluate env expr ival =
+  let make_octagons evaluate env (expr : Eva_ast.exp) ival =
     let make_octagons_from_binop kind e1 op e2 ival =
       (* equivalent octagonal forms ±(X±Y-v) for [e1 op e2]. *)
       let rewritings = rewrite_binop evaluate env e1 op e2 in
@@ -453,23 +454,23 @@ module Rewriting = struct
       in
       List.map make_octagon rewritings
     in
-    match expr.enode with
+    match expr.node with
     | BinOp (PlusA | MinusA | PlusPI | MinusPI | MinusPP as binop, e1, e2, typ) ->
       let op = operation_of_binop binop in
       let make_octagons typ _ _ = make_octagons_from_binop typ e1 op e2 ival in
       apply_binop make_octagons evaluate typ e1 op e2
     | BinOp ((Lt | Gt | Le | Ge | Eq | Ne as binop), e1, e2, _typ) ->
-      let typ = Cil.typeOf e1 in
-      if not (Cil.isIntegralOrPointerType typ)
+      if not (Cil.isIntegralOrPointerType e1.typ)
       || (Ival.contains_zero ival && Ival.contains_non_zero ival)
       then []
       else
-        let comp = Eva_utils.conv_comp binop in
         let comp =
-          if Ival.is_zero ival then Abstract_interp.Comp.inv comp else comp
+          if Ival.is_zero ival
+          then Eva_ast.invert_relation binop
+          else binop
         in
         let range = comparison_range comp in
-        make_octagons_from_binop (typ_kind typ) e1 Sub e2 range
+        make_octagons_from_binop (typ_kind e1.typ) e1 Sub e2 range
     | _ -> []
 
   let overflow_alarms typ expr ival =
@@ -483,7 +484,8 @@ module Rewriting = struct
       let aux has_better_bound bound bound_kind alarms =
         if Ival.is_bottom ival || has_better_bound ival ival_range >= 0
         then
-          let alarm = Alarms.Overflow (overflow, expr, bound, bound_kind) in
+          let cil_expr = Eva_ast.to_cil_exp expr in
+          let alarm = Alarms.Overflow (overflow, cil_expr, bound, bound_kind) in
           Alarmset.set alarm Alarmset.True alarms
         else alarms
       in
@@ -509,13 +511,13 @@ module Rewriting = struct
       List.fold_left evaluate_octagon Ival.top octagons
     in
     let default = Ival.top, Alarmset.all in
-    match expr.enode with
+    match expr.node with
     | BinOp ((PlusA | MinusA as binop), e1, e2, typ) ->
       let op = if binop = PlusA then Add else Sub in
       let octagons = rewrite_binop eval env e1 op e2 in
       let ival = evaluate_octagons octagons in
       if Ival.(equal top ival) then default else
-        let kind = typ_kind (Cil.typeOf e1) in
+        let kind = typ_kind e1.typ in
         let ival2 =
           match
             project_ival (eval e1), project_ival (eval e2)
@@ -528,11 +530,10 @@ module Rewriting = struct
         then default
         else ival, overflow_alarms typ expr ival
     | BinOp ((Lt | Gt | Le | Ge | Eq as binop), e1, e2, _typ)
-      when Cil.isIntegralOrPointerType (Cil.typeOf e1) ->
-      let comp = Eva_utils.conv_comp binop in
+      when Cil.isIntegralOrPointerType e1.typ ->
       (* Evaluate [e1 - e2] and compare the resulting interval to the interval
          for which the comparison [e1 # e2] holds. *)
-      let range = comparison_range comp in
+      let range = comparison_range binop in
       let octagons = rewrite_binop eval env e1 Sub e2 in
       let ival = evaluate_octagons octagons in
       if Ival.is_included ival range then Ival.one, Alarmset.all
@@ -1264,7 +1265,7 @@ module State = struct
   let rec offset_to_coeff (eval : evaluator) base_type offset =
     let open Lattice_bounds.Top.Operators in
     match offset with
-    | Cil_types.NoOffset -> `Value (Ival.zero)
+    | NoOffset -> `Value (Ival.zero)
     | Field (fi, sub) ->
       let* sub_coeff = offset_to_coeff eval fi.ftype sub in
       begin try
@@ -1295,21 +1296,21 @@ module State = struct
       Top.fold ~top:false Cvalue.V.cardinal_zero_or_one
     in
     fun exp ->
-      match exp.enode with
+      match exp.node with
       | Lval lval
-        when Cil.isIntegralOrPointerType (Cil.typeOfLval lval)
-          && not (Eval_typ.lval_contains_volatile lval)
+        when Cil.isIntegralOrPointerType lval.typ
+          && not (Eva_ast.lval_contains_volatile lval)
           && not (is_singleton (eval exp)) ->
         Some (Variable.make_lval lval, Ival.zero)
 
-      | CastE (typ, { enode = Lval (Var vi, NoOffset) })
+      | CastE (typ, { node = Lval { node = Var vi, NoOffset } })
         when Cil.isIntegralType typ
           && Cil.isFloatingType vi.vtype
           && not (Cil.typeHasQualifier "volatile" vi.vtype)
           && not (is_singleton (eval exp)) ->
         Some (Variable.make_int vi, Ival.zero)
 
-      | StartOf (Var vi, offset) | AddrOf (Var vi, offset) ->
+      | StartOf { node = Var vi, offset } | AddrOf { node = Var vi, offset } ->
         let var = Variable.make_startof vi in
         let* coeff = offset_to_coeff eval vi.vtype offset in
         Some (var, coeff)
@@ -1604,7 +1605,6 @@ module Domain = struct
   type value = Cvalue.V.t
   type location = Precise_locs.precise_location
   type origin
-
   let value_dependencies = Main_values.cval
   let location_dependencies = Main_locations.ploc
 
@@ -1653,11 +1653,11 @@ module Domain = struct
     then `Bottom, Alarmset.all
     else `Value (Cvalue.V.inject_ival ival, None), alarms
 
-  let extract_lval ~oracle:_ _context _t _lval _typ _loc = top_value
+  let extract_lval ~oracle:_ _context _t _lval _loc = top_value
 
   let reduce_further state expr value =
-    match expr.enode with
-    | Lval lval when Cil.(isIntegralOrPointerType (typeOfLval lval)) ->
+    match expr.node with
+    | Lval lval when Cil.(isIntegralOrPointerType lval.typ) ->
       begin
         try
           let x_ival = Cvalue.V.project_ival value in
@@ -1680,8 +1680,7 @@ module Domain = struct
               in
               let y_ival = Ival.narrow y_ival1 y_ival2 in
               if Ival.(equal top y_ival) then acc else
-                let y_enode = Lval lval in
-                let y_expr = Cil.new_exp ~loc:expr.eloc y_enode in
+                let y_expr = Eva_ast.Build.lval lval in
                 let y_cvalue = Cvalue.V.inject_ival y_ival in
                 (y_expr, y_cvalue) :: acc
           in
@@ -1717,9 +1716,9 @@ module Domain = struct
     if not infer_intervals
     then state
     else
-      match expr.enode with
-      | Lval lval when Cil.(isIntegralType (typeOfLval lval))
-                    && not (Eval_typ.lval_contains_volatile lval) ->
+      match expr.node with
+      | Lval lval when Cil.(isIntegralType lval.typ)
+                    && not (Eva_ast.lval_contains_volatile lval) ->
         let var = Variable.make_lval lval in
         let deps = Deps.add var (eval_deps var) state.deps in
         let intervals = Intervals.add var ival state.intervals in
@@ -1785,8 +1784,7 @@ module Domain = struct
       with Not_found -> State.remove state variable
     in
     let state = assign_interval eval_deps variable assigned state in
-    let enode = Lval lvalue in
-    let left_expr = Cil.new_exp ~loc:expr.eloc enode in
+    let left_expr = Eva_ast.Build.lval lvalue in
     (* On the assignment X = E; if X-E can be rewritten as ±(X±Y-v),
        then the octagonal constraint [X±Y ∈ v] holds. *)
     let octagons = Rewriting.rewrite_binop eval_exp env left_expr Sub expr in
@@ -1800,9 +1798,9 @@ module Domain = struct
     state >>-: check "precise assign"
 
   let assign kinstr left_value expr assigned valuation state =
-    if kinstr <> Kglobal
-    && Cil.isIntegralOrPointerType left_value.ltyp
-    && not (Eval_typ.lval_contains_volatile left_value.lval)
+    if kinstr <> Cil_types.Kglobal
+    && Cil.isIntegralOrPointerType left_value.lval.typ
+    && not (Eva_ast.lval_contains_volatile left_value.lval)
     then assign_variable left_value.lval expr assigned valuation state
     else
       let written_loc = Precise_locs.imprecise_location left_value.lloc in
@@ -1834,7 +1832,7 @@ module Domain = struct
         `Value (start_recursive_call recursion state)
       | None ->
         let assign_formal state { formal; concrete; avalue } =
-          let lval = (Var formal, NoOffset) in
+          let lval = Eva_ast.Build.var formal in
           if Cil.isIntegralOrPointerType formal.vtype
           then state >>- assign_variable lval concrete avalue valuation
           else state
diff --git a/src/plugins/eva/domains/octagons.mli b/src/plugins/eva/domains/octagons.mli
index ce8f376e509af1586a9c62aca8961812da09b2c6..46d893793dcd203f7b42c0ec18ef00e740eb1404 100644
--- a/src/plugins/eva/domains/octagons.mli
+++ b/src/plugins/eva/domains/octagons.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/offsm_domain.ml b/src/plugins/eva/domains/offsm_domain.ml
index bde7f5ae3b520c3f469677d44afd5fd78f374bd1..190deb18e576daa29788328186cc7a57c88bcf1e 100644
--- a/src/plugins/eva/domains/offsm_domain.ml
+++ b/src/plugins/eva/domains/offsm_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -183,10 +183,10 @@ module D : Abstract_domain.Leaf
     then Offsm_value.Offsm.top
     else O o
 
-  let extract_lval ~oracle:_ _context state _lv typ locs =
+  let extract_lval ~oracle:_ _context state lv locs =
     let o =
-      if Cil.typeHasQualifier "volatile" typ ||
-         not (Cil.isArithmeticOrPointerType typ)
+      if Cil.typeHasQualifier "volatile" lv.Eva_ast.typ ||
+         not (Cil.isArithmeticOrPointerType lv.Eva_ast.typ)
       then
         `Value (Top, None)
       else
diff --git a/src/plugins/eva/domains/offsm_domain.mli b/src/plugins/eva/domains/offsm_domain.mli
index 2d38b3c035bda149c8af7573800ab33a4a968dbc..9e6156e3174ba2c17bd3417a1b9ebe7aff5cae0f 100644
--- a/src/plugins/eva/domains/offsm_domain.mli
+++ b/src/plugins/eva/domains/offsm_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/powerset.ml b/src/plugins/eva/domains/powerset.ml
index 3459fcf19914e9fb989d8f6b3d812d04d82a1f58..48edd916ac432a9d162906c0b0c85bbc80f64cbb 100644
--- a/src/plugins/eva/domains/powerset.ml
+++ b/src/plugins/eva/domains/powerset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/powerset.mli b/src/plugins/eva/domains/powerset.mli
index ce4e4c9139b82397e9c984738758f167912001be..8ff219d8921e412b07c0ba11eb60221cf18a13ba 100644
--- a/src/plugins/eva/domains/powerset.mli
+++ b/src/plugins/eva/domains/powerset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/printer_domain.ml b/src/plugins/eva/domains/printer_domain.ml
index bda8719c9e632a1c28759f081b5f09f27974642c..3b8150832a984f0ed128fa1bd363c862734ed833 100644
--- a/src/plugins/eva/domains/printer_domain.ml
+++ b/src/plugins/eva/domains/printer_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -56,7 +56,7 @@ module Simple : Simpler_domains.Simple_Cvalue = struct
   let extract_expr _state _exp =
     `Value (Cvalue.V.top)
 
-  let extract_lval _state _lval _typ _loc =
+  let extract_lval _state _lval _loc =
     `Value (Cvalue.V.top)
 
   (* --- Transfer functions --- *)
@@ -71,19 +71,19 @@ module Simple : Simpler_domains.Simple_Cvalue = struct
 
   let pp_arg fmt arg =
     Format.fprintf fmt "%a = %a"
-      Printer.pp_exp arg.concrete
+      Eva_ast.pp_exp arg.concrete
       pp_cvalue_assigned arg.avalue
 
   let assign _kinstr loc exp cvalue_assigned _valuation state =
     feedback "assign %a with %a = %a"
-      Printer.pp_lval loc.lval
-      Printer.pp_exp exp
+      Eva_ast.pp_lval loc.lval
+      Eva_ast.pp_exp exp
       pp_cvalue_assigned cvalue_assigned;
     `Value state
 
   let assume _stmt exp truth _valuation state =
     feedback "assume %a is %b"
-      Printer.pp_exp exp
+      Eva_ast.pp_exp exp
       truth;
     `Value state
 
@@ -112,7 +112,7 @@ module Simple : Simpler_domains.Simple_Cvalue = struct
 
   let initialize_variable lval ~initialized:_ init state =
     feedback "initialize_variable %a with %a"
-      Printer.pp_lval lval
+      Eva_ast.pp_lval lval
       pp_init_val init;
     state
 
diff --git a/src/plugins/eva/domains/printer_domain.mli b/src/plugins/eva/domains/printer_domain.mli
index d980026fca690afdd474e4fc859ba0e384c69745..2c4e64c40a84b9d51df6ae6fa9989ee2497ba786 100644
--- a/src/plugins/eva/domains/printer_domain.mli
+++ b/src/plugins/eva/domains/printer_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/sign_domain.ml b/src/plugins/eva/domains/sign_domain.ml
index 3e6150e19e4e9babc0da709f62f92450e0cbfd2d..8f2dbf583f04e143e7f30e791e1c48de24486f6d 100644
--- a/src/plugins/eva/domains/sign_domain.ml
+++ b/src/plugins/eva/domains/sign_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/sign_domain.mli b/src/plugins/eva/domains/sign_domain.mli
index 585d0f1deea2055c74e0a5b1da099daf90c61e8e..f684da5d9b44522c757bb691fd65fccdf79a49e1 100644
--- a/src/plugins/eva/domains/sign_domain.mli
+++ b/src/plugins/eva/domains/sign_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/simple_memory.ml b/src/plugins/eva/domains/simple_memory.ml
index deb6d926511f5d590daef40d9b830084ee78d1a5..39aef1ca1f1d4f4da5c87fd9a61cb1dd4533cc0b 100644
--- a/src/plugins/eva/domains/simple_memory.ml
+++ b/src/plugins/eva/domains/simple_memory.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,7 +20,6 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
 
 type 'value builtin = 'value list -> 'value or_bottom
@@ -204,15 +203,15 @@ module Make_Domain (Info: sig val name: string end) (Value: Value) = struct
   (* This function returns the information known about the location
      corresponding to [_lv], so that it may be used by the engine during
      evaluation. *)
-  let extract_lval ~oracle:_ _context state _lv typ loc =
-    let v = find loc typ state in
+  let extract_lval ~oracle:_ _context state lv loc =
+    let v = find loc lv.Eva_ast.typ state in
     `Value (v, None), Alarmset.all
 
   let extract_expr ~oracle:_ _context _state _expr =
     `Value (Value.top, None), Alarmset.all
 
-  let backward_location state _lval typ loc _value =
-    let new_value = find loc typ state in
+  let backward_location state lval loc _value =
+    let new_value = find loc lval.Eva_ast.typ state in
     `Value (loc, new_value)
 
   (* This function binds [loc] to [v], of type [typ], in [state].
@@ -230,13 +229,13 @@ module Make_Domain (Info: sig val name: string end) (Value: Value) = struct
      location with the result of the evaluation of [exp]. Both the value and
      the location are found in the [valuation]. *)
   let assume_exp valuation expr record state =
-    match expr.enode with
+    match (expr : Eva_ast.exp).node with
     | Lval lv -> begin
         match valuation.Abstract_domain.find_loc lv with
         | `Top -> state
-        | `Value {loc; typ} ->
+        | `Value {loc} ->
           if Precise_locs.cardinal_zero_or_one loc
-          then bind_loc loc typ record.value.v state
+          then bind_loc loc lv.typ record.value.v state
           else state
       end
     | _ -> state
@@ -255,7 +254,7 @@ module Make_Domain (Info: sig val name: string end) (Value: Value) = struct
     (* Extract the abstract value *)
     let value = Eval.value_assigned value in
     (* Store the information [lv = e;] in the state *)
-    let state = bind_loc lv.lloc lv.ltyp value state in
+    let state = bind_loc lv.lloc lv.lval.typ value state in
     `Value state
 
   let update valuation state = `Value (assume_valuation valuation state)
@@ -309,12 +308,12 @@ module Make_Domain (Info: sig val name: string end) (Value: Value) = struct
         bind_loc return_loc return.vtype (`Value result) post
 
   let show_expr valuation state fmt expr =
-    match expr.enode with
+    match (expr : Eva_ast.exp).node with
     | Lval lval ->
       begin
         match valuation.Abstract_domain.find_loc lval with
         | `Top -> ()
-        | `Value {loc; typ} -> Value.pretty fmt (find loc typ state)
+        | `Value {loc} -> Value.pretty fmt (find loc lval.typ state)
       end
     | _ -> ()
 
diff --git a/src/plugins/eva/domains/simple_memory.mli b/src/plugins/eva/domains/simple_memory.mli
index 0519cf24b31ba77b4fa76d2e4ca69e996474ce43..f70f75d573bc1628bd6a28ef413d2f5191c4c6c1 100644
--- a/src/plugins/eva/domains/simple_memory.mli
+++ b/src/plugins/eva/domains/simple_memory.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/simpler_domains.ml b/src/plugins/eva/domains/simpler_domains.ml
index dc75f5b752dc7702ddbc0f23f297d8b08802a7d5..d207e51e5f67346dca5b6e888bfbecfd84115e5f 100644
--- a/src/plugins/eva/domains/simpler_domains.ml
+++ b/src/plugins/eva/domains/simpler_domains.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -116,7 +116,7 @@ module type Simple_Cvalue = sig
   (** Query functions. *)
 
   val extract_expr: t -> exp -> cvalue or_bottom
-  val extract_lval: t -> lval -> typ -> precise_loc -> cvalue or_bottom
+  val extract_lval: t -> lval -> precise_loc -> cvalue or_bottom
 
   (** Transfer functions. *)
 
diff --git a/src/plugins/eva/domains/symbolic_locs.ml b/src/plugins/eva/domains/symbolic_locs.ml
index d10d70e06e14cea74be1afc75cf6a0bb78a05593..2bbe125a610fa13f0c632f1e3afff9b207bd7ac9 100644
--- a/src/plugins/eva/domains/symbolic_locs.ml
+++ b/src/plugins/eva/domains/symbolic_locs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,8 +20,8 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
+open Eva_ast
 open Locations
 
 let dkey = Self.register_category "d-symblocs"
@@ -117,45 +117,38 @@ end
 let interesting_exp get_locs get_val e =
   let is_comp = function Eq | Ne | Le | Ge | Lt | Gt -> true | _ -> false in
   let rec has_lvalue e =
-    match e.enode with
+    match e.node with
     | Lval _ ->
       not (Cvalue.V.cardinal_zero_or_one (get_val e))
     | CastE (_, e) | UnOp (_, e, _) ->
       has_lvalue e
     | BinOp (op, e1, e2,_) ->
       not (is_comp op) && (has_lvalue e1 || has_lvalue e2)
-    | Const _ | SizeOf _ | SizeOfStr _ | SizeOfE _ | AlignOf _ | AlignOfE _
-    | StartOf _ | AddrOf _ ->
+    | Const _ | StartOf _ | AddrOf _ ->
       false
   in
-  match e.enode with
+  match e.node with
   | Lval lv ->
     not (Precise_locs.cardinal_zero_or_one (get_locs lv))
   | BinOp (op, e1, e2,_) ->
     not (is_comp op) && has_lvalue e1 && has_lvalue e2
-  | CastE _ | UnOp _ | Const _ | SizeOf _ | SizeOfStr _ | SizeOfE _
-  | AlignOf _ | AlignOfE _ | StartOf _ | AddrOf _ ->
+  | CastE _ | UnOp _ | Const _ | StartOf _ | AddrOf _ ->
     false
 
 (* Locals and formals syntactically present in an expression or lvalue *)
-let rec vars_lv (h, o) = Base.Set.union (vars_host h) (vars_offset o)
-and vars_exp (e: exp) = match e.enode with
-  | Const _ | SizeOf _ | AlignOf _ | SizeOfStr _ ->
-    Base.Set.empty
-  | AddrOf lv | StartOf lv | Lval lv ->
-    vars_lv lv
-  | SizeOfE e | AlignOfE e | CastE (_,e) | UnOp (_,e,_) ->
-    vars_exp e
-  | BinOp (_,e1,e2,_) -> Base.Set.union (vars_exp e1) (vars_exp e2)
-and vars_host = function
-  | Var vi ->
-    (* Global variables never go out of scope, no need to track them *)
-    if vi.vglob then Base.Set.empty else Base.(Set.singleton (of_varinfo vi))
-  | Mem e -> vars_exp e
-and vars_offset = function
-  | NoOffset -> Base.Set.empty
-  | Field (_, o) -> vars_offset o
-  | Index (e, o) -> Base.Set.union (vars_exp e) (vars_offset o)
+let vars_to_bases vi_set =
+  vi_set
+  |> Cil_datatype.Varinfo.Set.to_seq
+  (* Global variables never go out of scope, no need to track them *)
+  |> Seq.filter (fun vi -> not vi.Cil_types.vglob)
+  |> Seq.map Base.of_varinfo
+  |> Base.Set.of_seq
+
+let vars_lv lv =
+  vars_to_bases (Eva_ast.vars_in_lval lv)
+
+let vars_exp (e: exp) =
+  vars_to_bases (Eva_ast.vars_in_exp e)
 
 (* Legacy names *)
 module B2K = K.BaseToHCESet
@@ -373,12 +366,12 @@ module Memory = struct
   (* Add the the mapping [lv --> v] to [state] when possible.
      [get_z] is a function that computes dependencies. *)
   let add_lv state get_z lv v  =
-    if Eval_typ.lval_contains_volatile lv then
+    if Eva_ast.lval_contains_volatile lv then
       state
     else
       let k = K.HCE.of_lval lv in
       let z_lv = Precise_locs.enumerate_valid_bits Locations.Read (get_z lv) in
-      let z_lv_indirect = Eva_utils.indirect_zone_of_lval get_z lv in
+      let z_lv_indirect = Eva_ast.indirect_zone_of_lval get_z lv in
       if Locations.Zone.intersects z_lv z_lv_indirect then
         (* The location of [lv] intersects with the zones needed to compute
            itself, the equality would not hold. *)
@@ -390,11 +383,11 @@ module Memory = struct
   (* Add the mapping [e --> v] to [state] when possible and useful.
      [get_z] is a function that computes dependencies. *)
   let add_exp state get_z e v =
-    if Eval_typ.expr_contains_volatile e then
+    if Eva_ast.exp_contains_volatile e then
       state
     else
       let k = K.HCE.of_exp e in
-      let z = Eva_utils.zone_of_expr get_z e in
+      let z = Eva_ast.zone_of_exp get_z e in
       add_key k v z state
 
   let find k state =
@@ -491,7 +484,7 @@ module D : Abstract_domain.Leaf
       | `Value loc -> loc.Eval.loc
     in
     if Precise_locs.(equal_loc loc_top r) then
-      Self.fatal "Unknown location for %a" Printer.pp_lval lv
+      Self.fatal "Unknown location for %a" Eva_ast.pp_lval lv
     else r
 
   let get_val valuation = fun lv ->
@@ -550,7 +543,7 @@ module D : Abstract_domain.Leaf
     `Value (Memory.kill loc state)
 
   let store_copy valuation lv loc state fv =
-    if Cil.isArithmeticOrPointerType lv.ltyp then
+    if Cil.isArithmeticOrPointerType lv.lval.typ then
       match fv.v, fv.initialized, fv.escaping with
       | `Value v, true, false -> store_value valuation lv.lval loc state v
       | _ -> store_indeterminate state loc
@@ -589,7 +582,7 @@ module D : Abstract_domain.Leaf
     | None -> top_query
     | Some v -> `Value (v, None), Alarmset.none
 
-  let extract_lval ~oracle:_ _context state lv _typ _locs =
+  let extract_lval ~oracle:_ _context state lv _locs =
     match Memory.find_lval lv state with
     | None -> top_query
     | Some v -> `Value (v, None), Alarmset.none
diff --git a/src/plugins/eva/domains/symbolic_locs.mli b/src/plugins/eva/domains/symbolic_locs.mli
index 72e532a197f2ba8eb9de0bba754d9e280ba8e009..b527a68653dde71825b8951b2dab8d0fd1661b9f 100644
--- a/src/plugins/eva/domains/symbolic_locs.mli
+++ b/src/plugins/eva/domains/symbolic_locs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/taint_domain.ml b/src/plugins/eva/domains/taint_domain.ml
index fb392e0cca08c21c3e8ecc7064fb41478a13cb78..e434f1c04cb27c563e356a809e2cb1d5119d0642 100644
--- a/src/plugins/eva/domains/taint_domain.ml
+++ b/src/plugins/eva/domains/taint_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -186,7 +186,7 @@ module TransferTaint = struct
      - its indirect dependencies, i.e. the memory zone its location depends on;
      - whether its location is a singleton. *)
   let compute_zones lval to_loc =
-    match lval with
+    match (lval : Eva_ast.lval).node with
     | Var vi, NoOffset ->
       (* Special case for direct access to variable: do not use [to_loc] here,
          as it will fail for the formal parameters of calls. *)
@@ -199,13 +199,13 @@ module TransferTaint = struct
         let loc = Precise_locs.imprecise_location ploc in
         Locations.enumerate_valid_bits Write loc
       in
-      let lv_indirect_zone = Eva_utils.indirect_zone_of_lval to_loc lval in
+      let lv_indirect_zone = Eva_ast.indirect_zone_of_lval to_loc lval in
       lv_zone, lv_indirect_zone, singleton
 
   (* Propagates data- and control-taints for an assignement [lval = exp]. *)
   let assign_aux lval exp to_loc state =
     let lv_zone, lv_indirect_zone, singleton = compute_zones lval to_loc in
-    let exp_zone = Eva_utils.zone_of_expr to_loc exp in
+    let exp_zone = Eva_ast.zone_of_exp to_loc exp in
     (* [lv] becomes data-tainted if a memory location on which the value of
        [exp] depends on is data-tainted. *)
     let data_tainted = Zone.intersects state.locs_data exp_zone in
@@ -246,7 +246,7 @@ module TransferTaint = struct
     let state = filter_active_tainted_assumes stmt state in
     (* Add [stmt] as assume statement in [state] as soon as [exp] is tainted. *)
     let to_loc = loc_of_lval valuation in
-    let exp_zone = Eva_utils.zone_of_expr to_loc exp in
+    let exp_zone = Eva_ast.zone_of_exp to_loc exp in
     let state =
       if not state.dependent_call && LatticeTaint.intersects state exp_zone
       then { state with assume_stmts = Stmt.Set.add stmt state.assume_stmts; }
@@ -265,7 +265,7 @@ module TransferTaint = struct
       let to_loc = loc_of_lval valuation in
       List.fold_left
         (fun s { Eval.concrete; formal; _ } ->
-           assign_aux (Cil.var formal) concrete to_loc s)
+           assign_aux (Eva_ast.Build.var formal) concrete to_loc s)
         state
         call.Eval.arguments
     in
@@ -279,7 +279,7 @@ module TransferTaint = struct
 
   let show_expr valuation state fmt exp =
     let to_loc = loc_of_lval valuation in
-    let exp_zone = Eva_utils.zone_of_expr to_loc exp in
+    let exp_zone = Eva_ast.zone_of_exp to_loc exp in
     Format.fprintf fmt "%B" (LatticeTaint.intersects state exp_zone)
 
 end
@@ -290,7 +290,7 @@ module QueriesTaint = struct
   let top_query = `Value (Cvalue.V.top, None), Alarmset.all
 
   let extract_expr ~oracle:_ _context _state _expr = top_query
-  let extract_lval ~oracle:_ _context _state _lv _typ _locs = top_query
+  let extract_lval ~oracle:_ _context _state _lv _locs = top_query
 
 end
 
@@ -585,6 +585,7 @@ let interpret_taint_logic
     end
     in
     (module struct
+      module Ctx = Abstract.Ctx
       module Val = Abstract.Val
       module Loc = Abstract.Loc
       module Dom = Dom
diff --git a/src/plugins/eva/domains/taint_domain.mli b/src/plugins/eva/domains/taint_domain.mli
index 2b26fa23af604b9eeb6ce7ff3274a226beee2957..2cc0746765c101a57007afea69f252cdd6f7630a 100644
--- a/src/plugins/eva/domains/taint_domain.mli
+++ b/src/plugins/eva/domains/taint_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/traces_domain.ml b/src/plugins/eva/domains/traces_domain.ml
index cda82de061d84559cc90ea3d4fd7426ee43c62ea..72a5125eee1ae75a4ca07ba958248355ed351192 100644
--- a/src/plugins/eva/domains/traces_domain.ml
+++ b/src/plugins/eva/domains/traces_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -1102,11 +1102,14 @@ module D = struct
   let log_category = Self.register_category "d-traces"
 
   let assign ki lv e _v _valuation state =
-    let trans = Assign (ki, lv.Eval.lval, lv.Eval.ltyp, e) in
+    let cil_lval = Eva_ast.to_cil_lval lv.Eval.lval in
+    let cil_exp = Eva_ast.to_cil_exp e in
+    let trans = Assign (ki, cil_lval, lv.lval.typ, cil_exp) in
     `Value (Traces.add_trans state trans)
 
   let assume stmt e pos _valuation state =
-    let trans = Assume (stmt, e, pos) in
+    let cil_exp = Eva_ast.to_cil_exp e in
+    let trans = Assume (stmt, cil_exp, pos) in
     `Value (Traces.add_trans state trans)
 
   let start_call stmt call _recursion _valuation state =
@@ -1121,7 +1124,8 @@ module D = struct
           Traces.add_trans state
             (Assign (Kstmt stmt, Cil.var arg.Eval.formal,
                      arg.Eval.formal.Cil_types.vtype,
-                     arg.Eval.concrete))) state call.Eval.arguments in
+                     Eva_ast.to_cil_exp arg.Eval.concrete)))
+          state call.Eval.arguments in
       `Value state
     else
       (* enter the scope of the dumb result variable *)
@@ -1129,7 +1133,11 @@ module D = struct
       let state = match var with
         | Some var -> Traces.add_trans state (EnterScope (kf, [var]))
         | None -> state in
-      let exps = List.map (fun arg -> arg.Eval.concrete) call.Eval.arguments in
+      let exps =
+        List.map
+          (fun arg -> Eva_ast.to_cil_exp arg.Eval.concrete)
+          call.Eval.arguments
+      in
       let state = Traces.add_trans state
           (CallDeclared (call.Eval.kf, exps, Option.map Cil.var var))
       in `Value {state with call_declared_function = true}
@@ -1150,7 +1158,7 @@ module D = struct
 
   let empty () = Traces.empty
   let initialize_variable lv _ ~initialized:_ _ state =
-    Traces.add_trans state (Msg(Format.asprintf "initialize variable: %a" Printer.pp_lval lv ))
+    Traces.add_trans state (Msg(Format.asprintf "initialize variable: %a" Eva_ast.pp_lval lv ))
   let initialize_variable_using_type var_kind varinfo state =
     let kind_str =
       match var_kind with
@@ -1172,7 +1180,7 @@ module D = struct
   let top_query = `Value (Cvalue.V.top, None), Alarmset.all
 
   let extract_expr ~oracle:_ _context _state _expr = top_query
-  let extract_lval ~oracle:_ _context _state _lv _typ _locs = top_query
+  let extract_lval ~oracle:_ _context _state _lv _locs = top_query
 
   let enter_loop stmt state =
     let state = Traces.add_trans state (Msg "enter_loop") in
diff --git a/src/plugins/eva/domains/traces_domain.mli b/src/plugins/eva/domains/traces_domain.mli
index 83dff43f31f74e7c0f9d34a1bc8896d6a0486503..f89571e6c32056d1170ac6ba1cb74e3f645fb7fd 100644
--- a/src/plugins/eva/domains/traces_domain.mli
+++ b/src/plugins/eva/domains/traces_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/domains/unit_domain.ml b/src/plugins/eva/domains/unit_domain.ml
index 3a374d166ff17b14aa74e28fd822e9e6b79bcff2..caba1937bd9c96184e749c29b5fca6dd84c2351d 100644
--- a/src/plugins/eva/domains/unit_domain.ml
+++ b/src/plugins/eva/domains/unit_domain.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -59,7 +59,7 @@ module Make
 
   let eval_top = `Value (Value.top, None), Alarmset.all
   let extract_expr ~oracle:_ _ _ _ = eval_top
-  let extract_lval ~oracle:_ _ _ _ _ _ = eval_top
+  let extract_lval ~oracle:_ _ _ _ _ = eval_top
 
   let update _ _ = `Value ()
   let assign _ _ _ _ _ _ = `Value ()
diff --git a/src/plugins/eva/domains/unit_domain.mli b/src/plugins/eva/domains/unit_domain.mli
index e567540745d4d487a627710abd980ea91d4ddbdd..e8334fa3e505f0964372ecaf3a299a916a4f8a83 100644
--- a/src/plugins/eva/domains/unit_domain.mli
+++ b/src/plugins/eva/domains/unit_domain.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -23,7 +23,8 @@
 module Make
     (Value: Abstract_value.S)
     (Loc: Abstract_location.S)
-  : Abstract.Domain.Internal with type state = unit
+  : Abstract.Domain.Internal with type context = unit
+                              and type state = unit
                               and type value = Value.t
                               and type location = Loc.location
 
diff --git a/src/plugins/eva/dune b/src/plugins/eva/dune
index 71e32bff86870737e824723a07bf73d9859024ec..70707bc2619a4f9d5a7dc9488f7f4473c6a7332b 100644
--- a/src/plugins/eva/dune
+++ b/src/plugins/eva/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
@@ -107,14 +107,22 @@
   (libraries frama-c-eva.apron.core)
   (site (frama-c plugins)))
 
+(subdir gen_api
+ (include_subdirs no)
+ (executable
+  (name gen_api)
+  (modules gen_api)
+  (libraries str)))
+
 (rule
  (targets Eva.ml Eva.mli)
  (mode (promote (only Eva.mli)))
  (deps
-  gen-api.sh Eva.header
-  engine/analysis.mli types/callstack.mli types/deps.mli utils/results.mli parameters.mli
-  utils/eva_annotations.mli eval.mli types/assigns.mli
+  gen_api/Eva.header
+  engine/analysis.mli types/callstack.mli types/deps.mli
+  utils/results.mli parameters.mli
+  utils/eva_annotations.mli eval.mli types/assigns.mli ast/eva_ast.mli
   domains/cvalue/builtins.mli utils/cvalue_callbacks.mli legacy/logic_inout.mli
   utils/eva_results.mli
   utils/unit_tests.mli)
- (action (run bash %{deps})))
+ (action (run ./gen_api/gen_api.exe %{deps})))
diff --git a/src/plugins/eva/dune-project b/src/plugins/eva/dune-project
index 6cf04855e9b3141c1072c1f068ed76963dbdd8e5..fa488965941b3dde9960322f3b925fe98202ef76 100644
--- a/src/plugins/eva/dune-project
+++ b/src/plugins/eva/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/eva/engine/abstractions.ml b/src/plugins/eva/engine/abstractions.ml
index ef09af89e6d91a9a4fafb5035a67f30bb641acaa..3e02c2c85e63c3656b4869637a547a7c2bceee67 100644
--- a/src/plugins/eva/engine/abstractions.ml
+++ b/src/plugins/eva/engine/abstractions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,6 +22,118 @@
 
 
 
+(* --- Contexts abstraction ------------------------------------------------- *)
+
+module Context = struct
+  type 'c structure = 'c Abstract.Context.structure
+  type 'c dependencies = 'c Abstract_context.dependencies
+  let dec_eq = Abstract.Context.eq_structure
+
+  type 'c context = (module Abstract_context.Leaf with type t = 'c)
+
+  (* When building the abstraction, we will need to compare the dependencies
+     structure with the structured values. *)
+  let rec outline : type v. v dependencies -> v structure = function
+    | Leaf context ->
+      let module C = (val context) in
+      Abstract.Context.Leaf (C.key, (module C))
+    | Node (l, r) -> Abstract.Context.(Node (outline l, outline r))
+
+  (* Folding over contexts dependencies *)
+  type 'a folder = { folder : 'c. 'c context -> 'a -> 'a }
+  let rec fold : type c. 'a folder -> c dependencies -> 'a -> 'a =
+    fun folder dependencies acc ->
+    match dependencies with
+    | Leaf leaf -> folder.folder leaf acc
+    | Node (l, r) -> fold folder l (fold folder r acc)
+
+  (* The context abstraction build consists of accumulating registered contexts
+     into a structured context and then adding the needed operators, thus making
+     it interactive. A [Unit] structured abstraction is used for the initial
+     state and is discarded as soon as a real context abstraction is added. *)
+  module type Structured = Abstract.Context.Internal
+  module type Interactive = Abstract.Context.External
+  type 'a or_unit = Unit | Context of 'a
+  type structured = (module Structured) or_unit
+  type interactive = (module Interactive) or_unit
+
+  let init : structured = Unit
+
+  (* During the complete abstraction build, we need to verify that there is at
+     least one context in the computed abstraction.
+     TODO: better error handling. *)
+  let assert_not_unit = function
+    | Unit -> Self.fatal "The built context cannot be unit."
+    | Context interactive -> interactive
+
+  (* Making a structured context interactive simply consists of adding the
+     needed operations using the Structure.Open functor.*)
+  let make_interactive : structured -> interactive = function
+    | Unit -> Unit
+    | Context (module Structured) ->
+      Context (module struct
+        include Structured
+        include Structure.Open (Abstract.Context) (Structured)
+      end)
+
+  (* Adding a registered context into a structured one consists of deciding if
+     a product is needed (which comes down to checking if the registered
+     context key we want to add is not in the structure), computing it, and
+     updating the structure. *)
+  let add : type c. c context -> structured -> structured =
+    fun (module Ctx) structured ->
+    let leaf = Abstract.Context.Leaf (Ctx.key, (module Ctx)) in
+    match make_interactive structured with
+    | Unit ->
+      Context (module struct
+        include Ctx
+        let structure = leaf
+      end)
+    | Context (module Interactive) when not (Interactive.mem Ctx.key) ->
+      Context (module struct
+        include Context_product.Make (Interactive) (Ctx)
+        let structure = Abstract.Context.Node (Interactive.structure, leaf)
+      end)
+    | _ -> structured
+
+
+  (* When building the complete abstraction, we need to trick values and domains
+     into thinking that their context dependencies are there, even if the
+     structured context type is not the good one. This is done through a
+     lift that requires conversion operations to interact with the subpart
+     of the structured context that matters for the value or the domain.
+     This functor is responsible of building such conversion operations. *)
+  module type From = sig type context val structure : context structure end
+  module Converter (From : From) (To : Interactive) = struct
+    type internal = From.context
+    type extended = To.t
+    let structure = From.structure
+
+    let void_context () =
+      Self.fatal "Cannot register a context module from a Void structure."
+
+    let rec set : type v. v structure -> v -> extended -> extended = function
+      | Leaf (key, _) -> To.set key
+      | Node (s1, s2) -> fun (v1, v2) ext -> set s2 v2 ext |> set s1 v1
+      | Option (s, default) -> fun v -> set s (Option.value ~default v)
+      | Unit -> fun () value -> value
+      | Void -> void_context ()
+
+    let rec get : type v. v structure -> extended -> v = function
+      | Leaf (key, _) -> Option.get (To.get key)
+      | Node (s1, s2) -> fun v -> get s1 v, get s2 v
+      | Option (s, _) -> fun v -> Some (get s v)
+      | Unit -> fun _ -> ()
+      | Void -> void_context ()
+
+    let replace = set structure
+    let extend v = replace v To.top
+    let restrict = get structure
+  end
+end
+
+
+
 (* --- Values abstraction --------------------------------------------------- *)
 
 module Value = struct
@@ -48,55 +160,101 @@ module Value = struct
     | Leaf leaf -> folder.folder leaf acc
     | Node (l, r) -> fold folder l (fold folder r acc)
 
-  (* The value abstraction build consists of accumulating registered values
-     into a structured value and then adding the needed operators, thus making
-     it interactive. A [Unit] structured abstraction is used for the initial
-     state and is discarded as soon as a real value abstraction is added. *)
-  module type Structured = Abstract.Value.Internal
+  (* Folding over contexts dependencies of a value. *)
+  let rec fold_contexts : type v. 'a Context.folder -> v dependencies -> 'a -> 'a =
+    fun folder dependencies acc ->
+    match dependencies with
+    | Leaf (module V) -> Context.fold folder V.context acc
+    | Node (l, r) -> fold_contexts folder l (fold_contexts folder r acc)
+
+
+  (* As for the context abstraction, building the value abstraction consists
+     of structuring the needed registered values and then adding the needed
+     operators to make it interactive. However, a structured value is not
+     as simple as a structured context, as it needs to keep track of the
+     context abstraction it is based on. This context is supposed to be the
+     complete aggregation of all the contexts that are needed by the
+     requested domains. *)
+  module type Structured = sig
+    type context
+    module Context : Context.Interactive with type t = context
+    module Value : Abstract.Value.Internal with type context = context
+  end
+
+  (* We expose the type of the structured context we are based on to statically
+     ensure that we do not temper with it. As for the context abstractions, a
+     [Unit] structured abstraction is used for the initial state and is
+     discarded as soon as a value is added. *)
+  type ('c, 'v) or_unit = Unit of 'c | Value of 'v
+  type 'c context = (module Context.Interactive with type t = 'c)
+  type 'c structured_module = (module Structured with type context = 'c)
+  type 'c structured = ('c context, 'c structured_module) or_unit
+
   module type Interactive = Abstract.Value.External
-  type 'a or_unit = Unit | Value of 'a
-  type structured = (module Structured) or_unit
-  type interactive = (module Interactive) or_unit
+  type 'c interactive_module = (module Interactive with type context = 'c)
+  type 'c interactive = ('c context, 'c interactive_module) or_unit
+
+
+  (* Initial value builder *)
+  let init (context : 'c context) : 'c structured = Unit context
+
+  (* During the complete abstraction build, we need to verify that there is at
+     least one value in the computed abstraction.
+     TODO: better error handling. *)
+  let assert_not_unit = function
+    | Unit _ -> Self.fatal "The built value cannot be unit."
+    | Value interactive -> interactive
+
 
   (* Making a structured value interactive simply consists of adding the
-     needed operations using the Structure.Open functor.*)
-  let make_interactive : structured -> interactive = function
-    | Unit -> Unit
+     needed operations using the Structure.Open functor. *)
+  let make_interactive : type c. c structured -> c interactive = function
+    | Unit context -> Unit context
     | Value (module Structured) ->
       Value (module struct
-        include Structured
-        include Structure.Open (Abstract.Value) (Structured)
+        include Structured.Value
+        include Structure.Open (Abstract.Value) (Structured.Value)
       end)
 
+  (* Retrieves the context contained in a structured value. *)
+  let get_context : type c. c structured -> c context = function
+    | Unit context -> context
+    | Value (module V) -> (module V.Context)
+
+
   (* Adding a registered value into a structured one consists of deciding if
      a product is needed (which comes down to checking if the registered
      value key we want to add is not in the structure), computing it, and
      updating the structure. *)
-  let add : type v. v value -> structured -> structured =
-    fun (module Val) structured ->
-    let leaf = Abstract.Value.Leaf (Val.key, (module Val)) in
-    match make_interactive structured with
-    | Unit ->
-      Value (module struct
-        include Val
-        let structure = leaf
-      end)
-    | Value (module Interactive) when not (Interactive.mem Val.key) ->
-      Value (module struct
-        include Value_product.Make (Interactive) (Val)
-        let structure = Abstract.Value.Node (Interactive.structure, leaf)
-      end)
-    | _ -> structured
-
-  (* The minimal value abstraction to use. *)
-  let init : structured = Unit
-
-  (* During the complete abstraction build, we need to verify that there is at
-     least one value in the computed abstraction.
-     TODO: better error handling. *)
-  let assert_not_unit = function
-    | Unit -> Self.fatal "The built value cannot be unit."
-    | Value interactive -> interactive
+  let add : type c v. v value -> c structured -> c structured =
+    fun (module Leaf) structured ->
+    let leaf_context_structure = Context.outline Leaf.context in
+    let module To = (val get_context structured) in
+    let lifted_leaf : (module Abstract.Value.Internal with type context = c) =
+      match Context.dec_eq leaf_context_structure To.structure with
+      | Some Eq ->
+        let leaf = Abstract.Value.Leaf (Leaf.key, (module Leaf)) in
+        (module struct include Leaf let structure = leaf end)
+      | None ->
+        let module From = struct
+          type context = Leaf.context
+          let structure = leaf_context_structure
+        end in
+        let module Converter = Context.Converter (From) (To) in
+        (module Value_lift.Make (Leaf) (Converter))
+    in
+    let combined : (module Abstract.Value.Internal with type context = c) =
+      match make_interactive structured with
+      | Unit _ -> lifted_leaf
+      | Value (module Val) when Val.mem Leaf.key -> (module Val)
+      | Value (module Val) ->
+        (module Value_product.Make (To) (val lifted_leaf) (Val))
+    in
+    Value (module struct
+      type context = c
+      module Context = To
+      module Value = (val combined)
+    end)
 
 
   (* When building the complete abstraction, we need to trick locations and
@@ -107,6 +265,7 @@ module Value = struct
      This functor is responsible of building such conversion operations. *)
   module type From = sig type value val structure : value structure end
   module Converter (From : From) (To : Interactive) = struct
+    type internal = From.value
     type extended = To.t
     let structure = From.structure
 
@@ -154,19 +313,27 @@ module Location = struct
 
   (* Folding over values dependencies *)
   type 'a folder = { folder : 'l. 'l location -> 'a -> 'a }
-  let rec fold : type v. 'a folder -> v dependencies -> 'a -> 'a =
+  let rec fold : type l. 'a folder -> l dependencies -> 'a -> 'a =
     fun folder dependencies acc ->
     match dependencies with
     | Leaf leaf -> folder.folder leaf acc
     | Node (l, r) -> fold folder l (fold folder r acc)
 
   (* Folding over the values dependencies of some locations dependencies. *)
-  let rec fold_values : type v. 'a Value.folder -> v dependencies -> 'a -> 'a =
+  let rec fold_values : type l. 'a Value.folder -> l dependencies -> 'a -> 'a =
     fun folder dependencies acc ->
     match dependencies with
-    | Leaf (module R) -> Value.fold folder R.value acc
+    | Leaf (module Loc) -> Value.fold folder Loc.value acc
     | Node (l, r) -> fold_values folder l (fold_values folder r acc)
 
+  (* Folding over contexts dependencies of the value dependencies of some
+     locations dependencies. *)
+  let rec fold_contexts : type l. 'a Context.folder -> l dependencies -> 'a -> 'a =
+    fun folder dependencies acc ->
+    match dependencies with
+    | Leaf (module Loc) -> Value.fold_contexts folder Loc.value acc
+    | Node (l, r) -> fold_contexts folder l (fold_contexts folder r acc)
+
 
   (* As for the value abstraction, building the location abstraction consists
      of structuring the needed registered locations and then adding the needed
@@ -269,6 +436,7 @@ module Location = struct
      responsible of building such conversion operations. *)
   module type From = sig type location val structure : location structure end
   module Converter (From : From) (To : Interactive) = struct
+    type internal = From.location
     type extended = To.location
     let structure = From.structure
 
@@ -301,15 +469,19 @@ end
 
 module Domain = struct
   module type S = Abstract_domain.S
+  module type Context = Abstract.Context.External
+  module type Value = Abstract.Value.External
 
   (** Functor domain which can be built over any value abstractions, but with
       fixed locations dependencies. *)
   module type Functor = sig
     type location
     val location_dependencies: location Abstract_location.dependencies
-    module Make (V : Abstract.Value.External) : sig
+    module Make (C : Context) (V : Value with type context = C.t) : sig
       include Abstract_domain.S
-        with type value = V.t and type location = location
+        with type context = C.t
+         and type value = V.t
+         and type location = location
       val key : state Abstract_domain.key
     end
   end
@@ -366,36 +538,59 @@ module Domain = struct
     let make () = { name ; experimental ; priority ; abstraction = make () } in
     dynamic_domains := (name, make) :: !dynamic_domains
 
+
   (* Building the domain abstraction consists of structuring the requested
      registered domains. To do so, we need to keep track of the values and
      locations abstraction on which the structured domain will rely. Those
      abstractions are supposed to be the complete aggregations of all the
      values (resp locations) that are needed by the requested domains. *)
   module type Structured = sig
+    type context
     type value
     type location
-    module Value : Value.Interactive with type t = value
+    module Context : Context.Interactive
+      with type t = context
+    module Value : Value.Interactive
+      with type context = context
+       and type t = value
     module Location : Location.Interactive
-      with type value = value and type location = location
+      with type value = value
+       and type location = location
     module Domain : Abstract.Domain.Internal
-      with type value = value and type location = location
+      with type context = context
+       and type value = value
+       and type location = location
   end
 
-  (* As for the value and location abstractions, a [Unit] structured domain is
-     used for the initial state. *)
-  type ('v, 'l, 's) or_unit = Unit of 'v * 'l | State of 's
-  type 'v value = (module Value.Interactive with type t = 'v)
+  type 'c context =
+    (module Context.Interactive with type t = 'c)
+
+  type ('c, 'v) value =
+    (module Value.Interactive with type context = 'c and type t = 'v)
+
   type ('v, 'l) location =
     (module Location.Interactive with type value = 'v and type location = 'l)
-  type ('v, 'l) structured_module =
-    (module Structured with type value = 'v and type location = 'l)
-  type ('v, 'l) structured =
-    ('v value, ('v, 'l) location, ('v, 'l) structured_module) or_unit
 
-  (* Recovers the value and location abstractions of a structured domain. *)
-  let get : type v l. (v, l) structured -> v value * (v, l) location = function
-    | Unit (value, location) -> (value, location)
-    | State (module S) -> ((module S.Value), (module S.Location))
+  type ('c, 'v, 'l) state =
+    (module Structured
+      with type context = 'c
+       and type value = 'v
+       and type location = 'l)
+
+  type ('c, 'v, 'l, 's) or_unit = Unit of 'c * 'v * 'l | State of 's
+
+  type ('c, 'v, 'l) structured =
+    ('c context, ('c, 'v) value, ('v, 'l) location, ('c, 'v, 'l) state) or_unit
+
+  (* Internal type used for intermediate results of the add procedure. *)
+  type ('c, 'v, 'l) structured_domain =
+    (module Abstract.Domain.Internal
+      with type context = 'c
+       and type value = 'v
+       and type location = 'l)
+
+
+  let init c v l : ('c, 'v, 'l) structured = Unit (c, v, l)
 
   (* During the complete abstraction build, we need to verify that there is at
      least one domain in the computed abstraction.
@@ -404,100 +599,124 @@ module Domain = struct
     | Unit _ -> Self.fatal "The built domain cannot be unit."
     | State structured -> structured
 
+  module type Typ = sig type t [@@warning "-34"] end
+  type 't typ = (module Typ with type t = 't)
 
-  (* Internal type used for intermediate results of the add procedure. *)
-  type ('v, 'l) structured_domain =
-    (module Abstract.Domain.Internal with type value = 'v and type location = 'l)
+  type ('internal, 'extended) conversion =
+    (module Domain_lift.Conversion
+      with type extended = 'extended
+       and type internal = 'internal)
 
-  (* Utility function used to create an identity converter. *)
-  module type Typ = sig type t end
-  let conversion_id (type t) (module T: Typ with type t = t) =
+  let conversion_id (type t) (_ : t typ) : (t, t) conversion =
     (module struct
-      type extended = T.t
-      type internal = T.t
+      type extended = t
+      type internal = t
       let extend x = x
       let restrict x = x
-    end: Domain_lift.Conversion with type extended = t and type internal = t)
+    end)
+
+  let context : type c v l. (c, v, l) structured -> c context = function
+    | Unit (context, _, _) -> context
+    | State (module S) -> (module S.Context)
+
+  let value : type c v l. (c, v, l) structured -> (c, v) value = function
+    | Unit (_, value, _) -> value
+    | State (module S) -> (module S.Value)
+
+  let location : type c v l. (c, v, l) structured -> (v, l) location = function
+    | Unit (_, _, location) -> location
+    | State (module S) -> (module S.Location)
+
+  type 'a identity = 'a -> 'a
+  type ('c, 'v, 'l) name = string -> ('c, 'v, 'l) structured_domain identity
+
+  (* Change [Domain.register_global_state] to take -eva-no-results-domain into
+     account, according to the domain name. Need to be applied after the domain
+     has been built, in case of a domain functor. *)
+  let use_no_results : type c v l. (c, v, l) name = fun name (module D) ->
+    let register = D.Store.register_global_state in
+    let results () = not (Parameters.NoResultsDomains.mem name) in
+    let f storage state = register (storage && results ()) state in
+    let module S = struct include D.Store let register_global_state = f end in
+    (module struct include D module Store = S end)
+
 
   (* Adding a registered domain into a structured one consists of performing a
      lifting of the registered one if needed before performing the product,
      configuring the name and restricting the domain depending of the mode. *)
-  type add_input = registered_with_mode
-  let add : type v l. add_input -> (v, l) structured -> (v, l) structured =
-    fun (registered, mode) structured ->
+  type input = registered_with_mode
+  type ('c, 'v, 'l) add = input -> ('c, 'v, 'l) structured identity
+  let add : type c v l. (c, v, l) add = fun (registered, mode) structured ->
     let wkey = Self.wkey_experimental in
     let { experimental = exp ; name } = registered in
     if exp then Self.warning ~wkey "The %s domain is experimental." name ;
-    let value, location = get structured in
-    let module Val = (val value) in
-    let module Loc = (val location) in
-    let lifted : (v, l) structured_domain =
+    let module Ctx = (val context structured) in
+    let module Val = (val value structured) in
+    let module Loc = (val location structured) in
+    let lifted : (c, v, l) structured_domain =
       match registered.abstraction with
       | Functor (module Functor) ->
         let locs = Location.outline Functor.location_dependencies in
         let eq_loc = Location.dec_eq locs Loc.structure in
-        let module D = Functor.Make (Val) in
+        let module D = Functor.Make (Ctx) (Val) in
         begin match eq_loc with
           | Some Eq ->
-            (module struct
-              include D
-              let structure = Abstract.Domain.Leaf (D.key, (module D))
-            end)
+            let structure = Abstract.Domain.Leaf (D.key, (module D)) in
+            (module struct include D let structure = structure end)
           | None ->
+            let module Ctx = (val conversion_id (module Ctx)) in
             let module Val = (val conversion_id (module Val)) in
             let module From = struct include D let structure = locs end in
             let module Loc = Location.Converter (From) (Loc) in
-            (module Domain_lift.Make (D) (Val) (Loc))
+            (module Domain_lift.Make (D) (Ctx) (Val) (Loc))
         end
       | Domain (module D) ->
-        let loc_deps = Location.outline D.location_dependencies in
+        let ctx_deps = Context.outline D.context_dependencies in
         let val_deps = Value.outline D.value_dependencies in
-        let eq_loc = Location.dec_eq loc_deps Loc.structure in
+        let loc_deps = Location.outline D.location_dependencies in
+        let eq_ctx = Context.dec_eq ctx_deps Ctx.structure in
         let eq_val = Value.dec_eq val_deps Val.structure in
-        begin match eq_val, eq_loc with
-          | Some Eq, Some Eq ->
-            (module struct
-              include D
-              let structure = Abstract.Domain.Leaf (D.key, (module D))
-            end)
-          | Some Eq, None ->
-            let module Val = (val conversion_id (module Val)) in
-            let module From = struct include D let structure = loc_deps end in
-            let module Loc = Location.Converter (From) (Loc) in
-            (module Domain_lift.Make (D) (Val) (Loc))
-          | None, Some Eq ->
-            let module From = struct include D let structure = val_deps end in
-            let module Val = Value.Converter (From) (Val) in
-            let module LocTyp = struct type t = Loc.location end in
-            let module Loc = (val conversion_id (module LocTyp)) in
-            (module Domain_lift.Make (D) (Val) (Loc))
-          | _, _ ->
-            let module From = struct include D let structure = val_deps end in
-            let module Val = Value.Converter (From) (Val) in
-            let module From = struct include D let structure = loc_deps end in
-            let module Loc = Location.Converter (From) (Loc) in
-            (module Domain_lift.Make (D) (Val) (Loc))
-        end
+        let eq_loc = Location.dec_eq loc_deps Loc.structure in
+        match eq_ctx, eq_val, eq_loc with
+        | Some Eq, Some Eq, Some Eq ->
+          let structure = Abstract.Domain.Leaf (D.key, (module D)) in
+          (module struct include D let structure = structure end)
+        | _ ->
+          let ctx_converter : (D.context, Ctx.t) conversion =
+            match eq_ctx with
+            | Some Eq -> conversion_id (module Ctx)
+            | None ->
+              let module From = struct include D let structure = ctx_deps end in
+              (module Context.Converter (From) (Ctx))
+          in
+          let val_converter : (D.value, Val.t) conversion =
+            match eq_val with
+            | Some Eq -> conversion_id (module Val)
+            | None ->
+              let module From = struct include D let structure = val_deps end in
+              (module Value.Converter (From) (Val))
+          in
+          let loc_converter : (D.location, Loc.location) conversion =
+            match eq_loc with
+            | Some Eq -> conversion_id (module (struct type t = Loc.location end))
+            | None ->
+              let module From = struct include D let structure = loc_deps end in
+              (module Location.Converter (From) (Loc))
+          in
+          (module Domain_lift.Make (D)
+               (val ctx_converter) (val val_converter) (val loc_converter))
     in
-    (* Set the name of the domain. *)
-    let module Named = struct
-      include (val lifted)
-      module Store = struct
-        include Store
-        let register_global_state storage state =
-          let no_results = Parameters.NoResultsDomains.mem registered.name in
-          register_global_state (storage && not no_results) state
-      end
-    end in
+    (* Take -eva-no-results-domain into account for this domain. *)
+    let lifted = use_no_results registered.name lifted in
     (* Restricts the domain according to [mode]. *)
-    let restricted : (v, l) structured_domain =
+    let restricted : (c, v, l) structured_domain =
       match mode with
-      | None -> (module Named)
+      | None -> lifted
       | Some kf_modes ->
         let module Scope = struct let functions = kf_modes end in
-        (module Domain_builder.Restrict (Val) (Named) (Scope))
+        (module Domain_builder.Restrict (Ctx) (Val) (val lifted) (Scope))
     in
-    let combined : (v, l) structured_domain =
+    let combined : (c, v, l) structured_domain =
       match structured with
       | Unit _ -> restricted
       | State (module Structured) ->
@@ -505,52 +724,65 @@ module Domain = struct
            will be processed before the domains from [Acc.Dom] during the
            analysis. *)
         let module Dom = Structured.Domain in
-        (module Domain_product.Make (Val) (val restricted) (Dom))
+        (module Domain_product.Make (Ctx) (Val) (Loc) (val restricted) (Dom))
     in
     State (module struct
+      type context = c
       type value = v
       type location = l
+      module Context = Ctx
       module Value = Val
       module Location = Loc
       module Domain = (val combined)
     end)
 
 
-  (* Build a complete abstraction based on a list of registered domains and a
-     value initial configuration. *)
-  let build domains : (module Structured) =
-    let values =
-      let add_value = Value.{ folder = add } in
-      let add_values values (registered, _) =
-        match registered.abstraction with
-        | Domain (module Domain) ->
-          Value.fold add_value Domain.value_dependencies values |>
-          Location.fold_values add_value Domain.location_dependencies
-        | Functor (module F) ->
-          Location.fold_values add_value F.location_dependencies values
-      in
-      List.fold_left add_values Value.init domains |>
-      Value.make_interactive
-    in
-    let module V = (val Value.assert_not_unit values) in
-    let locations =
-      let init : V.t Location.structured = Location.init (module V) in
-      let add = Location.{ folder = add } in
-      let add_locations locs (registered, _) =
-        match registered.abstraction with
-        | Domain  (module D) -> Location.fold add D.location_dependencies locs
-        | Functor (module D) -> Location.fold add D.location_dependencies locs
-      in
-      List.fold_left add_locations init domains |>
-      Location.make_interactive
-    in
-    let module L = (val Location.assert_not_unit locations) in
-    let structured : (V.t, L.location) structured =
-      Unit ((module V), (module L))
-    in
-    let structured = List.fold_left (fun s d -> add d s) structured domains in
-    let module Structured : Structured = (val assert_not_unit structured) in
-    (module Structured)
+
+  let add_contexts contexts (registered, _mode) =
+    let add_context = Context.{ folder = add } in
+    match registered.abstraction with
+    | Domain (module Domain) ->
+      Context.fold add_context Domain.context_dependencies contexts |>
+      Value.fold_contexts add_context Domain.value_dependencies |>
+      Location.fold_contexts add_context Domain.location_dependencies
+    | Functor (module F) ->
+      Location.fold_contexts add_context F.location_dependencies contexts
+
+  let add_values values (registered, _) =
+    let add_value = Value.{ folder = add } in
+    match registered.abstraction with
+    | Domain (module Domain) ->
+      Value.fold add_value Domain.value_dependencies values |>
+      Location.fold_values add_value Domain.location_dependencies
+    | Functor (module F) ->
+      Location.fold_values add_value F.location_dependencies values
+
+  let add_locations locs (registered, _) =
+    let add = Location.{ folder = add } in
+    match registered.abstraction with
+    | Domain  (module D) -> Location.fold add D.location_dependencies locs
+    | Functor (module D) -> Location.fold add D.location_dependencies locs
+
+  let build domains =
+    (* Build the contexts *)
+    let contexts = List.fold_left add_contexts Context.init domains in
+    let interactive_ctx c = Context.(make_interactive c |> assert_not_unit) in
+    let module Contexts = (val interactive_ctx contexts) in
+    (* Build the values *)
+    let init_values = Value.init (module Contexts) in
+    let values = List.fold_left add_values init_values domains in
+    let interactive_value v = Value.(make_interactive v |> assert_not_unit) in
+    let module Values = (val interactive_value values) in
+    (* Build the locations *)
+    let init_locations = Location.init (module Values) in
+    let locations = List.fold_left add_locations init_locations domains in
+    let interactive_loc l = Location.(make_interactive l |> assert_not_unit) in
+    let module Locs = (val interactive_loc locations) in
+    (* Build the domains *)
+    let init_domain = init (module Contexts) (module Values) (module Locs) in
+    let structured = List.fold_left (fun s d -> add d s) init_domain domains in
+    let module Structured = (val assert_not_unit structured) in
+    (module Structured : Structured)
 end
 
 
@@ -631,16 +863,20 @@ end
 (* --- Finalizing abstractions build ---------------------------------------- *)
 
 module type S = sig
-  module Val : Value_with_reduction
+  module Ctx : Abstract.Context.External
+  module Val : Value_with_reduction with type context = Ctx.t
   module Loc : Abstract.Location.External with type value = Val.t
   module Dom : Abstract.Domain.External
-    with type value = Val.t and type location = Loc.location
+    with type value = Val.t
+     and type location = Loc.location
+     and type context = Ctx.t
 end
 
 module type S_with_evaluation = sig
   include S
   module Eval : Evaluation_sig.S
     with type state = Dom.t
+     and type context = Ctx.t
      and type value = Val.t
      and type loc = Loc.location
      and type origin = Dom.origin
@@ -654,6 +890,7 @@ module Hooks = struct
 end
 
 module Open (Structured : Domain.Structured) : S = struct
+  module Ctx = Structured.Context
   module Val = Reducer.Make (Structured.Value)
   module Loc = Structured.Location
   module Dom = struct
diff --git a/src/plugins/eva/engine/abstractions.mli b/src/plugins/eva/engine/abstractions.mli
index 395c1000004fd1daa3e1da233835ac06ded88787..482ba65653723a6e2e7bd07bd95083c5b1c8052d 100644
--- a/src/plugins/eva/engine/abstractions.mli
+++ b/src/plugins/eva/engine/abstractions.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -49,14 +49,19 @@ module Domain : sig
     name:string -> descr:string -> ?experimental:bool -> ?priority:int ->
     (unit -> (module Abstract_domain.Leaf)) -> unit
 
+  module type Context = Abstract.Context.External
+  module type Value = Abstract.Value.External
+
   (** Functor domain which can be built over any value abstractions, but with
       fixed locations dependencies. *)
   module type Functor = sig
     type location
     val location_dependencies: location Abstract_location.dependencies
-    module Make (V : Abstract.Value.External) : sig
+    module Make (C : Context) (V : Value with type context = C.t) : sig
       include Abstract_domain.S
-        with type value = V.t and type location = location
+        with type context = C.t
+         and type value = V.t
+         and type location = location
       val key : state Abstract_domain.key
     end
   end
@@ -114,12 +119,15 @@ module type Value_with_reduction = sig
   val reduce : t -> t
 end
 
-(** The three abstractions used in an Eva analysis. *)
+(** The four abstractions used in an Eva analysis. *)
 module type S = sig
-  module Val : Value_with_reduction
+  module Ctx : Abstract.Context.External
+  module Val : Value_with_reduction with type context = Ctx.t
   module Loc : Abstract.Location.External with type value = Val.t
   module Dom : Abstract.Domain.External
-    with type value = Val.t and type location = Loc.location
+    with type value = Val.t
+     and type location = Loc.location
+     and type context = Ctx.t
 end
 
 (* The three abstractions plus an evaluation engine for these abstractions. *)
@@ -127,6 +135,7 @@ module type S_with_evaluation = sig
   include S
   module Eval : Evaluation_sig.S
     with type state = Dom.t
+     and type context = Ctx.t
      and type value = Val.t
      and type loc = Loc.location
      and type origin = Dom.origin
diff --git a/src/plugins/eva/engine/analysis.ml b/src/plugins/eva/engine/analysis.ml
index de72e68303aecbedcf173f33f8fa3c3dcc470063..35c262f48a1521c73ef8a8ea43de22c78aa67c84 100644
--- a/src/plugins/eva/engine/analysis.ml
+++ b/src/plugins/eva/engine/analysis.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -95,7 +95,7 @@ module Make (Abstract: Abstractions.S) = struct
 
   module Abstract = struct
     include Abstract
-    module Eval = Evaluation.Make (Val) (Loc) (Dom)
+    module Eval = Evaluation.Make (Ctx) (Val) (Loc) (Dom)
   end
 
   include Abstract
@@ -139,7 +139,7 @@ module Make (Abstract: Abstractions.S) = struct
   let copy_lvalue state expr = Eval.copy_lvalue state expr >>=: snd
 
   let eval_lval_to_loc state lv =
-    let get_loc (_, loc, _) = loc in
+    let get_loc (_, loc) = loc in
     let for_writing = false in
     Eval.lvaluate ~for_writing state lv >>=: get_loc
 
@@ -231,9 +231,5 @@ let compute =
 
 let () = Parameters.ForceValues.set_output_dependencies [Self.state]
 
-let main () =
-  (* Value computations *)
-  if Parameters.ForceValues.get () then compute ();
-  if is_computed () then Red_statuses.report ()
-
+let main () = if Parameters.ForceValues.get () then compute ()
 let () = Boot.Main.extend main
diff --git a/src/plugins/eva/engine/analysis.mli b/src/plugins/eva/engine/analysis.mli
index a495576fb0a9a04a253c937da5542a85177c63ec..736b503e7facf164c0684625919b4af39878cf5c 100644
--- a/src/plugins/eva/engine/analysis.mli
+++ b/src/plugins/eva/engine/analysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/compute_functions.ml b/src/plugins/eva/engine/compute_functions.ml
index 63265847a27f0bd79dc3af7c784c4d61f69777b9..80b2ad866a91af29903f834b106b43b31eb93424 100644
--- a/src/plugins/eva/engine/compute_functions.ml
+++ b/src/plugins/eva/engine/compute_functions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -127,7 +127,8 @@ let post_analysis () =
   Eva_dynamic.RteGen.mark_generated_rte ();
   post_analysis_cleanup ~aborted:false;
   (* Remove redundant alarms *)
-  if Parameters.RmAssert.get () then Eva_dynamic.Scope.rm_asserts ()
+  if Parameters.RmAssert.get () then Eva_dynamic.Scope.rm_asserts ();
+  Red_statuses.report ()
 
 (* Registers signal handlers for SIGUSR1 and SIGINT to cleanly abort the Eva
    analysis. Returns a function that restores previous signal behaviors after
diff --git a/src/plugins/eva/engine/compute_functions.mli b/src/plugins/eva/engine/compute_functions.mli
index b582766632a43768abdd5399173249071a265a5f..a79baded6ee0196733a51213a200371f0fd2f522 100644
--- a/src/plugins/eva/engine/compute_functions.mli
+++ b/src/plugins/eva/engine/compute_functions.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/evaluation.ml b/src/plugins/eva/engine/evaluation.ml
index 84e733c6df405f9918dcb0daf26aab1ad41cd283..b2c7612309d6ec61dd52cb24c6206d94bf1d94fb 100644
--- a/src/plugins/eva/engine/evaluation.ml
+++ b/src/plugins/eva/engine/evaluation.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -24,6 +24,7 @@
 
 open Cil_types
 open Eval
+open Eva_ast
 
 (* The forward evaluation of an expression [e] gives a value to each subterm
    of [e], from its variables to the root expression [e]. It also computes the
@@ -128,7 +129,9 @@ let rec may_be_reduced_offset = function
   | Field (_, offset) -> may_be_reduced_offset offset
   | Index _ -> true
 
-let may_be_reduced_lval (host, offset) = match host with
+let may_be_reduced_lval lval =
+  let (host, offset) = lval.node in
+  match host with
   | Var _ -> may_be_reduced_offset offset
   | Mem _ -> true
 
@@ -166,23 +169,6 @@ let rec signed_counterpart typ =
   | TPtr _ -> signed_counterpart Cil.(theMachine.upointType)
   | _ -> assert false
 
-module MemoDowncastConvertedAlarm =
-  State_builder.Hashtbl
-    (Cil_datatype.Exp.Hashtbl)
-    (Cil_datatype.Exp)
-    (struct
-      let name = "Value.Evaluation.MemoDowncastConvertedAlarm"
-      let size = 16
-      let dependencies = [ Ast.self ]
-    end)
-let exp_alarm_signed_converted_downcast =
-  MemoDowncastConvertedAlarm.memo
-    (fun exp ->
-       let src_typ = Cil.typeOf exp in
-       let signed_typ = signed_counterpart src_typ in
-       let signed_exp = Cil.new_exp ~loc:exp.eloc (CastE (signed_typ, exp)) in
-       signed_exp)
-
 let return t = `Value t, Alarmset.none
 
 (* Intersects [alarms] with the only possible alarms from the dereference of
@@ -242,19 +228,22 @@ module type Queries = sig
 end
 
 module Make
-    (Value : Value)
+    (Context : Abstract_context.S)
+    (Value : Value with type context = Context.t)
     (Loc : Abstract_location.S with type value = Value.t)
-    (Domain : Queries with type value = Value.t
+    (Domain : Queries with type context = Context.t
+                       and type value = Value.t
                        and type location = Loc.location)
 = struct
 
   type state = Domain.state
+  type context = Context.t
   type value = Value.t
   type origin = Domain.origin
   type loc = Loc.location
 
-  module ECache = Cil_datatype.ExpStructEq.Map
-  module LCache = Cil_datatype.LvalStructEq.Map
+  module ECache = Eva_ast.Exp.Map
+  module LCache = Eva_ast.Lval.Map
 
   (* Imperative cache for the evaluation:
      all intermediate results of an evaluation are cached here.
@@ -399,7 +388,11 @@ module Make
     | _ -> false
 
   let truncate_bound overflow_kind bound bound_kind expr value =
-    let alarm () = Alarms.Overflow (overflow_kind, expr, bound, bound_kind) in
+    let alarm () =
+      (* The expression does not necessary come from the original program *)
+      let cil_expr = Eva_ast.to_cil_exp expr in
+      Alarms.Overflow (overflow_kind, cil_expr, bound, bound_kind)
+    in
     let bound = Abstract_value.Int bound in
     let truth = Value.assume_bounded bound_kind bound value in
     interpret_truth ~alarm value truth
@@ -418,26 +411,27 @@ module Make
     truncate_lower_bound overflow_kind expr range value >>= fun value ->
     truncate_upper_bound overflow_kind expr range value
 
-  let handle_integer_overflow expr range value =
+  let handle_integer_overflow context expr range value =
     let signed = range.Eval_typ.i_signed in
-    if (signed && Kernel.SignedOverflow.get ()) ||
-       (not signed && Kernel.UnsignedOverflow.get ())
-    then
+    let signed_overflow = signed && Kernel.SignedOverflow.get () in
+    let unsigned_overflow = not signed && Kernel.UnsignedOverflow.get () in
+    if signed_overflow || unsigned_overflow then
       let overflow_kind = if signed then Alarms.Signed else Alarms.Unsigned in
       truncate_integer overflow_kind expr range value
     else
-      let v = Value.rewrap_integer range value in
-      if range.Eval_typ.i_signed && not (Value.equal value v)
-      then Self.warning ~wkey:Self.wkey_signed_overflow
-          ~current:true ~once:true "2's complement assumed for overflow";
+      let v = Value.rewrap_integer context range value in
+      if range.Eval_typ.i_signed && not (Value.equal value v) then
+        Self.warning ~wkey:Self.wkey_signed_overflow
+          ~current:true ~once:true "2's complement assumed for overflow" ;
       return v
 
   let restrict_float ?(reduce=false) ~assume_finite expr fkind value =
     let truth = Value.assume_not_nan ~assume_finite fkind value in
     let alarm () =
+      let cil_expr = Eva_ast.to_cil_exp expr in
       if assume_finite
-      then Alarms.Is_nan_or_infinite (expr, fkind)
-      else Alarms.Is_nan (expr, fkind)
+      then Alarms.Is_nan_or_infinite (cil_expr, fkind)
+      else Alarms.Is_nan (cil_expr, fkind)
     in
     if reduce
     then reduce_by_truth ~alarm (expr, value) truth
@@ -450,21 +444,21 @@ module Make
     | "non-finite" -> restrict_float ~assume_finite:true expr fk value
     | _            -> assert false
 
-  let assume_pointer expr value =
-    let value, alarms =
-      if Kernel.InvalidPointer.get ()
-      then
+  let assume_pointer context expr value =
+    let open Evaluated.Operators in
+    let+ value =
+      if Kernel.InvalidPointer.get () then
         let truth = Value.assume_pointer value in
-        let alarm () = Alarms.Invalid_pointer expr in
+        let alarm () = Alarms.Invalid_pointer (Eva_ast.to_cil_exp expr) in
         interpret_truth ~alarm value truth
       else return value
     in
     (* Rewrap absolute addresses of pointer values, seen as unsigned
        integers, to ensure a consistent representation of pointers. *)
     let range = Eval_typ.pointer_range () in
-    value >>-: Value.rewrap_integer range, alarms
+    Value.rewrap_integer context range value
 
-  let handle_overflow ~may_overflow expr typ value =
+  let handle_overflow ~may_overflow context expr typ value =
     match Eval_typ.classify_as_scalar typ with
     | Some (Eval_typ.TSInt range) ->
       (* If the operation cannot overflow, truncates the abstract value to the
@@ -474,80 +468,88 @@ module Make
          the parameters of the analysis. *)
       if not may_overflow
       then fst (truncate_integer Alarms.Signed expr range value), Alarmset.none
-      else handle_integer_overflow expr range value
+      else handle_integer_overflow context expr range value
     | Some (Eval_typ.TSFloat fk) -> remove_special_float expr fk value
-    | Some (Eval_typ.TSPtr _) -> assume_pointer expr value
+    | Some (Eval_typ.TSPtr _) -> assume_pointer context expr value
     | None -> return value
 
   (* Assumes that [res] is a valid result for the lvalue [lval] of type [typ].
      Removes NaN and infinite floats and trap representations of bool values. *)
-  let assume_valid_value typ lval res =
-    match typ with
+  let assume_valid_value context lval res =
+    let open Evaluated.Operators in
+    let* value, origin = res in
+    match Cil.unrollType lval.typ with
     | TFloat (fkind, _) ->
-      res >>= fun (value, origin) ->
-      let expr = Eva_utils.lval_to_exp lval in
-      remove_special_float expr fkind value >>=: fun new_value ->
+      let expr = Eva_ast.Build.lval lval in
+      let+ new_value = remove_special_float expr fkind value in
+      new_value, origin
+    | TInt (IBool, _) when Kernel.InvalidBool.get () ->
+      let one = Abstract_value.Int Integer.one in
+      let truth = Value.assume_bounded Alarms.Upper_bound one value in
+      let alarm () = Alarms.Invalid_bool (Eva_ast.to_cil_lval lval) in
+      let+ new_value = interpret_truth ~alarm value truth in
       new_value, origin
-    | TInt (IBool, _) ->
-      if Kernel.InvalidBool.get () then
-        res >>= fun (value, origin) ->
-        let one = Abstract_value.Int Integer.one in
-        let truth = Value.assume_bounded Alarms.Upper_bound one value in
-        let alarm () = Alarms.Invalid_bool lval in
-        interpret_truth ~alarm value truth >>=: fun new_value ->
-        new_value, origin
-      else res
     | TPtr _ ->
-      res >>= fun (value, origin) ->
-      let expr = Eva_utils.lval_to_exp lval in
-      assume_pointer expr value >>=: fun new_value ->
+      let expr = Eva_ast.Build.lval lval in
+      let+ new_value = assume_pointer context expr value in
       new_value, origin
     | _ -> res
 
   (* Reduce the rhs argument of a shift so that it fits inside [size] bits. *)
   let reduce_shift_rhs typ expr value =
+    let open Evaluated.Operators in
     let size = Cil.bitsSizeOf typ in
     let size_int = Abstract_value.Int (Integer.of_int (size - 1)) in
     let zero_int = Abstract_value.Int Integer.zero in
-    let alarm () = Alarms.Invalid_shift (expr, Some size) in
+    let alarm () =
+      Alarms.Invalid_shift (Eva_ast.to_cil_exp expr, Some size)
+    in
     let truth = Value.assume_bounded Alarms.Lower_bound zero_int value in
-    reduce_by_truth ~alarm (expr, value) truth >>= fun value ->
+    let* value = reduce_by_truth ~alarm (expr, value) truth in
     let truth = Value.assume_bounded Alarms.Upper_bound size_int value in
     reduce_by_truth ~alarm (expr, value) truth
 
   (* Reduces the right argument of a shift, and if [warn_negative] is true,
      also reduces its left argument to a positive value. *)
   let reduce_shift ~warn_negative typ (e1, v1) (e2, v2) =
-    reduce_shift_rhs typ e2 v2 >>= fun v2 ->
-    if warn_negative && Bit_utils.is_signed_int_enum_pointer typ
-    then
+    let open Evaluated.Operators in
+    let* v2 = reduce_shift_rhs typ e2 v2 in
+    if warn_negative && Bit_utils.is_signed_int_enum_pointer typ then
       (* Cannot shift a negative value *)
       let zero_int = Abstract_value.Int Integer.zero in
-      let alarm () = Alarms.Invalid_shift (e1, None) in
+      let alarm () =
+        Alarms.Invalid_shift (Eva_ast.to_cil_exp e1, None)
+      in
       let truth = Value.assume_bounded Alarms.Lower_bound zero_int v1 in
-      reduce_by_truth ~alarm (e1, v1) truth >>=: fun v1 ->
+      let+ v1 = reduce_by_truth ~alarm (e1, v1) truth in
       v1, v2
     else return (v1, v2)
 
   (* Emits alarms for an index out of bound, and reduces its value. *)
   let assume_valid_index ~size ~size_expr ~index_expr value =
+    let open Evaluated.Operators in
     let size_int = Abstract_value.Int (Integer.pred size) in
     let zero_int = Abstract_value.Int Integer.zero in
-    let alarm () = Alarms.Index_out_of_bound (index_expr, None) in
+    let alarm () =
+      Alarms.Index_out_of_bound (Eva_ast.to_cil_exp index_expr, None)
+    in
     let truth = Value.assume_bounded Alarms.Lower_bound zero_int value in
-    reduce_by_truth ~alarm (index_expr, value) truth >>= fun value ->
-    let alarm () = Alarms.Index_out_of_bound (index_expr, Some size_expr) in
+    let* value = reduce_by_truth ~alarm (index_expr, value) truth in
+    let alarm () =
+      Alarms.Index_out_of_bound (Eva_ast.to_cil_exp index_expr, Some size_expr)
+    in
     let truth = Value.assume_bounded Alarms.Upper_bound size_int value in
     reduce_by_truth ~alarm (index_expr, value) truth
 
   let assume_valid_binop typ (e1, v1 as arg1) op (e2, v2 as arg2) =
-    if Cil.isIntegralType typ
-    then
+    let open Evaluated.Operators in
+    if Cil.isIntegralType typ then
       match op with
       | Div | Mod ->
         let truth = Value.assume_non_zero v2 in
-        let alarm () = Alarms.Division_by_zero e2 in
-        reduce_by_truth ~alarm arg2 truth >>=: fun v2 -> v1, v2
+        let alarm () = Alarms.Division_by_zero (Eva_ast.to_cil_exp e2) in
+        let+ v2 = reduce_by_truth ~alarm arg2 truth in
+        v1, v2
       | Shiftrt ->
         let warn_negative = Kernel.RightShiftNegative.get () in
         reduce_shift ~warn_negative typ arg1 arg2
@@ -557,7 +559,9 @@ module Make
       | MinusPP when Parameters.WarnPointerSubstraction.get () ->
         let kind = Abstract_value.Subtraction in
         let truth = Value.assume_comparable kind v1 v2 in
-        let alarm () = Alarms.Differing_blocks (e1, e2) in
+        let alarm () =
+          Alarms.Differing_blocks (Eva_ast.to_cil_exp e1, Eva_ast.to_cil_exp e2)
+        in
         let arg1 = Some e1, v1 in
         reduce_by_double_truth ~alarm arg1 arg2 truth
       | _ -> return (v1, v2)
@@ -566,25 +570,27 @@ module Make
   (* Pretty prints the result of a comparison independently of the value
      abstractions used. *)
   let pretty_zero_or_one fmt v =
-    let str =
-      if Value.(equal v zero) then "{0}"
-      else if Value.(equal v one) then "{1}"
-      else "{0; 1}"
-    in
-    Format.fprintf fmt "%s" str
+    let print = Format.pp_print_string fmt in
+    if Value.(equal v zero) then print "{0}"
+    else if Value.(equal v one) then print "{1}"
+    else print "{0; 1}"
 
   let forward_comparison ~compute typ kind (e1, v1) (e2, v2) =
     let truth = Value.assume_comparable kind v1 v2 in
-    let alarm () = Alarms.Pointer_comparison (e1, e2) in
+    let alarm () =
+      let cil_e1 = Option.map Eva_ast.to_cil_exp e1
+      and cil_e2 = Eva_ast.to_cil_exp e2 in
+      Alarms.Pointer_comparison (cil_e1, cil_e2)
+    in
     let propagate_all = propagate_all_pointer_comparison typ in
     let args, alarms =
-      if warn_pointer_comparison typ
-      then if propagate_all
+      if warn_pointer_comparison typ then
+        if propagate_all
         then `Value (v1, v2), snd (interpret_truth ~alarm (v1, v2) truth)
         else reduce_by_double_truth ~alarm (e1, v1) (e2, v2) truth
       else `Value (v1, v2), Alarmset.none
     in
-    let result = args >>- fun (v1, v2) -> compute v1 v2 in
+    let result = let* v1, v2 = args in compute v1 v2 in
     let value =
       if is_true truth || not propagate_all
       then result
@@ -600,26 +606,26 @@ module Make
     in
     value, alarms
 
-  let forward_binop typ (e1, v1 as arg1) op arg2 =
-    let typ_e1 = Cil.unrollType (Cil.typeOf e1) in
+  let forward_binop context typ (e1, v1 as arg1) op arg2 =
+    let open Evaluated.Operators in
+    let typ_e1 = Cil.unrollType e1.typ in
     match comparison_kind op with
     | Some kind ->
-      let compute v1 v2 = Value.forward_binop typ_e1 op v1 v2 in
+      let compute v1 v2 = Value.forward_binop context typ_e1 op v1 v2 in
       (* Detect zero expressions created by the evaluator *)
-      let e1 = if Eva_utils.is_value_zero e1 then None else Some e1 in
+      let e1 = if Eva_ast.is_zero_ptr e1 then None else Some e1 in
       forward_comparison ~compute typ_e1 kind (e1, v1) arg2
     | None ->
-      assume_valid_binop typ arg1 op arg2 >>=. fun (v1, v2) ->
-      Value.forward_binop typ_e1 op v1 v2
+      let& v1, v2 = assume_valid_binop typ arg1 op arg2 in
+      Value.forward_binop context typ_e1 op v1 v2
 
-  let forward_unop unop (e, v as arg) =
-    let typ = Cil.unrollType (Cil.typeOf e) in
-    if unop = LNot
-    then
+  let forward_unop context unop (e, v as arg) =
+    let typ = Cil.unrollType e.typ in
+    if unop = LNot then
       let kind = Abstract_value.Equality in
-      let compute _ v = Value.forward_unop typ unop v in
+      let compute _ v = Value.forward_unop context typ unop v in
       forward_comparison ~compute typ kind (None, Value.zero) arg
-    else Value.forward_unop typ unop v, Alarmset.none
+    else Value.forward_unop context typ unop v, Alarmset.none
 
   (* ------------------------------------------------------------------------
                                     Casts
@@ -628,12 +634,12 @@ module Make
   type integer_range = Eval_typ.integer_range = { i_bits: int; i_signed: bool }
 
   let cast_integer overflow_kind expr ~src ~dst value =
-    let value =
+    let open Evaluated.Operators in
+    let* value =
       if Eval_typ.(Integer.lt (range_lower_bound src) (range_lower_bound dst))
       then truncate_lower_bound overflow_kind expr dst value
       else return value
     in
-    value >>= fun value ->
     if Eval_typ.(Integer.gt (range_upper_bound src) (range_upper_bound dst))
     then truncate_upper_bound overflow_kind expr dst value
     else return value
@@ -642,24 +648,24 @@ module Make
      first converts the value to the signed counterpart of the source type, and
      then downcasts it into the signed destination type. Emits only alarms for
      the second cast. *)
-  let relaxed_signed_downcast expr ~src ~dst value =
+  let relaxed_signed_downcast context expr ~src ~dst value =
     let expr, src, value =
-      if not src.i_signed
-      then
+      if not src.i_signed then
         let signed_src = { src with i_signed = true } in
-        let signed_v = Value.rewrap_integer signed_src value in
-        let signed_exp = exp_alarm_signed_converted_downcast expr in
+        let signed_v = Value.rewrap_integer context signed_src value in
+        let signed_typ = signed_counterpart expr.typ in
+        let signed_exp = Eva_ast.Build.cast signed_typ expr in
         signed_exp, signed_src, signed_v
       else expr, src, value
     in
     cast_integer Alarms.Signed_downcast expr ~src ~dst value
 
-  let cast_int_to_int expr ~ptr ~src ~dst value =
+  let cast_int_to_int context expr ~ptr ~src ~dst value =
     (* Regain some precision in case a transfer function was imprecise.
        This should probably be done in the transfer function, though. *)
     let value =
       if Value.(equal top_int value)
-      then Value.rewrap_integer src value
+      then Value.rewrap_integer context src value
       else value
     in
     if Eval_typ.range_inclusion src dst
@@ -675,8 +681,8 @@ module Make
       if warn ()
       then cast_integer overflow_kind expr ~src ~dst value
       else if dst.i_signed && Parameters.WarnSignedConvertedDowncast.get ()
-      then relaxed_signed_downcast expr ~src ~dst value
-      else return (Value.rewrap_integer dst value)
+      then relaxed_signed_downcast context expr ~src ~dst value
+      else return (Value.rewrap_integer context dst value)
 
   (* Re-export type here *)
   type scalar_typ = Eval_typ.scalar_typ =
@@ -700,49 +706,56 @@ module Make
       then prev_float (Fval.kind fkind) fbound
       else fbound
     in
-    let alarm () = Alarms.Float_to_int (expr, bound, bound_kind) in
+    let alarm () =
+      Alarms.Float_to_int (Eva_ast.to_cil_exp expr, bound, bound_kind)
+    in
     let bound = Abstract_value.Float (float_bound, fkind) in
     let truth = Value.assume_bounded bound_kind bound value in
     reduce_by_truth ~alarm (expr, value) truth
 
   let truncate_float fkind dst_range expr value =
+    let open Evaluated.Operators in
     let max_bound = Eval_typ.range_upper_bound dst_range in
     let bound_kind = Alarms.Upper_bound in
-    truncate_float_bound fkind max_bound bound_kind expr value >>= fun value ->
+    let* value = truncate_float_bound fkind max_bound bound_kind expr value in
     let min_bound = Eval_typ.range_lower_bound dst_range in
     let bound_kind = Alarms.Lower_bound in
     truncate_float_bound fkind min_bound bound_kind expr value
 
-  let forward_cast ~dst expr value =
-    let src = Cil.typeOf expr in
+  let forward_cast context ~dst expr value =
+    let open Evaluated.Operators in
+    let src = expr.typ in
     match Eval_typ.(classify_as_scalar src, classify_as_scalar dst) with
     | None, _ | _, None -> return value (* Unclear whether this happens. *)
     | Some src_type, Some dst_type ->
-      let value, alarms =
+      let& value =
         match src_type, dst_type with
         | TSPtr src, TSInt dst ->
-          cast_int_to_int ~ptr:true ~src ~dst expr value
+          cast_int_to_int context ~ptr:true ~src ~dst expr value
         | TSInt src, (TSInt dst | TSPtr dst) ->
-          cast_int_to_int ~ptr:false ~src ~dst expr value
+          cast_int_to_int context ~ptr:false ~src ~dst expr value
         | TSFloat src, (TSInt dst | TSPtr dst)  ->
-          restrict_float ~reduce:true ~assume_finite:true expr src value >>=
-          truncate_float src dst expr
+          let reduce = true and assume_finite = true in
+          let* value = restrict_float ~reduce ~assume_finite expr src value in
+          truncate_float src dst expr value
         | (TSInt _ | TSPtr _), TSFloat _ ->
           (* Cannot overflow with 32 bits float. *)
           return value
         | TSFloat _, TSFloat _ | TSPtr _, TSPtr _ -> return value
       in
-      value >>- Value.forward_cast ~src_type ~dst_type, alarms
+      Value.forward_cast context ~src_type ~dst_type value
 
   (* ------------------------------------------------------------------------
                                Forward Evaluation
      ------------------------------------------------------------------------ *)
 
-  (* The forward evaluation context: arguments that must be passed through
+  (* The forward evaluation environment: arguments that must be passed through
      the mutually recursive evaluation functions without being modified. *)
-  type context =
+  type recursive_environment =
     { (* The abstract domain state in which the evaluation takes place. *)
       state: Domain.t;
+      (* The abstract context in which the evaluation takes place. *)
+      context: Context.t Abstract_value.enriched;
       (* Is the expression currently processed the "root" expression being
          evaluated, or is it a sub-expression? Useful for domain queries. *)
       root: bool;
@@ -756,27 +769,27 @@ module Make
       remaining_fuel: int;
       (* The oracle which can be used by abstract domains to get a value for
          some expressions. *)
-      oracle: context -> exp -> Value.t evaluated;
+      oracle: recursive_environment -> exp -> Value.t evaluated;
     }
 
-  (* Builds the query to the domain from the context. *)
-  let make_domain_query query context =
-    let { state; oracle; root; subdivision; subdivided; } = context in
-    let oracle = oracle context in
-    let domain_context = Abstract_domain.{ root; subdivision; subdivided; } in
-    query ~oracle domain_context state
+  (* Builds the query to the domain from the environment. *)
+  let make_domain_query query env =
+    let { state; oracle; root; subdivision; subdivided; } = env in
+    let oracle = oracle env in
+    let domain_env = Abstract_domain.{ root; subdivision; subdivided; } in
+    query ~oracle domain_env state
 
   (* Returns the cached value and alarms for the evaluation if it exists;
      call [coop_forward_eval] and caches its result otherwise.
      Also returns a boolean indicating whether the expression is volatile.  *)
-  let rec root_forward_eval context expr =
+  let rec root_forward_eval env expr =
     (* Search in the cache for the result of a previous computation. *)
     try
       let record, report = Cache.find' !cache expr in
       (* If the record was computed with more fuel than [fuel], return it. *)
       if report.fuel = Loop then fuel_consumed := true;
-      if less_fuel_than context.remaining_fuel report.fuel
-      then (record.value.v >>-: fun v -> v, report.volatile), record.val_alarms
+      if less_fuel_than env.remaining_fuel report.fuel
+      then (let+ v = record.value.v in v, report.volatile), record.val_alarms
       else raise Not_found
     (* If no result found, evaluate the expression. *)
     with Not_found ->
@@ -786,25 +799,25 @@ module Make
       (* Fill the cache to avoid loops in the use of the oracle. *)
       cache := Cache.add' !cache expr top_entry;
       (* Evaluation of [expr]. *)
-      let result, alarms = coop_forward_eval context expr in
+      let result, alarms = coop_forward_eval env expr in
       let value =
-        result >>- fun (record, reduction, volatile) ->
+        let* record, reduction, volatile = result in
         (* Put the alarms in the record. *)
         let record = { record with val_alarms = alarms } in
         (* Inter-reduction of the value (in case of a reduced product). *)
         let record = reduce_value record in
         (* Cache the computed result with an appropriate report. *)
-        let fuel = context.remaining_fuel in
+        let fuel = env.remaining_fuel in
         let fuel = if !fuel_consumed then Finite fuel else Infty in
         let report = {fuel; reduction; volatile} in
         cache := Cache.add' !cache expr (record, report);
-        record.value.v >>-: fun v -> v, volatile
+        let+ v = record.value.v in v, volatile
       in
       (* Reset the flag fuel_consumed. *)
       fuel_consumed := previous_fuel_consumed || !fuel_consumed;
       value, alarms
 
-  and forward_eval context expr = root_forward_eval context expr >>=: fst
+  and forward_eval env expr = root_forward_eval env expr >>=: fst
 
   (* The functions below returns, along with the computed value (when it is not
      bottom):
@@ -815,26 +828,26 @@ module Make
   (* Asks the abstract domain for abstractions (value and alarms) of [expr],
      and performs the narrowing with the abstractions computed by
      [internal_forward_eval].  *)
-  and coop_forward_eval context expr =
-    match expr.enode with
-    | Lval lval -> eval_lval context lval
-    | BinOp _ | UnOp _ | CastE _ -> begin
-        let domain_query = make_domain_query Domain.extract_expr context in
-        let context = { context with root = false } in
-        let intern_value, alarms = internal_forward_eval context expr in
-        let domain_value, alarms' = domain_query expr in
-        (* Intersection of alarms, as each sets of alarms are correct
-           and "complete" for the evaluation of [expr]. *)
-        match Alarmset.inter alarms alarms' with
+  and coop_forward_eval env expr =
+    match expr.node with
+    | Lval lval -> eval_lval env lval
+    | BinOp _ | UnOp _ | CastE _ ->
+      let domain_query = make_domain_query Domain.extract_expr env in
+      let env = { env with root = false } in
+      let intern_value, alarms = internal_forward_eval env expr in
+      let domain_value, alarms' = domain_query expr in
+      (* Intersection of alarms, as each sets of alarms are correct
+         and "complete" for the evaluation of [expr]. *)
+      begin match Alarmset.inter alarms alarms' with
         | `Inconsistent ->
           (* May happen for a product of states with no concretization. Such
              cases are reported to the user by transfer_stmt. *)
           `Bottom, Alarmset.none
         | `Value alarms ->
           let v =
-            intern_value >>- fun (intern_value, reduction, volatile) ->
-            domain_value >>- fun (domain_value, origin) ->
-            Value.narrow intern_value domain_value >>-: fun result ->
+            let* intern_value, reduction, volatile = intern_value in
+            let* domain_value, origin = domain_value in
+            let+ result = Value.narrow intern_value domain_value in
             let reductness =
               if Value.equal domain_value result then Unreduced
               else if Value.(equal domain_value top) then Created else Reduced
@@ -849,73 +862,69 @@ module Make
           v, alarms
       end
     | _ ->
-      internal_forward_eval context expr
-      >>=: fun (value, reduction, volatile) ->
-      let value = define_value value
-      and origin = None
-      and reductness = Dull in
-      {value; origin; reductness; val_alarms = Alarmset.all},
-      reduction, volatile
+      let open Evaluated.Operators in
+      let+ value, reduction, volatile = internal_forward_eval env expr in
+      let value = define_value value and origin = None in
+      let reductness = Dull and val_alarms = Alarmset.all in
+      { value; origin; reductness; val_alarms }, reduction, volatile
 
   (* Recursive descent in the sub-expressions. *)
-  and internal_forward_eval context expr =
+  and internal_forward_eval env expr =
+    let open Evaluated.Operators in
     let compute_reduction (v, a) volatile =
-      (v, a) >>=: fun v ->
+      let+ v = (v, a) in
       let reduction = if Alarmset.is_empty a then Neither else Forward in
       v, reduction, volatile
     in
-    match expr.enode with
-    | Const constant -> internal_forward_eval_constant context expr constant
+    match expr.node with
+    | Const constant -> internal_forward_eval_constant env expr constant
     | Lval _lval -> assert false
 
     | AddrOf v | StartOf v ->
-      lval_to_loc context ~for_writing:false ~reduction:false v
-      >>= fun (loc, _, _) ->
-      (Loc.to_value loc, Alarmset.none) >>= fun value ->
-      let v = assume_pointer expr value in
+      let* loc, _ = lval_to_loc env ~for_writing:false ~reduction:false v in
+      let* value = Loc.to_value loc, Alarmset.none in
+      let v = assume_pointer env.context expr value in
       compute_reduction v false
 
     | UnOp (op, e, typ) ->
-      root_forward_eval context e >>= fun (v, volatile) ->
-      forward_unop op (e, v) >>= fun v ->
+      let* v, volatile = root_forward_eval env e in
+      let* v = forward_unop env.context op (e, v) in
       let may_overflow = op = Neg in
-      let v = handle_overflow ~may_overflow expr typ v in
+      let v = handle_overflow ~may_overflow env.context expr typ v in
       compute_reduction v volatile
 
     | BinOp (op, e1, e2, typ) ->
-      root_forward_eval context e1 >>= fun (v1, volatile1) ->
-      root_forward_eval context e2 >>= fun (v2, volatile2) ->
-      forward_binop typ (e1, v1) op (e2, v2) >>= fun v ->
+      let* v1, volatile1 = root_forward_eval env e1 in
+      let* v2, volatile2 = root_forward_eval env e2 in
+      let* v = forward_binop env.context typ (e1, v1) op (e2, v2) in
       let may_overflow = may_overflow op in
-      let v = handle_overflow ~may_overflow expr typ v in
+      let v = handle_overflow ~may_overflow env.context expr typ v in
       compute_reduction v (volatile1 || volatile2)
 
     | CastE (dst, e) ->
-      root_forward_eval context e >>= fun (value, volatile) ->
-      let v = forward_cast ~dst e value in
+      let* value, volatile = root_forward_eval env e in
+      let v = forward_cast env.context ~dst e value in
       let v = match Cil.unrollType dst with
-        | TFloat (fkind, _) -> v >>= remove_special_float expr fkind
-        | TPtr _ -> v >>= assume_pointer expr
+        | TFloat (fkind, _) -> let* v in remove_special_float expr fkind v
+        | TPtr _ -> let* v in assume_pointer env.context expr v
         | _ -> v
       in
       compute_reduction v volatile
 
-    | SizeOf _ | SizeOfE _ | SizeOfStr _ | AlignOf _ | AlignOfE _ ->
-      match Cil.constFoldToInt expr with
-      | Some v -> return (Value.inject_int (Cil.typeOf expr) v, Neither, false)
-      | _      -> return (Value.top_int, Neither, false)
-
-  and internal_forward_eval_constant context expr constant =
-    let eval = match constant with
-      | CEnum {eival = e} -> forward_eval context e
+  and internal_forward_eval_constant env expr constant =
+    let open Evaluated.Operators in
+    let+ value =
+      match constant with
+      | CEnum (_, e) ->
+        forward_eval env e
       | CReal (_f, fkind, _fstring) ->
-        let value = Value.constant expr constant in
+        let value = Value.constant env.context expr constant in
         remove_special_float expr fkind value
       (* Integer constants never overflow, because the front-end chooses a
          suitable type. *)
-      | _ -> return (Value.constant expr constant)
+      | _ -> return (Value.constant env.context expr constant)
     in
-    eval >>=: fun value -> value, Neither, false
+    value, Neither, false
 
 
   (* ------------------------------------------------------------------------
@@ -930,95 +939,90 @@ module Make
      If the location is not bottom, the function also returns the typ of the
      lvalue, and a boolean indicating that the lvalue contains a sub-expression
      with volatile qualifier (in its host or offset). *)
-  and lval_to_loc context ~for_writing ~reduction lval =
+  and lval_to_loc env ~for_writing ~reduction lval =
     let compute () =
-      let res, alarms =
-        reduced_lval_to_loc context ~for_writing ~reduction lval
-      in
+      let res, alarms = reduced_lval_to_loc env ~for_writing ~reduction lval in
       let res =
-        res >>-: fun (loc, typ_offs, red, volatile) ->
-        let fuel = context.remaining_fuel in
-        let record = { loc; typ = typ_offs; loc_alarms = alarms }
+        let+ loc, red, volatile = res in
+        let fuel = env.remaining_fuel in
+        let record = { loc; loc_alarms = alarms }
         and report = { fuel = Finite fuel; reduction = red; volatile }
         and loc_report = { for_writing; with_reduction = reduction } in
         cache := Cache.add_loc' !cache lval (record, (report, loc_report));
-        (loc, typ_offs, volatile)
+        (loc, volatile)
       in
       res, alarms
     in
+    let already_precise = already_precise_loc_report ~for_writing ~reduction in
+    let not_enough_fuel = less_fuel_than env.remaining_fuel in
     match Cache.find_loc' !cache lval with
     | `Value (record, (report, loc_report)) ->
-      if
-        already_precise_loc_report ~for_writing ~reduction loc_report
-        && less_fuel_than context.remaining_fuel report.fuel
-      then `Value (record.loc, record.typ, report.volatile), record.loc_alarms
+      if already_precise loc_report && not_enough_fuel report.fuel
+      then `Value (record.loc, report.volatile), record.loc_alarms
       else compute ()
     | `Top -> compute ()
 
   (* If [reduction] is false, don't reduce the location and the offset by their
      valid parts, and don't emit alarms about their validity. *)
-  and reduced_lval_to_loc context ~for_writing ~reduction lval =
-    internal_lval_to_loc context ~for_writing ~reduction lval
-    >>= fun (loc, typ, volatile) ->
-    if not reduction
-    then `Value (loc, typ, Neither, volatile), Alarmset.none
-    else
-      let bitfield = Cil.isBitfield lval in
+  and reduced_lval_to_loc env ~for_writing ~reduction lval =
+    let open Evaluated.Operators in
+    let lval_to_loc = internal_lval_to_loc env ~for_writing ~reduction in
+    let* loc, volatile = lval_to_loc lval in
+    if reduction then
+      let bitfield = Eva_ast.is_bitfield lval in
       let truth = Loc.assume_valid_location ~for_writing ~bitfield loc in
-      let alarm () =
-        let access_kind =
-          if for_writing then Alarms.For_writing else Alarms.For_reading
-        in
-        Alarms.Memory_access (lval, access_kind)
-      in
-      interpret_truth ~alarm loc truth >>=: fun valid_loc ->
+      let access = Alarms.(if for_writing then For_writing else For_reading) in
+      let alarm () = Alarms.Memory_access (Eva_ast.to_cil_lval lval, access) in
+      let+ valid_loc = interpret_truth ~alarm loc truth in
       let reduction = if Loc.equal_loc valid_loc loc then Neither else Forward in
-      valid_loc, typ, reduction, volatile
+      valid_loc, reduction, volatile
+    else `Value (loc, Neither, volatile), Alarmset.none
 
   (* Internal evaluation of a lvalue to an abstract location.
      Combination of the evaluation of the right part of an lval (an host) with
      an offset, to obtain a location *)
-  and internal_lval_to_loc context ~for_writing ~reduction lval =
-    let host, offset = lval in
-    let typ = match host with
-      | Var host -> host.vtype
-      | Mem x -> Cil.typeOf_pointed (Cil.typeOf x)
-    in
-    eval_offset context ~reduce_valid_index:reduction typ offset
-    >>= fun (offs, typ_offs, offset_volatile) ->
-    if for_writing && Eva_utils.is_const_write_invalid typ_offs
-    then
-      `Bottom,
-      Alarmset.singleton ~status:Alarmset.False
-        (Alarms.Memory_access (lval, Alarms.For_writing))
+  and internal_lval_to_loc env ~for_writing ~reduction lval =
+    let open Evaluated.Operators in
+    let host, offset = lval.node in
+    let basetyp = Eva_ast.type_of_lhost host in
+    let reduce_valid_index = reduction in
+    let evaluated = eval_offset env ~reduce_valid_index basetyp offset in
+    let* (offs, offset_volatile) = evaluated in
+    if for_writing && Eva_utils.is_const_write_invalid lval.typ then
+      let cil_lval = Eva_ast.to_cil_lval lval in
+      let alarm = Alarms.(Memory_access (cil_lval, For_writing)) in
+      `Bottom, Alarmset.singleton ~status:Alarmset.False alarm
     else
-      eval_host context typ_offs offs host >>=: fun (loc, host_volatile) ->
-      loc, typ_offs, offset_volatile || host_volatile
+      let+ loc, host_volatile = eval_host env lval.typ offs host in
+      loc, offset_volatile || host_volatile
 
   (* Host evaluation. Also returns a boolean which is true if the host
      contains a volatile sub-expression. *)
-  and eval_host context typ_offset offs = function
+  and eval_host env typ_offset offs = function
     | Var host ->
-      (Loc.forward_variable typ_offset host offs >>-: fun loc -> loc, false),
-      Alarmset.none
+      let loc = Loc.forward_variable typ_offset host offs in
+      (let+ loc in loc, false), Alarmset.none
     | Mem x ->
-      root_forward_eval context x >>=. fun (loc_lv, volatile) ->
-      Loc.forward_pointer typ_offset loc_lv offs >>-: fun loc ->
+      let open Evaluated.Operators in
+      let& loc_lv, volatile = root_forward_eval env x in
+      let open Bottom.Operators in
+      let+ loc = Loc.forward_pointer typ_offset loc_lv offs in
       loc, volatile
 
   (* Offset evaluation. Also returns a boolean which is true if the offset
      contains a volatile sub-expression. *)
-  and eval_offset context ~reduce_valid_index typ = function
-    | NoOffset -> return (Loc.no_offset, typ, false)
+  and eval_offset env ~reduce_valid_index typ = function
+    | NoOffset -> return (Loc.no_offset, false)
     | Index (index_expr, remaining) ->
-      let typ_pointed, array_size = match Cil.unrollType typ with
+      let open Evaluated.Operators in
+      let typ_pointed, array_size =
+        match Cil.unrollType typ with
         | TArray (t, size, _) -> t, size
-        | t -> Self.fatal ~current:true
-                 "Got type '%a'" Printer.pp_typ t
+        | t -> Self.fatal ~current:true "Got type '%a'" Printer.pp_typ t
       in
-      eval_offset context ~reduce_valid_index typ_pointed remaining >>=
-      fun (roffset, typ_offs, remaining_volatile) ->
-      root_forward_eval context index_expr >>= fun (index, volatile) ->
+      let eval = eval_offset env ~reduce_valid_index typ_pointed remaining in
+      let* roffset, remaining_volatile = eval in
+      let* index, volatile = root_forward_eval env index_expr in
       let valid_index =
         if not (Kernel.SafeArrays.get ()) || not reduce_valid_index
         then `Value index, Alarmset.none
@@ -1033,49 +1037,49 @@ module Make
             else
               let size_expr = Option.get array_size in (* array_size exists *)
               assume_valid_index ~size ~size_expr ~index_expr index
-          with
-          | Cil.LenOfArray _ -> `Value index, Alarmset.none (* unknown array size *)
+          with Cil.LenOfArray _ -> `Value index, Alarmset.none (* unknown array size *)
       in
-      valid_index >>=: fun index ->
-      Loc.forward_index typ_pointed index roffset, typ_offs,
+      let+ index = valid_index in
+      Loc.forward_index typ_pointed index roffset,
       remaining_volatile || volatile
     | Field (fi, remaining) ->
+      let open Evaluated.Operators in
       let attrs = Cil.filter_qualifier_attributes (Cil.typeAttrs typ) in
       let typ_fi = Cil.typeAddAttributes attrs fi.ftype in
-      eval_offset context ~reduce_valid_index typ_fi remaining
-      >>=: fun (r, typ_res, volatile) ->
+      let evaluated = eval_offset env ~reduce_valid_index typ_fi remaining in
+      let+ r, volatile = evaluated in
       let off = Loc.forward_field typ fi r in
-      off, typ_res, volatile
+      off, volatile
 
-  and eval_lval ?(indeterminate=false) context lval =
-    let domain_query = make_domain_query Domain.extract_lval context in
-    let context = { context with root = false } in
+  and eval_lval ?(indeterminate=false) env lval =
+    let open Evaluated.Operators in
+    let domain_query = make_domain_query Domain.extract_lval env in
+    let env = { env with root = false } in
     (* Computes the location of [lval]. *)
-    lval_to_loc context ~for_writing:false ~reduction:true lval
-    >>= fun (loc, typ_lv, volatile_expr) ->
-    let typ_lv = Cil.unrollType typ_lv in
+    let evaluated = lval_to_loc env ~for_writing:false ~reduction:true lval in
+    let* loc, volatile_expr = evaluated in
     (* the lvalue is volatile:
        - if it has qualifier volatile (lval_to_loc propagates qualifiers
          in the proper way through offsets)
        - if it contains a sub-expression which is volatile (volatile_expr)
     *)
-    let volatile = volatile_expr || Cil.typeHasQualifier "volatile" typ_lv in
+    let volatile = volatile_expr || Cil.typeHasQualifier "volatile" lval.typ in
+    let cil_lval = Eva_ast.to_cil_lval lval in
     (* Find the value of the location, if not bottom. *)
-    let v, alarms = domain_query lval typ_lv loc in
-    let alarms = close_dereference_alarms lval alarms in
-    if indeterminate
-    then
-      let record, alarms = indeterminate_copy lval v alarms in
+    let v, alarms = domain_query lval loc in
+    let alarms = close_dereference_alarms cil_lval alarms in
+    if indeterminate then
+      let record, alarms = indeterminate_copy cil_lval v alarms in
       `Value (record, Neither, volatile), alarms
     else
-      let v, alarms = assume_valid_value typ_lv lval (v, alarms) in
-      (v, alarms) >>=: fun (value, origin) ->
-      let value = define_value value
-      and reductness, reduction =
+      let v, alarms = assume_valid_value env.context lval (v, alarms) in
+      let+ value, origin = v, alarms in
+      let value = define_value value in
+      let reductness, reduction =
         if Alarmset.is_empty alarms then Unreduced, Neither else Reduced, Forward
       in
       (* The proper alarms will be set in the record by forward_eval. *)
-      {value; origin; reductness; val_alarms = Alarmset.all},
+      { value; origin; reductness; val_alarms = Alarmset.all },
       reduction, volatile
 
   (* ------------------------------------------------------------------------
@@ -1085,32 +1089,29 @@ module Make
   (* These two modules could be implemented as mutually recursive, to avoid
      the reference for the oracle given to the domains. *)
   module Forward_Evaluation = struct
-    type nonrec context = context
-    let evaluate ~subdivided context valuation expr =
+    type environment = recursive_environment
+    let evaluate ~subdivided environment valuation expr =
+      let open Evaluated.Operators in
       cache := valuation;
-      let context =
-        if subdivided
-        then { context with root = false; subdivided }
-        else context
-      in
-      root_forward_eval context expr >>=: fun (value, _) ->
+      let root = not subdivided && environment.root in
+      let subdivided = subdivided || environment.subdivided in
+      let environment = { environment with root ; subdivided } in
+      let+ value, _ = root_forward_eval environment expr in
       !cache, value
   end
 
   module Subdivided_Evaluation =
     Subdivided_evaluation.Make (Value) (Loc) (Cache) (Forward_Evaluation)
 
-  let oracle context =
-    let remaining_fuel = pred context.remaining_fuel in
-    if remaining_fuel >  0
-    then
+  let oracle env =
+    let remaining_fuel = pred env.remaining_fuel in
+    if remaining_fuel > 0 then
       fun expr ->
         let valuation = !cache in
-        let context = { context with remaining_fuel } in
-        let subdivnb = context.subdivision in
-        let eval, alarms =
-          Subdivided_Evaluation.evaluate context valuation ~subdivnb expr
-        in
+        let env = { env with remaining_fuel } in
+        let subdivnb = env.subdivision in
+        let evaluate = Subdivided_Evaluation.evaluate env valuation in
+        let eval, alarms = evaluate ~subdivnb expr in
         (* Always reset the reference to the cached valuation after a subdivided
            evaluation (as the multiple evaluations modify the cache). *)
         match eval with
@@ -1123,36 +1124,39 @@ module Make
         | `Value (valuation, value) ->
           cache := valuation;
           `Value value, alarms
-    else
-      fun _ -> fuel_consumed := true; `Value Value.top, Alarmset.all
+    else fun _ -> fuel_consumed := true; `Value Value.top, Alarmset.all
 
-  (* Context for the forward evaluation of a root expression in state [state]
+  (* Context from state [state]. *)
+  let get_context state =
+    let+ from_domains = Domain.build_context state in
+    Abstract_value.{ from_domains }
+
+  (* Environment for the forward evaluation of a root expression in state [state]
      with maximal precision. *)
-  let root_context ?subdivnb state =
+  let root_environment ?subdivnb state =
+    let+ context = get_context state in
+    let subdivided = false and root = true in
     let remaining_fuel = root_fuel () in
     (* By default, use the number of subdivision defined by the global option
        -eva-subdivide-non-linear. *)
-    let subdivision =
-      match subdivnb with
-      | None -> Parameters.LinearLevel.get ()
-      | Some n -> n
-    in
-    let subdivided = false in
-    { state; root = true; subdivision; subdivided; remaining_fuel; oracle }
+    let default () =  Parameters.LinearLevel.get () in
+    let subdivision = match subdivnb with None -> default () | Some n -> n in
+    { state; context; root; subdivision; subdivided; remaining_fuel; oracle }
 
-  (* Context for a fast forward evaluation with minimal precision:
+  (* Environment for a fast forward evaluation with minimal precision:
      no subdivisions, no calls to the oracle, and the expression is not
      considered as a "root" expression. *)
-  let fast_eval_context state =
-    let remaining_fuel = no_fuel in
-    let subdivision = 0 in
-    let subdivided = false in
-    { state; root = false; subdivision; subdivided; remaining_fuel; oracle }
+  let fast_eval_environment state =
+    let+ context = get_context state in
+    let remaining_fuel = no_fuel and root = false in
+    let subdivision = 0 and subdivided = false in
+    { state; context; root; subdivision; subdivided; remaining_fuel; oracle }
 
   let subdivided_forward_eval valuation ?subdivnb state expr =
-    let context = root_context ?subdivnb state in
-    let subdivnb = context.subdivision in
-    Subdivided_Evaluation.evaluate context valuation ~subdivnb expr
+    let open Evaluated.Operators in
+    let* env = root_environment ?subdivnb state, Alarmset.none in
+    let subdivnb = env.subdivision in
+    Subdivided_Evaluation.evaluate env valuation ~subdivnb expr
 
   (* ------------------------------------------------------------------------
                            Backward Evaluation
@@ -1167,16 +1171,14 @@ module Make
   (* Find the record computed for an lvalue.
      Return None if no reduction can be performed. *)
   let find_loc_for_reduction lval =
-    if not (may_be_reduced_lval lval)
-    then None
-    else
-      let record, report = match Cache.find_loc' !cache lval with
+    if may_be_reduced_lval lval then
+      let record, report =
+        match Cache.find_loc' !cache lval with
         | `Value all -> all
         | `Top -> assert false
       in
-      if (snd report).with_reduction
-      then Some (record, report)
-      else None
+      if (snd report).with_reduction then Some (record, report) else None
+    else None
 
   (* Evaluate an expression before any reduction, if needed. Also return the
      report indicating if a forward reduction during the forward evaluation may
@@ -1184,7 +1186,8 @@ module Make
   let evaluate_for_reduction state expr =
     try `Value (Cache.find' !cache expr)
     with Not_found ->
-      fst (forward_eval (fast_eval_context state) expr) >>-: fun _ ->
+      let* env = fast_eval_environment state in
+      let+ _ = forward_eval env expr |> fst in
       try Cache.find' !cache expr
       with Not_found -> assert false
 
@@ -1197,13 +1200,13 @@ module Make
        the reduction is propagated but the value of the current expression is
        unchanged. *)
   let backward_reduction old_value latter_reduction value =
-    let propagate_forward_reduction () =
-      if latter_reduction = Forward then Some (old_value, Neither) else None
-    in
+    let forward = latter_reduction = Forward in
+    let neither () = Some (old_value, Neither) in
+    let propagate_forward_reduction () = if forward then neither () else None in
     match value with
     | None -> `Value (propagate_forward_reduction ())
     | Some new_value ->
-      Value.narrow old_value new_value >>-: fun value ->
+      let+ value = Value.narrow old_value new_value in
       if Value.is_included old_value value
       then propagate_forward_reduction ()
       else Some (value, Backward)
@@ -1214,133 +1217,134 @@ module Make
        abstract domains) are propagated backward to the subexpressions;
      - if [value = Some v], then [expr] is assumed to evaluate to [v] (and is
        reduced accordingly). *)
-  let rec backward_eval fuel state expr value =
+  let rec backward_eval fuel context state expr value =
     (* Evaluate the expression if needed. *)
-    evaluate_for_reduction state expr >>- fun (record, report) ->
+    let* record, report = evaluate_for_reduction state expr in
     (* Reduction of [expr] by [value]. Also performs further reductions
        requested by the domains. Returns Bottom if one of these reductions
        leads to bottom. *)
     let reduce kind value =
       let continue = `Value () in
       (* Avoids reduction of volatile expressions. *)
-      if report.volatile then continue
-      else
+      if not report.volatile then
         let value = Value.reduce value in
-        reduce_expr_recording kind expr (record, report) value;
+        reduce_expr_recording kind expr (record, report) value ;
         (* If enough fuel, asks the domain for more reductions. *)
-        if fuel > 0
-        then
+        if fuel > 0 then
           (* The reductions requested by the domains. *)
           let reductions_list = Domain.reduce_further state expr value in
-          let reduce acc (expr, v) =
-            acc >>- fun () -> backward_eval (pred fuel) state expr (Some v)
+          (* Reduces [expr] to value [v]. *)
+          let reduce acc (expr, value) =
+            (* If a previous reduction has returned bottom, return bottom. *)
+            let* () = acc in
+            backward_eval (pred fuel) context state expr (Some value)
           in
           List.fold_left reduce continue reductions_list
         else continue
+      else continue
     in
-    record.value.v >>- fun old_value ->
+    let* old_value = record.value.v in
     (* Determines the need of a backward reduction. *)
-    backward_reduction old_value report.reduction value >>- function
+    let* reduced = backward_reduction old_value report.reduction value in
+    match reduced with
     | None ->
       (* If no reduction to be propagated, just visit the subterms. *)
-      recursive_descent fuel state expr
+      recursive_descent fuel context state expr
     | Some (value, kind) ->
       (* Otherwise, backward propagation to the subterms. *)
-      match expr.enode with
+      match expr.node with
       | Lval lval ->
         begin
           (* For a lvalue, we try to reduce its location according to the value;
              this operation may lead to a more precise value for this lvalue,
              which is then reduced accordingly. *)
-          backward_loc state lval value >>- function
+          let* reduced_loc = backward_loc state lval value in
+          match reduced_loc with
           | None ->
-            reduce kind value >>- fun () ->
-            recursive_descent_lval fuel state lval
+            let* () = reduce kind value in
+            recursive_descent_lval fuel context state lval
           | Some (loc, new_value) ->
-            let kind =
-              if Value.is_included old_value new_value then Neither else Backward
-            in
-            reduce kind new_value >>- fun () ->
-            internal_backward_lval fuel state loc lval
+            let included = Value.is_included old_value new_value in
+            let kind = if included then Neither else Backward in
+            let* () = reduce kind new_value in
+            internal_backward_lval fuel context state loc lval
         end
       | _ ->
-        reduce kind value >>- fun () ->
-        internal_backward fuel state expr value
+        let* () = reduce kind value in
+        internal_backward fuel context state expr value
 
   (* Backward propagate the reduction [expr] = [value] to the subterms of the
      compound expression [expr]. *)
-  and internal_backward fuel state expr value =
-    match expr.enode with
+  and internal_backward fuel context state expr value =
+    match expr.node with
     | Lval _lv -> assert false
     | UnOp (LNot, e, _) ->
-      let cond = Eva_utils.normalize_as_cond e false in
+      let cond = Eva_ast.normalize_condition e false in
       (* TODO: should we compute the meet with the result of the call to
          Value.backward_unop? *)
-      backward_eval fuel state cond (Some value)
+      backward_eval fuel context state cond (Some value)
     | UnOp (op, e, _typ) ->
-      let typ_e = Cil.unrollType (Cil.typeOf e) in
-      find_val e >>- fun v ->
-      Value.backward_unop ~typ_arg:typ_e op ~arg:v ~res:value
-      >>- fun v ->
-      backward_eval fuel state e v
+      let typ_arg = Cil.unrollType e.typ in
+      let* arg = find_val e in
+      let* v = Value.backward_unop context ~typ_arg op ~arg ~res:value in
+      backward_eval fuel context state e v
     | BinOp (binop, e1, e2, typ) ->
-      let typ_res = Cil.unrollType typ
-      and typ_e1 = Cil.typeOf e1 in
-      find_val e1 >>- fun v1 ->
-      find_val e2 >>- fun v2 ->
-      Value.backward_binop
-        ~input_type:typ_e1
-        ~resulting_type:typ_res
-        binop ~left:v1 ~right:v2 ~result:value
-      >>- fun (v1, v2) ->
-      backward_eval fuel state e1 v1 >>- fun () ->
-      backward_eval fuel state e2 v2
+      let resulting_type = Cil.unrollType typ in
+      let input_type = e1.typ in
+      let* left = find_val e1
+      and* right = find_val e2 in
+      let backward = Value.backward_binop context ~input_type ~resulting_type in
+      let* v1, v2 = backward binop ~left ~right ~result:value in
+      let* () = backward_eval fuel context state e1 v1 in
+      backward_eval fuel context state e2 v2
     | CastE (typ, e) ->
       begin
         let dst_typ = Cil.unrollType typ in
-        let src_typ = Cil.unrollType (Cil.typeOf e) in
-        find_val e >>- fun src_val ->
-        Value.backward_cast ~src_typ ~dst_typ ~src_val ~dst_val:value
-        >>- function v -> backward_eval fuel state e v
+        let src_typ = Cil.unrollType e.typ in
+        let* src_val = find_val e in
+        let backward = Value.backward_cast context ~src_typ ~dst_typ in
+        let* v = backward ~src_val ~dst_val:value in
+        backward_eval fuel context state e v
       end
     | _ -> `Value ()
 
-  and recursive_descent fuel state expr =
-    match expr.enode with
-    | Lval lval -> backward_lval fuel state lval
+  and recursive_descent fuel context state expr =
+    match expr.node with
+    | Lval lval -> backward_lval fuel context state lval
     | UnOp (_, e, _)
-    | CastE (_, e) ->
-      backward_eval fuel state e None
+    | CastE (_, e) -> backward_eval fuel context state e None
     | BinOp (_binop, e1, e2, _typ) ->
-      backward_eval fuel state e1 None >>- fun () ->
-      backward_eval fuel state e2 None
+      let* () = backward_eval fuel context state e1 None in
+      backward_eval fuel context state e2 None
     | _ -> `Value ()
 
-  and recursive_descent_lval fuel state (host, offset) =
-    recursive_descent_host fuel state host >>- fun () ->
-    recursive_descent_offset fuel state offset
+  and recursive_descent_lval fuel context state lval =
+    let (host, offset) = lval.node in
+    let* () = recursive_descent_host fuel context state host in
+    recursive_descent_offset fuel context state offset
 
-  and recursive_descent_host fuel state = function
+  and recursive_descent_host fuel context state = function
     | Var _ -> `Value ()
-    | Mem expr -> backward_eval fuel state expr None >>-: fun _ -> ()
+    | Mem expr -> backward_eval fuel context state expr None
 
-  and recursive_descent_offset fuel state = function
+  and recursive_descent_offset fuel context state = function
     | NoOffset               -> `Value ()
-    | Field (_, remaining)   -> recursive_descent_offset fuel state remaining
+    | Field (_, remaining)   ->
+      recursive_descent_offset fuel context state remaining
     | Index (exp, remaining) ->
-      backward_eval fuel state exp None >>- fun __ ->
-      recursive_descent_offset fuel state remaining
+      let* _ = backward_eval fuel context state exp None in
+      recursive_descent_offset fuel context state remaining
 
   (* Even if the value of an lvalue has not been reduced, its memory location
      could have been, and this can be propagated backward. Otherwise, continue
      the recursive descent. *)
-  and backward_lval fuel state lval =
+  and backward_lval fuel context state lval =
     match find_loc_for_reduction lval with
-    | None -> recursive_descent_lval fuel state lval
+    | None -> recursive_descent_lval fuel context state lval
     | Some (record, report) ->
       if (fst report).reduction = Forward
-      then internal_backward_lval fuel state record.loc lval
-      else recursive_descent_lval fuel state lval
+      then internal_backward_lval fuel context state record.loc lval
+      else recursive_descent_lval fuel context state lval
 
   (* [backward_loc state lval value] tries to reduce the memory location of the
      lvalue [lval] according to its value [value] in the state [state]. *)
@@ -1348,13 +1352,13 @@ module Make
     match find_loc_for_reduction lval with
     | None -> `Value None
     | Some (record, report) ->
-      Domain.backward_location state lval record.typ record.loc value
-      >>- fun (loc, new_value) ->
-      Value.narrow new_value value >>-: fun value ->
+      let* loc, new_value =
+        Domain.backward_location state lval record.loc value
+      in
+      let+ value = Value.narrow new_value value in
       let b = not (Loc.equal_loc record.loc loc) in
       (* Avoids useless reductions and reductions of volatile expressions. *)
-      if b && not (fst report).volatile
-      then
+      if b && not (fst report).volatile then
         let record = { record with loc } in
         let report = { (fst report) with reduction = Backward }, snd report in
         cache := Cache.add_loc' !cache lval (record, report);
@@ -1363,43 +1367,47 @@ module Make
       then Some (loc, value)
       else None
 
-  and internal_backward_lval fuel state location = function
+  and internal_backward_lval fuel context state location lval =
+    match lval.node with
     | Var host, offset ->
-      Loc.backward_variable host location >>- fun loc_offset ->
-      backward_offset fuel state host.vtype offset loc_offset
+      let* loc_offset = Loc.backward_variable host location in
+      backward_offset fuel context state host.vtype offset loc_offset
     | Mem expr, offset ->
       match offset with
       | NoOffset ->
-        Loc.to_value location >>- fun loc_value ->
-        backward_eval fuel state expr (Some loc_value) >>-: fun _ -> ()
+        let* loc_value = Loc.to_value location in
+        backward_eval fuel context state expr (Some loc_value)
       | _ ->
         let reduce_valid_index = true in
-        let typ_lval = Cil.typeOf_pointed (Cil.typeOf expr) in
-        let context = fast_eval_context state in
-        fst (eval_offset context ~reduce_valid_index typ_lval offset)
-        >>- fun (loc_offset, _, _) ->
-        find_val expr >>- fun value ->
-        Loc.backward_pointer value loc_offset location
-        >>- fun (pointer_value, loc_offset) ->
-        backward_eval fuel state expr (Some pointer_value) >>- fun _ ->
-        backward_offset fuel state typ_lval offset loc_offset
-
-  and backward_offset fuel state typ offset loc_offset = match offset with
-    | NoOffset               -> `Value ()
+        let typ_lval = Cil.typeOf_pointed expr.typ in
+        let* env = fast_eval_environment state in
+        let eval = eval_offset env ~reduce_valid_index typ_lval offset in
+        let* loc_offset, _ = fst eval in
+        let* value = find_val expr in
+        let pointer = Loc.backward_pointer value loc_offset location in
+        let* pointer_value, loc_offset = pointer in
+        let* () = backward_eval fuel context state expr (Some pointer_value) in
+        backward_offset fuel context state typ_lval offset loc_offset
+
+  and backward_offset fuel context state typ offset loc_offset =
+    match offset with
+    | NoOffset -> `Value ()
     | Field (field, remaining)  ->
-      Loc.backward_field typ field loc_offset >>- fun rem ->
-      backward_offset fuel state field.ftype remaining rem
+      let* rem = Loc.backward_field typ field loc_offset in
+      backward_offset fuel context state field.ftype remaining rem
     | Index (exp, remaining) ->
-      find_val exp >>- fun v ->
+      let* v = find_val exp in
       let typ_pointed = Cil.typeOf_array_elem typ in
-      let context = fast_eval_context state in
-      fst (eval_offset context ~reduce_valid_index:true typ_pointed remaining)
-      >>- fun (rem, _, _) ->
-      Loc.backward_index typ_pointed ~index:v ~remaining:rem loc_offset >>-
-      fun (v', rem') ->
+      let* env = fast_eval_environment state in
+      let* rem, _ =
+        eval_offset env ~reduce_valid_index:true typ_pointed remaining |> fst
+      in
+      let* v', rem' =
+        Loc.backward_index ~index:v ~remaining:rem typ_pointed loc_offset
+      in
       let reduced_v = if Value.is_included v v' then None else Some v' in
-      backward_eval fuel state exp reduced_v >>- fun _ ->
-      backward_offset fuel state typ_pointed remaining rem'
+      let* () = backward_eval fuel context state exp reduced_v in
+      backward_offset fuel context state typ_pointed remaining rem'
 
 
   (* ------------------------------------------------------------------------
@@ -1422,72 +1430,66 @@ module Make
       to a less precise value than the one stored after the backward evaluation.
       This means that the backward propagation has not been precise enough. *)
   let rec second_forward_eval state expr =
-    let record, report =
-      try Cache.find' !cache expr
-      with Not_found -> assert false
-    in
-    if report.reduction <> Backward then `Value ()
-    else
-      record.value.v >>- fun value ->
-      recursive_descent state expr >>- fun () ->
+    let find e = try Cache.find' !cache e with Not_found -> assert false in
+    let record, report = find expr in
+    if report.reduction == Backward then
+      let* value = record.value.v in
+      let* () = recursive_descent state expr in
       let new_value =
-        match expr.enode with
+        match expr.node with
         | Lval lval -> second_eval_lval state lval value
         | _ ->
-          fst (internal_forward_eval (fast_eval_context state) expr)
-          >>-: fun (v, _, _) -> v
+          let* env = fast_eval_environment state in
+          let+ v, _, _ = fst (internal_forward_eval env expr) in v
       in
-      new_value >>- fun evaled ->
+      let* evaled = new_value in
       let evaled = Value.reduce evaled in
-      Value.narrow value evaled >>-: fun new_value ->
-      if not (Value.is_included evaled value)
-      then raise Not_Exact_Reduction
-      else
+      let+ new_value = Value.narrow value evaled in
+      if Value.is_included evaled value then
         let kind = if Value.equal value new_value then Neither else Forward in
         reduce_expr_value kind expr new_value
+      else raise Not_Exact_Reduction
+    else `Value ()
 
   and second_eval_lval state lval value =
-    if not (may_be_reduced_lval lval)
-    then `Value value
-    else
-      let record, report = match Cache.find_loc' !cache lval with
+    if may_be_reduced_lval lval then
+      let record, report =
+        match Cache.find_loc' !cache lval with
         | `Value all -> all
         | `Top -> assert false
       in
-      let evaloc =
-        if (fst report).reduction = Backward
-        then
-          let for_writing = false
-          and reduction = true
-          and context = fast_eval_context state in
-          fst (reduced_lval_to_loc context ~for_writing ~reduction lval)
-          >>-: fun (loc, _, _, _) ->
+      let* env = fast_eval_environment state in
+      let* () =
+        if (fst report).reduction = Backward then
+          let for_writing = false and reduction = true in
+          let+ loc, _, _ =
+            reduced_lval_to_loc ~for_writing ~reduction env lval |> fst
+          in
           (* TODO: Loc.narrow *)
           let record = { record with loc } in
-          let reduction =
-            if Loc.equal_loc record.loc loc then Neither else Forward
-          in
+          let in_record loc = Loc.equal_loc record.loc loc in
+          let reduction = if in_record loc then Neither else Forward in
           let report = { (fst report) with reduction }, snd report in
           cache := Cache.add_loc' !cache lval (record, report);
         else `Value ()
       in
-      evaloc >>- fun () ->
-      fst (eval_lval (fast_eval_context state) lval) >>- fun (record, _, _) ->
+      let* record, _, _ = eval_lval env lval |> fst in
       record.value.v
+    else `Value value
 
   and recursive_descent state expr =
-    match expr.enode with
+    match expr.node with
     | Lval lval -> recursive_descent_lval state lval
     | UnOp (_, e, _)
-    | CastE (_, e) ->
-      second_forward_eval state e
-    | BinOp (_binop, e1, e2, _typ) ->
-      second_forward_eval state e1 >>- fun () ->
+    | CastE (_, e) -> second_forward_eval state e
+    | BinOp (_, e1, e2, _) ->
+      let* () = second_forward_eval state e1 in
       second_forward_eval state e2
     | _ -> `Value ()
 
-  and recursive_descent_lval state (host, offset) =
-    recursive_descent_host state host >>- fun () ->
+  and recursive_descent_lval state lval =
+    let (host, offset) = lval.node in
+    let* () = recursive_descent_host state host in
     recursive_descent_offset state offset
 
   and recursive_descent_host state = function
@@ -1498,7 +1500,7 @@ module Make
     | NoOffset               -> `Value ()
     | Field (_, remaining)   -> recursive_descent_offset state remaining
     | Index (exp, remaining) ->
-      second_forward_eval state exp >>- fun () ->
+      let* () = second_forward_eval state exp in
       recursive_descent_offset state remaining
 
   (* ------------------------------------------------------------------------
@@ -1508,40 +1510,42 @@ module Make
   module Valuation = Cache
 
   let to_domain_valuation valuation =
-    Abstract_domain.{ find = Valuation.find valuation;
-                      fold = (fun f acc -> Valuation.fold f valuation acc);
-                      find_loc = Valuation.find_loc valuation; }
+    let find = Valuation.find valuation in
+    let fold f acc = Valuation.fold f valuation acc in
+    let find_loc = Valuation.find_loc valuation in
+    Abstract_domain.{ find ; fold ; find_loc }
 
   let evaluate ?(valuation=Cache.empty) ?(reduction=true) ?subdivnb state expr =
     let eval, alarms = subdivided_forward_eval valuation ?subdivnb state expr in
     let result =
-      if not reduction || Alarmset.is_empty alarms
-      then eval
-      else
-        eval >>- fun (valuation, value) ->
+      if reduction && not (Alarmset.is_empty alarms) then
+        let open Bottom.Operators in
+        let* valuation, value = eval in
         cache := valuation;
-        backward_eval (backward_fuel ()) state expr None >>-: fun _ ->
+        let fuel = backward_fuel () in
+        let* context = get_context state in
+        let+ () = backward_eval fuel context state expr None in
         !cache, value
+      else eval
     in
     result, alarms
 
   let copy_lvalue ?(valuation=Cache.empty) ?subdivnb state lval =
-    let expr = Eva_utils.lval_to_exp lval
-    and context = root_context ?subdivnb state in
+    let open Evaluated.Operators in
+    let expr = Eva_ast.Build.lval lval in
+    let* env = root_environment ?subdivnb state, Alarmset.none in
     try
       let record, report = Cache.find' valuation expr in
-      if less_fuel_than context.remaining_fuel report.fuel
+      if less_fuel_than env.remaining_fuel report.fuel
       then `Value (valuation, record.value), record.val_alarms
       else raise Not_found
     with Not_found ->
       cache := valuation;
-      eval_lval context ~indeterminate:true lval
-      >>=: fun (record, _, volatile) ->
+      let+ record, _, volatile = eval_lval env ~indeterminate:true lval in
       let record = reduce_value record in
       (* Cache the computed result with an appropriate report. *)
-      let report =
-        { fuel = Finite (root_fuel ()); reduction = Neither; volatile }
-      in
+      let fuel = Finite (root_fuel ()) in
+      let report = { fuel; reduction = Neither; volatile } in
       let valuation = Cache.add' !cache expr (record, report) in
       valuation, record.value
 
@@ -1551,55 +1555,62 @@ module Make
     | NoOffset             -> `Value valuation, Alarmset.none
     | Field (_, offset)    -> evaluate_offsets valuation ?subdivnb state offset
     | Index (expr, offset) ->
-      subdivided_forward_eval valuation ?subdivnb state expr
-      >>= fun (valuation, _value) ->
+      let open Evaluated.Operators in
+      let* valuation, _ =
+        subdivided_forward_eval valuation ?subdivnb state expr
+      in
       evaluate_offsets valuation ?subdivnb state offset
 
   let evaluate_host valuation ?subdivnb state = function
-    | Var _    -> `Value valuation, Alarmset.none
-    | Mem expr ->
-      subdivided_forward_eval valuation ?subdivnb state expr >>=: fst
+    | Var _ -> `Value valuation, Alarmset.none
+    | Mem e -> subdivided_forward_eval valuation ?subdivnb state e >>=: fst
 
   let lvaluate ?(valuation=Cache.empty) ?subdivnb ~for_writing state lval =
+    let open Evaluated.Operators in
     (* If [for_writing] is true, the location of [lval] is reduced by removing
        const bases. Use [for_writing:false] if const bases can be written
        through a mutable field or an initializing function. *)
-    let for_writing = for_writing && not (Cil.is_mutable_or_initialized lval) in
-    let host, offset = lval in
-    evaluate_host valuation ?subdivnb state host >>= fun valuation ->
-    evaluate_offsets valuation ?subdivnb state offset >>= fun valuation ->
+    let mutable_or_init = Eva_ast.(is_mutable lval || is_initialized lval) in
+    let for_writing = for_writing && not mutable_or_init in
+    let (host, offset) = lval.node in
+    let* valuation = evaluate_host valuation ?subdivnb state host in
+    let* valuation = evaluate_offsets valuation ?subdivnb state offset in
     cache := valuation;
-    let context = root_context ?subdivnb state in
-    lval_to_loc context ~for_writing ~reduction:true lval
-    >>=. fun (_, typ, _) ->
-    backward_lval (backward_fuel ()) state lval >>-: fun _ ->
+    let* env = root_environment ?subdivnb state, Alarmset.none in
+    let& _ = lval_to_loc env ~for_writing ~reduction:true lval in
+    let open Bottom.Operators in
+    let+ () = backward_lval (backward_fuel ()) env.context state lval in
     match Cache.find_loc !cache lval with
-    | `Value record -> !cache, record.loc, typ
+    | `Value record -> !cache, record.loc
     | `Top -> assert false
 
   let reduce ?valuation:(valuation=Cache.empty) state expr positive =
+    let open Evaluated.Operators in
     (* Generate [e == 0] *)
-    let expr = Eva_utils.normalize_as_cond expr (not positive) in
+    let expr = Eva_ast.normalize_condition expr (not positive) in
     cache := valuation;
     (* Currently, no subdivisions are performed during the forward evaluation
        in this function, which is used to evaluate the conditions of if(…)
        statements in the analysis. *)
-    let context = root_context ~subdivnb:0 state in
-    root_forward_eval context expr >>=. fun (_v, volatile) ->
+    let* env = root_environment ~subdivnb:0 state, Alarmset.none in
+    let& _, volatile = root_forward_eval env expr in
+    let open Bottom.Operators in
     (* Reduce by [(e == 0) == 0] *)
-    backward_eval (backward_fuel ()) state expr (Some Value.zero)
-    >>- fun () ->
-    try second_forward_eval state expr >>-: fun () -> !cache
+    let fuel = backward_fuel () in
+    let* () = backward_eval fuel env.context state expr (Some Value.zero) in
+    try let+ () = second_forward_eval state expr in !cache
     with Not_Exact_Reduction ->
-      (* Avoids reduce_by_cond_enumerate on volatile expressions. *)
-      if volatile then `Value !cache
-      else
-        let context = fast_eval_context state in
-        Subdivided_Evaluation.reduce_by_enumeration context !cache expr false
+      (* Avoids reduce_by_enumeration on volatile expressions. *)
+      if not volatile then
+        let* env = fast_eval_environment state in
+        Subdivided_Evaluation.reduce_by_enumeration env !cache expr false
+      else `Value !cache
 
   let assume ?valuation:(valuation=Cache.empty) state expr value =
     cache := valuation;
-    backward_eval (backward_fuel ()) state expr (Some value) >>-: fun _ ->
+    let fuel = backward_fuel () in
+    let* context = get_context state in
+    let+ () = backward_eval fuel context state expr (Some value) in
     !cache
 
 
@@ -1620,7 +1631,7 @@ module Make
     else
       Self.fatal ~current:true
         "Function pointer evaluates to anything. function %a"
-        Printer.pp_exp funcexp
+        Eva_ast.pp_exp funcexp
 
   (* For pointer calls, we retro-propagate which function is being called
      in the abstract state. This may be useful:
@@ -1631,24 +1642,25 @@ module Make
   let backward_function_pointer valuation state expr kf =
     (* Builds the expression [exp_f != &f], and assumes it is false. *)
     let vi_f = Kernel_function.get_vi kf in
-    let addr = Cil.mkAddrOfVi vi_f in
-    let expr = Cil.mkBinOp ~loc:expr.eloc Ne expr addr in
+    let expr = Eva_ast.Build.(ne expr (var_addr vi_f)) in
     fst (reduce ~valuation state expr false)
 
   let eval_function_exp ?subdivnb funcexp ?args state =
-    match funcexp.enode with
-    | Lval (Var vinfo, NoOffset) ->
-      `Value [Globals.Functions.get vinfo, Valuation.empty],
-      Alarmset.none
-    | Lval (Mem v, NoOffset) ->
+    match funcexp.node with
+    | Lval { node = (Var vinfo, NoOffset) } ->
+      `Value [Globals.Functions.get vinfo, Valuation.empty], Alarmset.none
+    | Lval { node = (Mem v, NoOffset) } ->
       begin
-        evaluate ?subdivnb state v >>= fun (valuation, value) ->
+        let open Evaluated.Operators in
+        let* valuation, value = evaluate ?subdivnb state v in
         let kfs, alarm = Value.resolve_functions value in
         match kfs with
         | `Top -> top_function_pointer funcexp
         | `Value kfs ->
-          let typ = Cil.typeOf funcexp in
-          let kfs, alarm' = Eval_typ.compatible_functions typ ?args kfs in
+          let args_types = Option.map (List.map (fun e -> e.typ)) args in
+          let kfs, alarm' =
+            Eval_typ.compatible_functions funcexp.typ ?args:args_types kfs
+          in
           let reduce = backward_function_pointer valuation state v in
           let process acc kf =
             let res = reduce kf >>-: fun valuation -> kf, valuation in
@@ -1660,7 +1672,9 @@ module Make
             else if alarm || alarm' then Alarmset.Unknown
             else Alarmset.True
           in
-          let alarm = Alarms.Function_pointer (v, args) in
+          let cil_v = Eva_ast.to_cil_exp v in
+          let cil_args = Option.map (List.map Eva_ast.to_cil_exp) args in
+          let alarm = Alarms.Function_pointer (cil_v, cil_args) in
           let alarms = Alarmset.singleton ~status alarm in
           Bottom.bot_of_list list, alarms
       end
diff --git a/src/plugins/eva/engine/evaluation.mli b/src/plugins/eva/engine/evaluation.mli
index ff7487ecf1bfdbf17609864a1cd00161b3329066..09b69cae530f5b514249b98b1e9555ef60b8cff9 100644
--- a/src/plugins/eva/engine/evaluation.mli
+++ b/src/plugins/eva/engine/evaluation.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -37,11 +37,14 @@ end
 
 (** Generic functor. *)
 module Make
-    (Value : Value)
+    (Context : Abstract_context.S)
+    (Value : Value with type context = Context.t)
     (Loc : Abstract_location.S with type value = Value.t)
-    (Domain : Queries with type value = Value.t
+    (Domain : Queries with type context = Context.t
+                       and type value = Value.t
                        and type location = Loc.location)
   : Evaluation_sig.S with type state = Domain.state
+                      and type context = Context.t
                       and type value = Value.t
                       and type origin = Domain.origin
                       and type loc = Loc.location
diff --git a/src/plugins/eva/engine/evaluation_sig.ml b/src/plugins/eva/engine/evaluation_sig.ml
index 75673541afa231aa24ae910d904560b2e69cafd4..b03cb64217e775352fa2b086ab70959d82bfe06d 100644
--- a/src/plugins/eva/engine/evaluation_sig.ml
+++ b/src/plugins/eva/engine/evaluation_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,7 +20,6 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
 
 (** Generic evaluation and reduction of expressions and left values. *)
@@ -30,6 +29,9 @@ module type S = sig
   (** State of abstract domain. *)
   type state
 
+  (** Context *)
+  type context
+
   (** Numeric values to which the expressions are evaluated. *)
   type value
 
@@ -94,7 +96,7 @@ module type S = sig
       expressions (including the possible pointer and offset of the lvalue). *)
   val lvaluate :
     ?valuation:Valuation.t -> ?subdivnb:int -> for_writing:bool ->
-    state -> lval -> (Valuation.t * loc * typ) evaluated
+    state -> lval -> (Valuation.t * loc) evaluated
 
   (** [reduce ~valuation state expr positive] evaluates the expression [expr]
       in the state [state], and then reduces the [valuation] such that
diff --git a/src/plugins/eva/engine/function_calls.ml b/src/plugins/eva/engine/function_calls.ml
index 5b8cd029a76e9302b0b46e434645ee209704b11d..9a8844648638e1888c619f833825e793b5d2c30c 100644
--- a/src/plugins/eva/engine/function_calls.ml
+++ b/src/plugins/eva/engine/function_calls.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/function_calls.mli b/src/plugins/eva/engine/function_calls.mli
index eaa080700d26f2b22da62524a7816d950d1647a3..51697414d90046aaac39db1b121c2ba311be7e14 100644
--- a/src/plugins/eva/engine/function_calls.mli
+++ b/src/plugins/eva/engine/function_calls.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/initialization.ml b/src/plugins/eva/engine/initialization.ml
index 304e8a1ff61bfef1d7522b5f1d37ed9926762d9a..23a483511f5622924e044a8fc5ff4ffe27dc0379 100644
--- a/src/plugins/eva/engine/initialization.ml
+++ b/src/plugins/eva/engine/initialization.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -24,13 +24,14 @@
 
 open Cil_types
 open Eval
+open Eva_ast
 
 module type S = sig
   type state
   val initial_state_with_formals :
     lib_entry:bool -> kernel_function -> state or_bottom
   val initialize_local_variable:
-    stmt -> varinfo -> Cil_types.init -> state -> state or_bottom
+    stmt -> varinfo -> init -> state -> state or_bottom
 end
 
 type padding_initialization = [
@@ -92,7 +93,7 @@ module Make
      other globals. *)
   let lval_to_loc lval =
     fst (Eva.lvaluate ~for_writing:false Domain.top lval)
-    >>> fun (_valuation, loc, _typ) -> loc
+    >>> fun (_valuation, loc) -> loc
 
   include Cvalue_domain.Getters (Domain)
 
@@ -106,7 +107,7 @@ module Make
   (* Initializes an entire variable [vi], in particular padding bits,
      according to [local] and [lib_entry] mode. *)
   let initialize_var_padding ~local ~lib_entry vi state =
-    let lval = Cil.var vi in
+    let lval = Eva_ast.Build.var vi in
     match padding_initialization ~local with
     | `Uninitialized -> state
     | `Initialized | `MaybeInitialized as i ->
@@ -125,39 +126,42 @@ module Make
     let init_value = Abstract_domain.Top in
     Domain.initialize_variable lval location ~initialized:true init_value state
 
-  (* Applies a single Cil initializer, using the standard transfer function on
+  (* Applies a single initializer, using the standard transfer function on
      assignments. Warns if the results is bottom. *)
-  let apply_cil_single_initializer kinstr state lval expr =
+  let apply_eva_single_initializer ~source kinstr state lval expr =
     match Transfer.assign state kinstr lval expr with
     | `Bottom ->
       if kinstr = Kglobal then
-        Self.warning ~once:true ~source:(fst expr.eloc)
-          "evaluation of initializer '%a' failed@." Printer.pp_exp expr;
+        Self.warning ~once:true ~source
+          "evaluation of initializer '%a' failed@." Eva_ast.pp_exp expr;
       raise Initialization_failed
     | `Value v -> v
 
   (* Applies an initializer. If [top_volatile] is true, sets volatile locations
      to top without applying the initializer. Otherwise, lets the standard
      transfer function on assignments handle volatile locations. *)
-  let rec apply_cil_initializer ~top_volatile kinstr lval init state =
-    if top_volatile && Cil.typeHasQualifier "volatile" (Cil.typeOfLval lval)
+  let rec apply_eva_initializer ~top_volatile kinstr lval init state =
+    if top_volatile && Cil.typeHasQualifier "volatile" lval.typ
     then initialize_top_volatile lval state
     else
       match init with
-      | SingleInit exp -> apply_cil_single_initializer kinstr state lval exp
-      | CompoundInit (typ, l) ->
-        let doinit off init _typ state =
-          let lval = Cil.addOffsetLval off lval in
-          apply_cil_initializer ~top_volatile kinstr lval init state
+      | SingleInit (exp, loc) ->
+        let source = fst loc in
+        apply_eva_single_initializer ~source kinstr state lval exp
+      | CompoundInit (_typ, l) ->
+        let doinit state (off, init) =
+          let lval = Eva_ast.add_offset lval off in
+          apply_eva_initializer ~top_volatile kinstr lval init state
         in
-        Cil.foldLeftCompound ~implicit:false ~doinit ~ct:typ ~initl:l ~acc:state
+        List.fold_left doinit state l
 
   (* Field by field initialization of a variable to zero, or top if volatile.
      Very inefficient. *)
   let initialize_var_zero_or_volatile kinstr vi state =
     let loc = Cil_datatype.Location.unknown in
-    let zero_init = Cil.makeZeroInit ~loc vi.vtype in
-    apply_cil_initializer ~top_volatile:true kinstr (Cil.var vi) zero_init state
+    let init = Eva_ast.translate_init (Cil.makeZeroInit ~loc vi.vtype) in
+    let lval = Eva_ast.Build.var vi in
+    apply_eva_initializer ~top_volatile:true kinstr lval init state
 
   (* ----------------------- Non Lib-entry mode ----------------------------- *)
 
@@ -165,7 +169,7 @@ module Make
   let initialize_var_not_lib_entry kinstr ~local vi init state =
     ignore (warn_unknown_size vi);
     let typ = vi.vtype in
-    let lval = Cil.var vi in
+    let lval = Eva_ast.Build.var vi in
     let volatile_everywhere = Cil.typeHasQualifier "volatile" typ in
     let state =
       if volatile_everywhere && padding_initialization ~local = `Initialized
@@ -187,7 +191,7 @@ module Make
     match init with
     | None -> state
     | Some init ->
-      apply_cil_initializer ~top_volatile:false kinstr lval init state
+      apply_eva_initializer ~top_volatile:false kinstr lval init state
 
 
   (* --------------------------- Lib-entry mode ----------------------------- *)
@@ -195,12 +199,16 @@ module Make
   (* Special application of an initializer: only non-volatile lval with
      attributes 'const' are initialized. *)
   let rec apply_cil_const_initializer kinstr state lval = function
-    | SingleInit exp ->
+    | Cil_types.SingleInit exp ->
       let typ_lval = Cil.typeOfLval lval in
       if Cil.typeHasQualifier "const" typ_lval &&
          not (Cil.typeHasQualifier "volatile" typ_lval)
          && not (Cil.is_mutable_or_initialized lval)
-      then apply_cil_single_initializer kinstr state lval exp
+      then
+        let lval = Eva_ast.translate_lval lval
+        and exp = Eva_ast.translate_exp exp
+        and source = fst exp.eloc in
+        apply_eva_single_initializer ~source kinstr state lval exp
       else state
     | CompoundInit (typ, l) ->
       if Cil.typeHasQualifier "volatile" typ || not (Cil.isConstType typ)
@@ -219,13 +227,14 @@ module Make
     if Cil.typeHasQualifier "const" vi.vtype && not (vi.vstorage = Extern)
        && not (Cil.typeHasAttributeMemoryBlock Cil.frama_c_mutable vi.vtype)
     then (* Fully const base. Ignore -lib-entry altogether. *)
+      let init = Option.map Eva_ast.translate_init init in
       initialize_var_not_lib_entry kinstr ~local:false vi init state
     else
       let unknown_size =  warn_unknown_size vi in
       let state =
         if unknown_size then
           (* the type is unknown, initialize everything to Top *)
-          let lval = Cil.var vi in
+          let lval = Eva_ast.Build.var vi in
           let loc = lval_to_loc lval in
           let v = Abstract_domain.Top in
           Domain.initialize_variable lval loc ~initialized:true v state
@@ -317,17 +326,14 @@ module Make
     let open Current_loc.Operators in
     let<> UpdatedCurrentLoc = vi.vdecl in
     let state = Domain.enter_scope Abstract_domain.Global [vi] state in
-    let state = if vi.vsource then
-        let initialize =
-          if lib_entry || (vi.vstorage = Extern)
-          then initialize_var_lib_entry
-          else initialize_var_not_lib_entry ~local:false
-        in
-        initialize Kglobal vi init.init state
-      else state
-    in
-    state
-
+    if vi.vsource then
+      if lib_entry || (vi.vstorage = Extern)
+      then
+        initialize_var_lib_entry Kglobal vi init.init state
+      else
+        let init = Option.map Eva_ast.translate_init init.init in
+        initialize_var_not_lib_entry ~local:false Kglobal vi init state
+    else state
 
 
   (* Compute the initial state with all global variable initialized. *)
diff --git a/src/plugins/eva/engine/initialization.mli b/src/plugins/eva/engine/initialization.mli
index 0b69e2f44ab9af5ee30106c284a2861f4042a250..a5dadc072093ff81ab18cf5bfd22837b9df65dcf 100644
--- a/src/plugins/eva/engine/initialization.mli
+++ b/src/plugins/eva/engine/initialization.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,7 +22,7 @@
 
 (** Creation of the initial state of abstract domain. *)
 
-open Cil_types
+open Eva_ast
 open Lattice_bounds
 
 module type S = sig
@@ -31,11 +31,11 @@ module type S = sig
   (** Compute the initial state for an analysis (as in {!initial_state}),
       but also bind the formal parameters of the function given as argument. *)
   val initial_state_with_formals :
-    lib_entry:bool -> kernel_function -> state or_bottom
+    lib_entry:bool -> Cil_types.kernel_function -> state or_bottom
 
   (** Initializes a local variable in the current state. *)
   val initialize_local_variable:
-    stmt -> varinfo -> init -> state -> state or_bottom
+    Cil_types.stmt -> varinfo -> init -> state -> state or_bottom
 end
 
 module Make
diff --git a/src/plugins/eva/engine/iterator.ml b/src/plugins/eva/engine/iterator.ml
index c025cb721353a6d4898bc391d8f7cbcad6371b39..f4d84b5a63efd47c627c14758fb2effec2b1fce2 100644
--- a/src/plugins/eva/engine/iterator.ml
+++ b/src/plugins/eva/engine/iterator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -21,7 +21,8 @@
 (**************************************************************************)
 
 open Cil_types
-open Interpreted_automata
+open Eva_ast
+open Eva_automata
 open Lattice_bounds
 open Bottom.Operators
 
@@ -125,7 +126,7 @@ module Make_Dataflow
 
   (* --- Interpreted automata --- *)
 
-  let automaton = get_automaton kf
+  let automaton = Eva_automata.get_automaton kf
   let graph = automaton.graph
   let control_point_count = G.nb_vertex graph
   let transition_count = G.nb_edges graph
@@ -165,7 +166,7 @@ module Make_Dataflow
   let current_ki = ref Kglobal
 
   module VertexTable = struct
-    include Interpreted_automata.Vertex.Hashtbl
+    include Eva_automata.Vertex.Hashtbl
     let find_or_add (t : 'a t) (key : key) ~(default : unit -> 'a) : 'a =
       try find t key
       with Not_found ->
@@ -173,7 +174,7 @@ module Make_Dataflow
   end
 
   module EdgeTable = struct
-    include Interpreted_automata.Edge.Hashtbl
+    include Eva_automata.Edge.Hashtbl
     let find_or_add (t : 'a t) (key : key) ~(default : unit -> 'a) : 'a =
       try find t key
       with Not_found ->
@@ -201,7 +202,7 @@ module Make_Dataflow
     VertexTable.find_or_add v_table v ~default:(default_vertex_store v)
   let get_vertex_widening (v : vertex) : widening =
     VertexTable.find_or_add w_table v ~default:(default_vertex_widening v)
-  let get_edge_data (e : vertex edge) : tank =
+  let get_edge_data (e : edge) : tank =
     EdgeTable.find_or_add e_table e ~default:default_edge_tank
   let get_succ_tanks (v : vertex) : tank list =
     List.map (fun (_,e,_) -> get_edge_data e) (G.succ_e graph v)
@@ -270,7 +271,7 @@ module Make_Dataflow
     let positive = (kind = Then) in
     lift' (fun s -> Transfer.assume s stmt exp positive)
 
-  let transfer_assign (stmt : stmt) (dest : Cil_types.lval) (exp : exp)
+  let transfer_assign (stmt : stmt) (dest : lval) (exp : exp)
     : transfer_function =
     lift' (fun s -> Transfer.assign s (Kstmt stmt) dest exp)
 
@@ -300,33 +301,11 @@ module Make_Dataflow
     (* Recombine callee partitioning keys with caller key *)
     Partitioning.call_return ~caller:key result
 
-  let transfer_instr (stmt : stmt) (instr : instr) : transfer_function =
-    match instr with
-    | Local_init (vi, AssignInit exp, _loc) ->
-      let transfer state =
-        Init.initialize_local_variable stmt vi exp state
-      in
-      lift' transfer
-    | Local_init (vi, ConsInit (f, args, k), loc) ->
-      let as_func dest callee args _loc (key, state) =
-        transfer_call stmt dest callee args (key, state)
-      in
-      Cil.treat_constructor_as_func as_func vi f args k loc
-    | Set (dest, exp, _loc) ->
-      transfer_assign stmt dest exp
-    | Call (dest, callee, args, _loc) ->
-      transfer_call stmt dest callee args
-    | Asm _ ->
-      transfer_asm stmt
-    | Skip _loc -> id
-    | Code_annot (_,_loc) -> id (* already done in process_statement
-                                   from the annotation table *)
-
   let transfer_return (stmt : stmt) (return_exp : exp option)
     : transfer_function =
     (* Deconstruct return statement *)
     let return_var = match return_exp with
-      | Some {enode = Lval (Var v, NoOffset)} -> Some v
+      | Some {node = Lval {node = Var v, NoOffset}} -> Some v
       | None -> None
       | _ -> assert false (* Cil invariant *)
     in
@@ -348,7 +327,7 @@ module Make_Dataflow
       | None -> fun state -> [state]
       | Some return_exp ->
         let vi_ret = Option.get (Library_functions.get_retres_vi kf) in
-        let return_lval = Var vi_ret, NoOffset in
+        let return_lval = Eva_ast.Build.var vi_ret in
         let kstmt = Kstmt stmt in
         fun state ->
           let kind = Abstract_domain.Result kf in
@@ -358,18 +337,27 @@ module Make_Dataflow
     in
     sequence (lift'' check_postconditions) (lift'' assign_retval)
 
-  let transfer_transition (t : vertex transition) : transfer_function =
+  let transfer_transition (t : transition) : transfer_function =
     match t with
     | Skip ->                     id
     | Return (return_exp,stmt) -> transfer_return stmt return_exp
     | Guard (exp,kind,stmt) ->    transfer_assume stmt exp kind
-    | Instr (instr,stmt) ->       transfer_instr stmt instr
+    | Init (vi, exp, stmt) ->
+      let transfer state =
+        Init.initialize_local_variable stmt vi exp state
+      in
+      lift' transfer
+    | Assign (dest, exp, stmt) ->
+      transfer_assign stmt dest exp
+    | Call (dest, callee, args, stmt) ->
+      transfer_call stmt dest callee args
+    | Asm (_,_,_,stmt) ->
+      transfer_asm stmt
     | Enter (block) ->            transfer_enter block
     | Leave (block) when blocks_share_locals fundec.sbody block ->
       (* The variables from the toplevel block will be removed by the caller *)
       id
     | Leave (block) ->            transfer_leave block
-    | Prop _ -> id (* Annotations are interpreted in [transfer_statement]. *)
 
   let transfer_annotations (stmt : stmt) ~(record : bool)
     : state -> state list =
@@ -397,6 +385,11 @@ module Make_Dataflow
     (* Check unspecified sequences *)
     match stmt.skind with
     | UnspecifiedSequence seq when Kernel.UnspecifiedAccess.get () ->
+      let translate = List.map Eva_ast.translate_lval in
+      let translate_elt (stmt, modified, writes, reads, refs) =
+        stmt, translate modified, translate writes, translate reads, refs
+      in
+      let seq = List.map translate_elt seq in
       let check s =
         Transfer.check_unspecified_sequence stmt s seq = `Value ()
       in
@@ -407,7 +400,7 @@ module Make_Dataflow
   (* --- Iteration strategy ---*)
 
   let process_partitioning_transitions (v1 : vertex) (v2 : vertex)
-      (transition : vertex transition) (flow : flow) : flow =
+      (transition : transition) (flow : flow) : flow =
     (* Split return *)
     let flow = match transition with
       | Return (return_exp, _) -> Partitioning.split_return flow return_exp
@@ -426,9 +419,9 @@ module Make_Dataflow
       Partitioning.transfer (lift (Domain.incr_loop_counter (the_stmt v))) f
     in
     let loops_left, loops_entered =
-      Interpreted_automata.get_wto_index_diff kf v1 v2
+      Eva_automata.wto_index_diff v1 v2
     and loop_incr =
-      Interpreted_automata.is_back_edge kf (v1,v2)
+      Eva_automata.is_back_edge (v1,v2)
     in
     let flow = List.fold_left leave_loop flow loops_left in
     let flow = List.fold_left enter_loop flow loops_entered in
@@ -509,7 +502,7 @@ module Make_Dataflow
     let sources = List.map process_source (G.pred_e graph v) in
     (* Add initial source *)
     let sources =
-      if not (Interpreted_automata.Vertex.equal v automaton.entry_point)
+      if not (Eva_automata.Vertex.equal v automaton.entry_point)
       then sources
       else get_initial_flow () :: sources
     in
@@ -611,10 +604,8 @@ module Make_Dataflow
   let compute () : (key * state) list =
     if interpreter_mode then
       simulate automaton.entry_point (get_initial_flow ())
-    else begin
-      let wto = Interpreted_automata.get_wto kf in
-      iterate_list wto
-    end;
+    else
+      iterate_list automaton.wto;
     if not !post_conditions then mark_postconds_as_true ();
     let final_store = get_vertex_store automaton.return_point in
     Partitioning.expanded final_store
diff --git a/src/plugins/eva/engine/iterator.mli b/src/plugins/eva/engine/iterator.mli
index f38056a6de251228d7952e6fa11a0857fed99ed8..a1b632ba703a17e4c04c9052e6680d529e8e1c1a 100644
--- a/src/plugins/eva/engine/iterator.mli
+++ b/src/plugins/eva/engine/iterator.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/mem_exec.ml b/src/plugins/eva/engine/mem_exec.ml
index a4a530a9741beeddfabb84ce64c3b793ee629878..4acd98286dc11beb79ba76be0a717482041bfbe0 100644
--- a/src/plugins/eva/engine/mem_exec.ml
+++ b/src/plugins/eva/engine/mem_exec.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/mem_exec.mli b/src/plugins/eva/engine/mem_exec.mli
index 96dd4d165f37ab896100527c0da50cb39eeef9e2..c568497527bb2687d0cf049815f2ed64a70ce1cb 100644
--- a/src/plugins/eva/engine/mem_exec.mli
+++ b/src/plugins/eva/engine/mem_exec.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/recursion.ml b/src/plugins/eva/engine/recursion.ml
index 1afae0c09f752fc44029546a32b0996a97425665..d485cceb90038141820e3ab8d0555a0668d49eb7 100644
--- a/src/plugins/eva/engine/recursion.ml
+++ b/src/plugins/eva/engine/recursion.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -155,7 +155,7 @@ let make_recursion call depth =
   let substitution = get_stack call.kf depth in
   let add_if_copy acc argument =
     match argument.avalue with
-    | Copy ({ lval = Var vi, _ }, _) -> Varinfo.Set.add vi acc
+    | Copy ({ lval = { node = Var vi, _ } }, _) -> Varinfo.Set.add vi acc
     | _ -> acc
   in
   let empty = Varinfo.Set.empty in
diff --git a/src/plugins/eva/engine/recursion.mli b/src/plugins/eva/engine/recursion.mli
index dac29974c7d2cec730e67cd14afa95b1f7605c15..608ae4da2d84c479a1f8405415255d721f869f33 100644
--- a/src/plugins/eva/engine/recursion.mli
+++ b/src/plugins/eva/engine/recursion.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/subdivided_evaluation.ml b/src/plugins/eva/engine/subdivided_evaluation.ml
index bfd3bd4e9a842d782d8b8ad39c34730d53d63865..d4841e8652d7709c55bd1838aec99e7290f87b05 100644
--- a/src/plugins/eva/engine/subdivided_evaluation.ml
+++ b/src/plugins/eva/engine/subdivided_evaluation.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,15 +20,14 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
 open Eval
 
 let dkey = Self.register_category "nonlin"
 
 (* ----------------- Occurrences of lvalues in expressions ------------------ *)
 
-module LvalMap = Cil_datatype.LvalStructEq.Map
-module LvalSet = Cil_datatype.LvalStructEq.Set
+module LvalMap = Eva_ast.Lval.Map
+module LvalSet = Eva_ast.Lval.Set
 
 (* An expression [e] is non-linear on [x] if [x] appears multiple times in [e].
    When evaluating such an expression, a disjunction over the possible values of
@@ -88,14 +87,14 @@ let union expr depth map1 map2 =
    If a lvalue is bound to itself, then it appears only once in [expr].
    Otherwise, we say that the expression is non linear on this lvalue. *)
 let gather_non_linear expr =
-  let rec compute depth expr =
-    match expr.enode with
-    | Lval (host, offset as lv) ->
+  let rec compute depth (expr : Eva_ast.exp) =
+    match expr.node with
+    | Lval ({ node = host, offset } as lv) ->
       let d = succ depth in
       let map1 = compute_from_offset d expr offset in
       let map2 = compute_from_host d host in
       let map = union expr depth map1 map2 in
-      if LvalMap.is_empty map && Cil.isArithmeticType (Cil.typeOfLval lv)
+      if LvalMap.is_empty map && Cil.isArithmeticType lv.typ
       then LvalMap.singleton lv (expr, d, LvalSet.empty)
       else map
     | UnOp (_, e, _) | CastE (_, e) -> compute depth e
@@ -118,7 +117,7 @@ let gather_non_linear expr =
 
 (* Map from subexpressions to the list of their non-linear lvalues. *)
 module ExpMap = struct
-  include Cil_datatype.ExpStructEq.Map
+  include Eva_ast.Exp.Map
   let add expr lv map =
     try
       let list = find expr map in
@@ -139,8 +138,8 @@ module DepthMap = struct
     add depth expmap map
 end
 
-let same lval expr = match expr.enode with
-  | Lval lv -> Cil_datatype.LvalStructEq.equal lv lval
+let same lval (expr : Eva_ast.exp) = match expr.node with
+  | Lval lv -> Eva_ast.Lval.equal lv lval
   | _ -> false
 
 (* Converts a map from lvalues to expressions and depth into an association
@@ -156,12 +155,12 @@ let reverse_map map =
   DepthMap.fold concat depthmap []
 
 
-module LvalList = Datatype.List (Cil_datatype.LvalStructEq)
-module NonLinear = Datatype.Pair (Cil_datatype.Exp) (LvalList)
+module LvalList = Datatype.List (Eva_ast.Lval)
+module NonLinear = Datatype.Pair (Eva_ast.Exp) (LvalList)
 module NonLinears = Datatype.List (NonLinear)
 
 module Non_linear_expressions =
-  State_builder.Hashtbl (Cil_datatype.ExpStructEq.Hashtbl) (NonLinears)
+  State_builder.Hashtbl (Eva_ast.Exp.Hashtbl) (NonLinears)
     (struct
       let name = "Value.Subdivided_evaluation.Non_linear_expressions"
       let size = 16
@@ -180,8 +179,8 @@ let compute_non_linear expr =
     List.iter
       (fun (e, lval) ->
          Self.result ~current:true ~once:true ~dkey
-           "non-linear '%a', lv '%a'" Printer.pp_exp e
-           (Pretty_utils.pp_list ~sep:", " Printer.pp_lval) lval)
+           "non-linear '%a', lv '%a'" Eva_ast.pp_exp e
+           (Pretty_utils.pp_list ~sep:", " Eva_ast.pp_lval) lval)
       list;
     Non_linear_expressions.replace expr list;
     list
@@ -359,8 +358,8 @@ end
 module type Forward_Evaluation = sig
   type value
   type valuation
-  type context
-  val evaluate: subdivided:bool -> context -> valuation ->
+  type environment
+  val evaluate: subdivided:bool -> environment -> valuation ->
     exp -> (valuation * value) evaluated
 end
 
@@ -394,10 +393,6 @@ module Make
     | `Value record -> record
     | `Top -> assert false
 
-  let find_loc valuation lval = match Valuation.find_loc valuation lval with
-    | `Value record -> record
-    | `Top -> assert false
-
   (* --------------------- Types for the subdivision ------------------------ *)
 
   (* Information about a subdivided lvalue: the lvalue expression, its record
@@ -498,11 +493,9 @@ module Make
 
   (* Makes the split function for a list of lvalues. The split function depends
      on the size of each lvalue, computed from their type.  *)
-  let make_split valuation (lvals: 'l sub_lvals) : 'l split =
+  let make_split (lvals: 'l sub_lvals) : 'l split =
     let compute_size info =
-      (* The size is defined, as [lv] is a scalar *)
-      let record = find_loc valuation info.lval in
-      Int_Base.project (Eval_typ.sizeof_lval_typ record.typ)
+      Int_Base.project (Eval_typ.sizeof_lval_typ info.lval.typ)
     in
     let sizes = Hypotheses.map compute_size lvals in
     Hypotheses.split sizes
@@ -649,22 +642,22 @@ module Make
      The function returns the alarms and the valuation resulting from the
      subdivided evaluation. In the resulting valuation, the values of [expr],
      [subexpr] and of the lvalues in [lvals] have been reduced. *)
-  let subdivide_lvals context valuation subdivnb ~expr ~subexpr lvals =
+  let subdivide_lvals env valuation subdivnb ~expr ~subexpr lvals =
     let Hypotheses.L variables = Hypotheses.from_list lvals in
     (* Split function for the subvalues of [lvals]. *)
-    let split = make_split valuation variables in
+    let split = make_split variables in
     (* Clear the valuation to force the evaluation on top of [lvals]. *)
     let clear lv_info valuation =
       Clear.clear_englobing_exprs valuation ~expr ~subexpr:lv_info.lv_expr
     in
     let cleared_valuation = Hypotheses.fold clear variables valuation in
-    let eq_equal_subexpr = Cil_datatype.ExpStructEq.equal expr subexpr in
+    let eq_equal_subexpr = Eva_ast.Exp.equal expr subexpr in
     (* Computes a disjunct from subvalues for [lvals]. *)
     let compute subvalues =
       (* Updates [variables] with their new [subvalues]. *)
       let valuation = update_variables cleared_valuation variables subvalues in
       (* Evaluates [expr] with this new valuation. *)
-      let eval, alarms = Eva.evaluate ~subdivided:true context valuation expr in
+      let eval, alarms = Eva.evaluate ~subdivided:true env valuation expr in
       let result = eval >>-: snd in
       (* Optimization if [subexpr] = [expr]. *)
       if eq_equal_subexpr
@@ -707,12 +700,12 @@ module Make
     eval_result, alarms
 
   (* Builds the information for an lvalue. *)
-  let get_info context valuation lval =
-    let lv_expr = Eva_utils.lval_to_exp lval in
+  let get_info environment valuation lval =
+    let lv_expr = Eva_ast.Build.lval lval in
     (* Reevaluates the lvalue in the initial state, as its value could have
        been reduced in the evaluation of the complete expression, and we cannot
        omit the alarms for the removed values. *)
-    fst (Eva.evaluate ~subdivided:true context valuation lv_expr)
+    fst (Eva.evaluate ~subdivided:true environment valuation lv_expr)
     >>- fun (valuation, _) ->
     let lv_record = find_val valuation lv_expr in
     lv_record.value.v >>-: fun lv_value ->
@@ -721,8 +714,8 @@ module Make
   (* Makes a list of lvalue information from a list of lvalues. Removes lvalues
      whose cvalue is singleton or contains addresses, as we cannot subdivide on
      such values. *)
-  let make_info_list context valuation lvals =
-    let get_info = get_info context valuation in
+  let make_info_list environment valuation lvals =
+    let get_info = get_info environment valuation in
     let get_info acc lval = Bottom.add_to_list (get_info lval) acc in
     let list = List.fold_left get_info [] lvals in
     List.filter (fun info -> can_be_subdivided (get_cval info.lv_value)) list
@@ -736,10 +729,10 @@ module Make
     | `Value (valuation, result) -> f valuation result alarms
 
   (* Subdivided evaluation of [expr] in state [state]. *)
-  let subdivide_evaluation context initial_valuation subdivnb expr =
+  let subdivide_evaluation environment initial_valuation subdivnb expr =
     (* Evaluation of [expr] without subdivision. *)
     let subdivided = false in
-    let default = Eva.evaluate ~subdivided context initial_valuation expr in
+    let default = Eva.evaluate ~subdivided environment initial_valuation expr in
     default >>> fun valuation result alarms ->
     (* Do not try to subdivide if the result is singleton or contains some
        pointers: the better_bound heuristic only works on numerical values. *)
@@ -751,7 +744,7 @@ module Make
       let vars = compute_non_linear expr in
       (* Compute necessary information about the lvalues to be subdivided.
          Also remove lvalues with pointer or singleton values. *)
-      let make_info = make_info_list context initial_valuation in
+      let make_info = make_info_list environment initial_valuation in
       let vars_info = List.map (fun (e, lvals) -> e, make_info lvals) vars in
       let vars_info = List.filter (fun (_, infos) -> infos <> []) vars_info in
       let rec subdivide_subexpr vars valuation result alarms =
@@ -773,9 +766,9 @@ module Make
             in
             Self.result ~current:true ~once:true ~dkey
               "subdividing on %a"
-              (Pretty_utils.pp_list ~sep:", " Printer.pp_lval) lvals;
+              (Pretty_utils.pp_list ~sep:", " Eva_ast.pp_lval) lvals;
             let subdivide =
-              subdivide_lvals context valuation subdivnb lvals_info
+              subdivide_lvals environment valuation subdivnb lvals_info
             in
             (* If there are no other variables to subdivide, stops the
                subdivision as soon as they can no longer improve the value
@@ -793,15 +786,15 @@ module Make
               let valuation =
                 Clear.clear_englobing_exprs valuation ~expr ~subexpr
               in
-              Eva.evaluate ~subdivided:true context valuation expr >>>
+              Eva.evaluate ~subdivided:true environment valuation expr >>>
               subdivide_subexpr tail
       in
       subdivide_subexpr vars_info valuation result alarms
 
-  let evaluate context valuation ~subdivnb expr =
+  let evaluate environment valuation ~subdivnb expr =
     if subdivnb = 0 || not activated
-    then Eva.evaluate ~subdivided:false context valuation expr
-    else subdivide_evaluation context valuation subdivnb expr
+    then Eva.evaluate ~subdivided:false environment valuation expr
+    else subdivide_evaluation environment valuation subdivnb expr
 
 
   (* ---------------------- Reduction by enumeration ------------------------ *)
@@ -849,10 +842,10 @@ module Make
   (* Find locations on which it is interesting to proceed by case disjunction
      to evaluate the expression: locations which are singletons (on which the
      cvalue domain can reduce) and has an enumerable value. *)
-  let rec get_influential_vars valuation exp acc =
-    match exp.enode with
-    | Lval (host, off as lval) ->
-      if Cil.typeHasQualifier "volatile" (Cil.typeOfLval lval) then `Value acc
+  let rec get_influential_vars valuation (exp : Eva_ast.exp) acc =
+    match exp.node with
+    | Lval ({ node = host, off } as lval)  ->
+      if Cil.typeHasQualifier "volatile" lval.typ then `Value acc
       else
         Loc.to_value (find_loc valuation lval) >>- fun value ->
         if Cvalue.V.cardinal_zero_or_one (get_cval value)
@@ -876,11 +869,11 @@ module Make
     | CastE (_, exp) -> get_influential_vars valuation exp acc
     | _ -> `Value acc
 
-  and get_vars_host valuation host acc = match host with
+  and get_vars_host valuation (host : Eva_ast.lhost) acc = match host with
     | Var _v -> `Value acc
     | Mem e -> get_influential_vars valuation e acc
 
-  and get_vars_offset valuation offset acc = match offset with
+  and get_vars_offset valuation (offset : Eva_ast.offset) acc = match offset with
     | NoOffset         -> `Value acc
     | Field (_, off)   -> get_vars_offset valuation off acc
     | Index (ind, off) ->
@@ -890,13 +883,13 @@ module Make
   let get_influential_exprs valuation expr =
     get_influential_vars valuation expr []
 
-  let reduce_by_cond_enumerate context valuation cond positive influentials =
+  let reduce_by_cond_enumerate env valuation cond positive influentials =
     (* Test whether the condition [expr] may still be true when the
        sub-expression [e] has the value [v]. *)
     let condition_may_still_be_true valuation expr record value =
       let value = { record.value with v = `Value value } in
       let valuation = Valuation.add valuation expr { record with value } in
-      let eval = fst (Eva.evaluate ~subdivided:true context valuation cond) in
+      let eval = fst (Eva.evaluate ~subdivided:true env valuation cond) in
       match eval with
       | `Bottom -> false
       | `Value (_valuation, value) ->
@@ -940,11 +933,11 @@ module Make
   (* If the value module contains no cvalue component, this function is
      inoperative. Otherwise, it calls reduce_by_cond_enumerate with the
      value accessor for the cvalue component. *)
-  let reduce_by_enumeration context valuation expr positive =
+  let reduce_by_enumeration env valuation expr positive =
     if activated && Parameters.EnumerateCond.get ()
     then
       get_influential_exprs valuation expr >>- fun split_on ->
-      reduce_by_cond_enumerate context valuation expr positive split_on
+      reduce_by_cond_enumerate env valuation expr positive split_on
     else `Value valuation
 end
 
diff --git a/src/plugins/eva/engine/subdivided_evaluation.mli b/src/plugins/eva/engine/subdivided_evaluation.mli
index 732f2ac977dfad1a94e6eb46897682a4dd542c34..198437485009d4e7af25717f182748ec658470b8 100644
--- a/src/plugins/eva/engine/subdivided_evaluation.mli
+++ b/src/plugins/eva/engine/subdivided_evaluation.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -24,14 +24,13 @@
     for expressions in which some l-values appear multiple times, proceed
     by disjunction on their abstract value, in order to gain precision. *)
 
-open Cil_types
 open Eval
 
 module type Forward_Evaluation = sig
   type value
   type valuation
-  type context
-  val evaluate: subdivided:bool -> context -> valuation ->
+  type environment
+  val evaluate: subdivided:bool -> environment -> valuation ->
     exp -> (valuation * value) evaluated
 end
 
@@ -45,11 +44,11 @@ module Make
   : sig
 
     val evaluate:
-      Eva.context -> Valuation.t -> subdivnb:int ->
+      Eva.environment -> Valuation.t -> subdivnb:int ->
       exp -> (Valuation.t * Value.t) evaluated
 
     val reduce_by_enumeration:
-      Eva.context -> Valuation.t -> exp -> bool -> Valuation.t or_bottom
+      Eva.environment -> Valuation.t -> exp -> bool -> Valuation.t or_bottom
   end
 
 
diff --git a/src/plugins/eva/engine/transfer_logic.ml b/src/plugins/eva/engine/transfer_logic.ml
index 319e14323b77fbbfcce9e987daf8febd6c7d10b6..5dc4ddfdc11bc4fd0ba6a5465fa363f9a5e852e9 100644
--- a/src/plugins/eva/engine/transfer_logic.ml
+++ b/src/plugins/eva/engine/transfer_logic.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/transfer_logic.mli b/src/plugins/eva/engine/transfer_logic.mli
index 87cc6ea39b3d5012a649c26bc57e38d3f25052ea..38969a61a1fc9c5be16db705370f437549f8f2ae 100644
--- a/src/plugins/eva/engine/transfer_logic.mli
+++ b/src/plugins/eva/engine/transfer_logic.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/transfer_specification.ml b/src/plugins/eva/engine/transfer_specification.ml
index c0520b22fcdeefcc45e9882f89f38bb43780267b..45c39bf596948537e69f1d15bac3d9f30ed72505 100644
--- a/src/plugins/eva/engine/transfer_specification.ml
+++ b/src/plugins/eva/engine/transfer_specification.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/transfer_specification.mli b/src/plugins/eva/engine/transfer_specification.mli
index 5cfd04a3e38469a4beb8ba53b0b4afd006fdc51f..14e1781ee23f9854c3bbbe00fe7f748bbaf2fcfe 100644
--- a/src/plugins/eva/engine/transfer_specification.mli
+++ b/src/plugins/eva/engine/transfer_specification.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/engine/transfer_stmt.ml b/src/plugins/eva/engine/transfer_stmt.ml
index 2d8e5dc404a857dd202ec3b71f6848e68280136a..23b1d1dbac4fedc925047c3a2254092056d320a5 100644
--- a/src/plugins/eva/engine/transfer_stmt.ml
+++ b/src/plugins/eva/engine/transfer_stmt.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -103,14 +103,13 @@ module DumpFileCounters =
 
 module VarHashtbl = Cil_datatype.Varinfo.Hashtbl
 
-let substitution_visitor table = object
-  inherit Visitor.frama_c_copy (Project.current ())
-
-  method! vvrbl varinfo =
-    match VarHashtbl.find_opt table varinfo with
-    | None -> Cil.JustCopy
-    | Some vi -> Cil.ChangeTo vi
-end
+let substitution_visitor table =
+  let rewrite_varinfo ~visitor:_ vi =
+    match VarHashtbl.find_opt table vi with
+    | None -> vi
+    | Some vi' -> vi'
+  in
+  { Eva_ast.Rewrite.default with rewrite_varinfo }
 
 module Make (Abstract: Abstractions.S_with_evaluation) = struct
 
@@ -163,17 +162,17 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
 
   let evaluate_and_check ?valuation ~subdivnb state expr =
     let res = Eval.evaluate ?valuation ~subdivnb state expr in
-    report_unreachability state res "the expression %a" Printer.pp_exp expr;
+    report_unreachability state res "the expression %a" Eva_ast.pp_exp expr;
     res
 
   let lvaluate_and_check ?valuation ~subdivnb ~for_writing state lval =
     let res = Eval.lvaluate ?valuation ~subdivnb ~for_writing state lval in
-    report_unreachability state res "the lvalue %a" Printer.pp_lval lval;
+    report_unreachability state res "the lvalue %a" Eva_ast.pp_lval lval;
     res
 
   let copy_lvalue_and_check ?valuation ~subdivnb state lval =
     let res = Eval.copy_lvalue ?valuation ~subdivnb state lval in
-    report_unreachability state res "the copy of %a" Printer.pp_lval lval;
+    report_unreachability state res "the copy of %a" Eva_ast.pp_lval lval;
     res
 
   (* ------------------------------------------------------------------------ *)
@@ -187,10 +186,10 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
     Assign value, valuation
 
   (* Assignment by copying the value of a right lvalue. *)
-  let assign_by_copy ~subdivnb state valuation lval lloc ltyp =
+  let assign_by_copy ~subdivnb state valuation lval lloc =
     copy_lvalue_and_check ~valuation ~subdivnb state lval
     >>=: fun (valuation, value) ->
-    Copy ({lval; lloc; ltyp}, value), valuation
+    Copy ({lval; lloc}, value), valuation
 
   (* For an initialization, use for_writing:false for the evaluation of
      the left location, as the written variable could be const.  This is only
@@ -205,10 +204,10 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
   (* Find a lvalue hidden under identity casts. This function correctly detects
      bitfields (thanks to [need_cast]) and will never expose the underlying
      field. *)
-  let rec find_lval expr = match expr.enode with
+  let rec find_lval (expr : exp) = match expr.node with
     | Lval lv -> Some lv
     | CastE (typ, e) ->
-      if Eval_typ.need_cast typ (Cil.typeOf e) then None else find_lval e
+      if Eval_typ.need_cast typ e.typ then None else find_lval e
     | _ -> None
 
   (* Emits an alarm if the left and right locations of a struct or union copy
@@ -217,7 +216,11 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
     if Cil.isStructOrUnionType typ
     then
       let truth = Location.assume_no_overlap ~partial:true loc right_loc in
-      let alarm () = Alarms.Overlap (lval, right_lval) in
+      let alarm () =
+        let cil_lval = Eva_ast.to_cil_lval lval in
+        let cil_right_lval = Eva_ast.to_cil_lval right_lval in
+        Alarms.Overlap (cil_lval, cil_right_lval)
+      in
       Eval.interpret_truth ~alarm (loc, right_loc) truth
     else `Value (loc, right_loc), Alarmset.none
 
@@ -239,12 +242,12 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
         "@[<v>@[all target addresses were invalid. This path is \
          assumed to be dead.@]%t@]" Eva_utils.pp_callstack;
       `Bottom
-    | `Value (valuation, lloc, ltyp) ->
+    | `Value (valuation, lloc) ->
       (* Tries to interpret the assignment as a copy for the returned value
          of a function call, on struct and union types, and when
          -eva-warn-copy-indeterminate is disabled. *)
       let lval_copy =
-        if is_ret || Cil.isStructOrUnionType ltyp || do_copy_at kinstr
+        if is_ret || Cil.isStructOrUnionType lval.typ || do_copy_at kinstr
         then find_lval expr
         else None
       in
@@ -257,18 +260,18 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
           (* In case of a copy, checks that the left and right locations are
              compatible and that they do not overlap. *)
           lvaluate_and_check ~for_writing ~subdivnb ~valuation state right_lval
-          >>= fun (valuation, rloc, rtyp) ->
-          check_overlap ltyp (lval, lloc) (right_lval, rloc)
+          >>= fun (valuation, rloc) ->
+          check_overlap lval.typ (lval, lloc) (right_lval, rloc)
           >>= fun (lloc, rloc) ->
           if are_compatible lloc rloc
-          then assign_by_copy ~subdivnb state valuation right_lval rloc rtyp
+          then assign_by_copy ~subdivnb state valuation right_lval rloc
           else assign_by_eval ~subdivnb state valuation expr
       in
       if is_ret then assert (Alarmset.is_empty alarms);
       Alarmset.emit kinstr alarms;
       let* assigned, valuation = eval in
       let domain_valuation = Eval.to_domain_valuation valuation in
-      let lvalue = { lval; ltyp; lloc } in
+      let lvalue = { lval; lloc } in
       Domain.assign kinstr lvalue expr assigned domain_valuation state
 
   let assign = assign_lv_or_ret ~is_ret:false
@@ -351,7 +354,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
             | `Top -> Precise_locs.loc_top
             | `Value record -> get record.loc
           in
-          let expr_zone = Eva_utils.zone_of_expr find_loc expr in
+          let expr_zone = Eva_ast.zone_of_exp find_loc expr in
           let written_zone = inout.Inout_type.over_outputs_if_termination in
           not (Locations.Zone.intersects expr_zone written_zone)
 
@@ -387,7 +390,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
         | Assign pre_value -> `Value pre_value
         | Copy (_lv, pre_value) -> pre_value.v
       in
-      let lval = Cil.var argument.formal in
+      let lval = Eva_ast.Build.var argument.formal in
       (* We use copy_lvalue instead of evaluate to get the escaping flag:
          if a formal is escaping at the end of the called function, it may
          have been freed, which is not detected as a write. We prevent the
@@ -428,7 +431,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
     | None, Some vi_ret -> `Value (Domain.leave_scope kf_callee [vi_ret] state)
     | Some _, None -> assert false
     | Some lval, Some vi_ret ->
-      let exp_ret_caller = Eva_utils.lval_to_exp  (Var vi_ret, NoOffset) in
+      let exp_ret_caller = Eva_ast.Build.var_exp vi_ret in
       let+ state = assign_ret state (Kstmt stmt) lval exp_ret_caller in
       Domain.leave_scope kf_callee [vi_ret] state
 
@@ -483,19 +486,19 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
      evaluates the call argument [expr] in the state [state] and the valuation
      [valuation]. Returns the value assigned, and the updated valuation.
      TODO: share more code with [assign]. *)
-  let evaluate_actual ~subdivnb ~determinate valuation state expr =
-    match expr.enode with
+  let evaluate_actual ~subdivnb ~determinate valuation state (expr : exp) =
+    match expr.node with
     | Lval lv ->
       lvaluate_and_check ~for_writing:false ~subdivnb ~valuation state lv
-      >>= fun (valuation, loc, typ) ->
+      >>= fun (valuation, loc) ->
       if Int_Base.is_top (Location.size loc)
       then
         Self.abort ~current:true
           "Function argument %a has unknown size. Aborting"
-          Printer.pp_exp expr;
-      if determinate && Cil.isArithmeticOrPointerType (Cil.typeOfLval lv)
+          Eva_ast.pp_exp expr;
+      if determinate && Cil.isArithmeticOrPointerType lv.typ
       then assign_by_eval ~subdivnb state valuation expr
-      else assign_by_copy ~subdivnb state valuation lv loc typ
+      else assign_by_copy ~subdivnb state valuation lv loc
     | _ -> assign_by_eval ~subdivnb state valuation expr
 
   (* Evaluates the list of the actual arguments of a call. Returns the list
@@ -537,8 +540,8 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
       let v = flagged.v >>-: Value.replace_base substitution in
       let flagged = { flagged with v } in
       let lloc = Location.replace_base substitution loc.lloc in
-      let lval = Visitor.visitFramacLval visitor loc.lval in
-      let loc = { loc with lval; lloc } in
+      let lval = Eva_ast.Rewrite.visit_lval visitor loc.lval in
+      let loc = { lval; lloc } in
       Copy (loc, flagged)
 
   let replace_recursive_call recursion call =
@@ -547,7 +550,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
     let visitor = substitution_visitor tbl in
     let base_substitution = recursion.base_substitution in
     let replace_arg argument =
-      let concrete = Visitor.visitFramacExpr visitor argument.concrete in
+      let concrete = Eva_ast.Rewrite.visit_exp visitor argument.concrete in
       let avalue = replace_value visitor base_substitution argument.avalue in
       { argument with concrete; avalue }
     in
@@ -606,7 +609,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
         | `Value (valuation, _v) ->
           show_expr (Eval.to_domain_valuation valuation) state fmt expr
       in
-      Format.fprintf fmt "%a : @[<h>%t@]" Printer.pp_exp expr pp
+      Format.fprintf fmt "%a : @[<h>%t@]" Eva_ast.pp_exp expr pp
     in
     let pp = Pretty_utils.pp_list ~pre:"@[<v>" ~sep:"@ " ~suf:"@]" pretty in
     Self.result ~current:true
@@ -622,12 +625,11 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
       fun fmt subdivnb lval state ->
         try
           let offsm =
-            let* (_, loc, _) =
+            let* (_, loc) =
               fst (Eval.lvaluate ~for_writing:false ~subdivnb state lval) in
             Eval_op.offsetmap_of_loc (get_ploc loc) (get_cvalue state)
           in
-          let typ = Cil.typeOfLval lval in
-          (Bottom.pretty (Eval_op.pretty_offsetmap typ)) fmt offsm
+          (Bottom.pretty (Eval_op.pretty_offsetmap lval.typ)) fmt offsm
         with Abstract_interp.Error_Top ->
           Format.fprintf fmt "%s" (Unicode.top_string ())
 
@@ -643,9 +645,9 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
         (Bottom.pretty Cvalue.V.pretty) fmt value
 
   let pretty_arguments ~subdivnb state arguments =
-    let is_scalar lval = Cil.isArithmeticOrPointerType (Cil.typeOfLval lval) in
-    let pretty fmt expr =
-      match expr.enode with
+    let is_scalar lval = Cil.isArithmeticOrPointerType lval.Eva_ast.typ in
+    let pretty fmt (expr : Eva_ast.exp) =
+      match expr.node with
       | Lval lval | StartOf lval when not (is_scalar lval) ->
         show_offsm fmt subdivnb lval state
       | _ -> show_value fmt subdivnb expr state
@@ -785,7 +787,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
     let eval_loc (acc, valuation) lval =
       match lvaluate ~valuation lval with
       | `Bottom -> acc, valuation
-      | `Value (valuation, loc, _) -> (lval, loc) :: acc, valuation
+      | `Value (valuation, loc) -> (lval, loc) :: acc, valuation
     in
     let eval_list valuation lvs =
       List.fold_left eval_loc ([], valuation) lvs
@@ -794,7 +796,11 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
     let list2, _ = eval_list valuation lvs2 in
     let check acc (lval1, loc1) (lval2, loc2) =
       let truth = Location.assume_no_overlap ~partial:false loc1 loc2 in
-      let alarm () = Alarms.Not_separated (lval1, lval2) in
+      let alarm () =
+        let cil_lval1 = Eva_ast.to_cil_lval lval1
+        and cil_lval2 = Eva_ast.to_cil_lval lval2 in
+        Alarms.Not_separated (cil_lval1, cil_lval2)
+      in
       let alarm = process_truth ~alarm truth in
       Alarmset.combine alarm acc
     in
@@ -812,7 +818,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
         let unauthorized_reads =
           List.filter
             (fun x -> List.for_all
-                (fun y -> not (LvalStructEq.equal x y)) modified2)
+                (fun y -> not (Eva_ast.Lval.equal x y)) modified2)
             writes1
         in
         let alarms1 = check_non_overlapping state unauthorized_reads reads2 in
@@ -845,7 +851,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
     let initialized = false in
     let init_value = Abstract_domain.Top in
     let initialize_volatile state varinfo =
-      let lval = Cil.var varinfo in
+      let lval = Eva_ast.Build.var varinfo in
       let location = Location.eval_varinfo varinfo in
       Domain.initialize_variable lval location ~initialized init_value state
     in
diff --git a/src/plugins/eva/engine/transfer_stmt.mli b/src/plugins/eva/engine/transfer_stmt.mli
index 8f5c2527e0cc2fce3e143a4bc011bb38df745c80..92a1f591657d818ec7ad0118599cb1cf5d6cb21c 100644
--- a/src/plugins/eva/engine/transfer_stmt.mli
+++ b/src/plugins/eva/engine/transfer_stmt.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/eval.ml b/src/plugins/eva/eval.ml
index c08bf95bb6c864b0ca6bf378c554ed7eb5fced51..e1f63ce8320816dc2bbac1906c6c42b7d3f9a89a 100644
--- a/src/plugins/eva/eval.ml
+++ b/src/plugins/eva/eval.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,6 +22,9 @@
 
 open Cil_types
 
+type lval = Eva_ast.lval
+type exp = Eva_ast.exp
+
 (** *)
 
 (* -------------------------------------------------------------------------- *)
@@ -56,6 +59,15 @@ let (>>=.) (t, a) f = match t with
   | `Bottom  -> `Bottom, a
   | `Value t -> let t' = f t in t', a
 
+module Evaluated = struct
+  type 'a t = 'a evaluated
+  module Operators = struct
+    let ( let* ) evaluated f = evaluated >>= f
+    let ( let+ ) evaluated f = evaluated >>=: f
+    let ( let& ) evaluated f = evaluated >>=. f
+  end
+end
+
 (* Backward evaluation. *)
 type 'a reduced = [ `Bottom | `Unreduced | `Value of 'a ]
 
@@ -114,7 +126,6 @@ type ('a, 'origin) record_val = {
 (* Data record associated to each evaluated left-value. *)
 type 'a record_loc = {
   loc: 'a;                  (* The location of the left-value. *)
-  typ: typ;                 (* *)
   loc_alarms: Alarmset.t    (* The emitted alarms during the evaluation. *)
 }
 
@@ -144,16 +155,16 @@ let compute_englobing_subexpr ~subexpr ~expr =
      [subexpr], apart [subexpr] itself, or [None] if [subexpr] does not appear
      in [expr]. *)
   let rec compute expr =
-    if Cil_datatype.ExpStructEq.equal expr subexpr
+    if Eva_ast.Exp.equal expr subexpr
     then Some []
     else
-      let sublist = match expr.enode with
+      let sublist = match expr.node with
         | UnOp (_, e, _)
         | CastE (_, e) ->
           compute e
         | BinOp (_, e1, e2, _) ->
           merge (compute e1) (compute e2)
-        | Lval (host, offset) ->
+        | Lval {node = (host, offset)} ->
           merge (compute_host host) (compute_offset offset)
         | _ -> None
       in
@@ -170,9 +181,9 @@ let compute_englobing_subexpr ~subexpr ~expr =
   Option.value ~default:[] (compute expr)
 
 module Englobing =
-  Datatype.Pair_with_collections (Cil_datatype.ExpStructEq) (Cil_datatype.ExpStructEq)
+  Datatype.Pair_with_collections (Eva_ast.Exp) (Eva_ast.Exp)
     (struct  let module_name = "Subexpressions" end)
-module SubExprs = Datatype.List (Cil_datatype.Exp)
+module SubExprs = Datatype.List (Eva_ast.Exp)
 
 module EnglobingSubexpr =
   State_builder.Hashtbl (Englobing.Hashtbl) (SubExprs)
@@ -192,7 +203,7 @@ module Clear_Valuation (Valuation : Valuation) = struct
     let englobing = compute_englobing_subexpr ~subexpr ~expr in
     let remove valuation expr =
       let valuation = Valuation.remove valuation expr in
-      match expr.enode with
+      match expr.node with
       | Lval lval -> Valuation.remove_loc valuation lval
       | _ -> valuation
     in
@@ -207,7 +218,6 @@ end
 type 'loc left_value = {
   lval: lval;
   lloc: 'loc;
-  ltyp: typ;
 }
 
 (* Assigned values. *)
diff --git a/src/plugins/eva/eval.mli b/src/plugins/eva/eval.mli
index cee30db5319525e4a12c72c0a2ad0e6a09d15824..1e40ede6cadee81ec17857aeae67f8f86f345d41 100644
--- a/src/plugins/eva/eval.mli
+++ b/src/plugins/eva/eval.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,6 +22,9 @@
 
 open Cil_types
 
+type lval = Eva_ast.lval
+type exp = Eva_ast.exp
+
 (** Types and functions related to evaluations.
     Heavily used by abstract values and domains, evaluation of expressions,
     transfer functions of instructions and the dataflow analysis. *)
@@ -59,6 +62,15 @@ val (>>=.) : 'a evaluated -> ('a -> 'b or_bottom) -> 'b evaluated
 val (>>=:) : 'a evaluated -> ('a -> 'b) -> 'b evaluated
 
 
+module Evaluated : sig
+  type 'a t = 'a evaluated
+  module Operators : sig
+    val ( let* ) : 'a t -> ('a -> 'b t) -> 'b t
+    val ( let+ ) : 'a t -> ('a -> 'b) -> 'b t
+    val ( let& ) : 'a t -> ('a -> 'b or_bottom) -> 'b t
+  end
+end
+
 (** Most backward evaluation function returns `Bottom if the reduction leads to
     an invalid state, `Unreduced if no reduction can be performed, or the
     reduced value. *)
@@ -134,7 +146,6 @@ type ('a, 'origin) record_val = {
 (** Data record associated to each evaluated left-value. *)
 type 'a record_loc = {
   loc: 'a;                  (** The location of the left-value. *)
-  typ: typ;                 (** *)
   loc_alarms: Alarmset.t    (** The emitted alarms during the evaluation. *)
 }
 
@@ -178,7 +189,6 @@ end
 type 'loc left_value = {
   lval: lval;
   lloc: 'loc;
-  ltyp: typ;
 }
 
 (** Assigned values. *)
diff --git a/src/plugins/eva/gen-api.sh b/src/plugins/eva/gen-api.sh
deleted file mode 100755
index bef70b210efa58f893d65763ee185f7f8df8f651..0000000000000000000000000000000000000000
--- a/src/plugins/eva/gen-api.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env bash
-##########################################################################
-#                                                                        #
-#  This file is part of Frama-C.                                         #
-#                                                                        #
-#  Copyright (C) 2007-2023                                               #
-#    CEA (Commissariat à l'énergie atomique et aux énergies              #
-#         alternatives)                                                  #
-#                                                                        #
-#  you can redistribute it and/or modify it under the terms of the GNU   #
-#  Lesser General Public License as published by the Free Software       #
-#  Foundation, version 2.1.                                              #
-#                                                                        #
-#  It is distributed in the hope that it will be useful,                 #
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of        #
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
-#  GNU Lesser General Public License for more details.                   #
-#                                                                        #
-#  See the GNU Lesser General Public License version 2.1                 #
-#  for more details (enclosed in the file licenses/LGPLv2.1).            #
-#                                                                        #
-##########################################################################
-
-set -eu
-
-dir=$(dirname $0)
-
-# Generate MLI
-
-cat $dir/Eva.header >> Eva.mli
-
-for i in "$@"
-do
-    if [[ ! "$i" =~ [.]header$ ]]; then
-        file=$(basename $i)
-        module=${file%.*}
-        Module="$(echo "${module:0:1}" | tr '[:lower:]' '[:upper:]')${module:1}"
-        printf '\nmodule %s: sig\n' $Module >> Eva.mli
-        awk '/\[@@@ api_start\]/{flag=1;next} /\[@@@ api_end\]/{flag=0} flag{ print (NF ? "  ":"") $0 }' $i  >> Eva.mli
-        printf 'end\n' >> Eva.mli
-    fi
-done
-
-# Generate ML
-
-cat $dir/Eva.header >> Eva.ml
-
-for i in "$@"
-do
-    if [[ ! "$i" =~ [.]header$ ]]; then
-        file=$(basename $i)
-        module=${file%.*}
-        Module="$(echo "${module:0:1}" | tr '[:lower:]' '[:upper:]')${module:1}"
-        printf '\nmodule %s = %s\n' $Module $Module >> Eva.ml
-    fi
-done
diff --git a/src/plugins/eva/Eva.header b/src/plugins/eva/gen_api/Eva.header
similarity index 95%
rename from src/plugins/eva/Eva.header
rename to src/plugins/eva/gen_api/Eva.header
index 6c04963012769bb8af15b90213ce42c5fd70fe04..08055c39310a803a657c3ca89599352a7fd67799 100644
--- a/src/plugins/eva/Eva.header
+++ b/src/plugins/eva/gen_api/Eva.header
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -35,4 +35,3 @@
 
     Other modules are for internal use only. *)
 
-(* This file is generated. Do not edit. *)
diff --git a/src/plugins/eva/gen_api/gen_api.ml b/src/plugins/eva/gen_api/gen_api.ml
new file mode 100644
index 0000000000000000000000000000000000000000..fc15a52ca1f355f4bc2af92c55e39bfbbc2a7edc
--- /dev/null
+++ b/src/plugins/eva/gen_api/gen_api.ml
@@ -0,0 +1,86 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* Script used to generate the interface file Eva.mli from other .mli files,
+   given as argument of this script. *)
+
+let usage_msg = Sys.argv.(0) ^ " <file1.mli> [<file2.mli>] ..."
+
+let fail =
+  Printf.kfprintf (fun _ -> exit 1) stderr
+
+let file_contents filename =
+  let input = open_in_bin filename in
+  let contents = really_input_string input (in_channel_length input) in
+  close_in input;
+  contents
+
+let extract_exported_interface s =
+  let regexp =
+    Str.regexp "\\[@@@ api_start\\]\\(\\(.\\|\n\\)*\\)\\[@@@ api_end\\]"
+  in
+  let rec iter acc i =
+    match Str.search_forward regexp s i with
+    | i ->
+      let subpart = Str.matched_group 1 s in
+      iter (acc ^ subpart) (i + String.length subpart)
+    | exception Not_found -> acc
+  in
+  String.trim (iter "" 0)
+
+let indent s =
+  Str.(global_replace (regexp "^.+$") ("  \\0") s) ^ "\n"
+
+let generate_api input_files =
+  let mli_out = open_out "Eva.mli"
+  and ml_out = open_out "Eva.ml"
+  in
+  let add_file filename =
+    let contents = file_contents filename in
+    match Filename.extension filename with
+    | ".header" ->
+      output_string mli_out contents;
+      output_string mli_out "(* This file is generated. Do not edit. *)\n";
+      output_string ml_out contents;
+      output_string ml_out "(* This file is generated. Do not edit. *)\n\n";
+    | ".mli" ->
+      let module_name =
+        String.capitalize_ascii Filename.(basename filename |> chop_extension)
+      in
+      Printf.fprintf mli_out "\n";
+      Printf.fprintf mli_out "module %s: sig\n" module_name;
+      output_string mli_out (indent (extract_exported_interface contents));
+      Printf.fprintf mli_out "end\n";
+      Printf.fprintf ml_out "module %s = %s\n" module_name module_name;
+    | extension ->
+      fail "unrecognized extension: %s\n" extension
+  in
+  List.iter add_file input_files;
+  close_out mli_out;
+  close_out ml_out
+
+let () =
+  let input_files = ref [] in
+  let add_file name = input_files := name :: !input_files in
+  let specs = [] in
+  Arg.parse specs add_file usage_msg;
+  generate_api (List.rev !input_files)
diff --git a/src/plugins/eva/gen_test_config.sh b/src/plugins/eva/gen_test_config.sh
index 53df1add685cc92c4519e532d653a2026de85126..0bf1127d554252e253eddc5d3b2054ca594602e1 100755
--- a/src/plugins/eva/gen_test_config.sh
+++ b/src/plugins/eva/gen_test_config.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/eva/gui/gui_callstacks_filters.ml b/src/plugins/eva/gui/gui_callstacks_filters.ml
index f4af6ba1b8016f7529c2a4329364297781c4d420..84bc9e9aa528e6f3ce5cd54522ea270d3a0a29d6 100644
--- a/src/plugins/eva/gui/gui_callstacks_filters.ml
+++ b/src/plugins/eva/gui/gui_callstacks_filters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/gui_callstacks_filters.mli b/src/plugins/eva/gui/gui_callstacks_filters.mli
index 39da15edb11ae559db931ffb99a84682c07c8da7..9ec7ca960267d1d71326ef10dfb41be12f9da460 100644
--- a/src/plugins/eva/gui/gui_callstacks_filters.mli
+++ b/src/plugins/eva/gui/gui_callstacks_filters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/gui_callstacks_manager.ml b/src/plugins/eva/gui/gui_callstacks_manager.ml
index 07a5b57f8ae5451043e520a6312e7e8d5c315c51..acce8e1965c2ceb1c1ee3ec11c2b702a06901bf8 100644
--- a/src/plugins/eva/gui/gui_callstacks_manager.ml
+++ b/src/plugins/eva/gui/gui_callstacks_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/gui_callstacks_manager.mli b/src/plugins/eva/gui/gui_callstacks_manager.mli
index 7f2508bda605920c70abc99c2afc6b3427a5c48f..e94ec4711ee7778d0012927be6213bb7ee798226 100644
--- a/src/plugins/eva/gui/gui_callstacks_manager.mli
+++ b/src/plugins/eva/gui/gui_callstacks_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/gui_eval.ml b/src/plugins/eva/gui/gui_eval.ml
index 6d1e506fff5d02669b0435f6e1bcf98bf6cb1fa2..05999668da4373c98805fa58fc8bc348491faee0 100644
--- a/src/plugins/eva/gui/gui_eval.ml
+++ b/src/plugins/eva/gui/gui_eval.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -201,12 +201,13 @@ module Make (X: Analysis.S) = struct
       GO_Bottom, true
 
   let lval_to_offsetmap state lv =
+    let lv = Eva_ast.translate_lval lv in
     let loc, alarms = X.eval_lval_to_loc state lv in
     let ok = Alarmset.is_empty alarms in
     let state = get_cvalue_or_top state in
     let aux loc (acc_res, acc_ok) =
       let res, ok =
-        match lv with (* catch simplest pattern *)
+        match lv.node with (* catch simplest pattern *)
         | Var vi, NoOffset -> extract_single_var state vi
         | _ -> reduce_loc_and_eval state loc
       in
@@ -248,6 +249,7 @@ module Make (X: Analysis.S) = struct
 
   let lval_zone_ev =
     let lv_to_zone state lv =
+      let lv = Eva_ast.translate_lval lv in
       let loc, _alarms = X.eval_lval_to_loc state lv in
       match loc with
       | `Bottom -> Locations.Zone.bottom, false, false
@@ -284,6 +286,7 @@ module Make (X: Analysis.S) = struct
 
   let exp_ev =
     let eval_exp_and_warn state e =
+      let e = Eva_ast.translate_exp e in
       let r = X.eval_expr state e in
       fst r, Alarmset.is_empty (snd r), false
     in
@@ -302,6 +305,7 @@ module Make (X: Analysis.S) = struct
 
   let lval_ev =
     let eval_and_warn state lval =
+      let lval = Eva_ast.translate_lval lval in
       let r = X.copy_lvalue state lval in
       let flagged_value = match fst r with
         | `Bottom -> Eval.Flagged_Value.bottom
diff --git a/src/plugins/eva/gui/gui_eval.mli b/src/plugins/eva/gui/gui_eval.mli
index 52be333c333b9f80a9fe5adf38fb87f9a486b5fb..8c01ea9d0d74939c89a79e7602d872b223f356b7 100644
--- a/src/plugins/eva/gui/gui_eval.mli
+++ b/src/plugins/eva/gui/gui_eval.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/gui_red.ml b/src/plugins/eva/gui/gui_red.ml
index 563d5b4e213db5da6df9677d5bbd5707f1454ade..3d0cdcdb5a06c0c9f97ada84230895de4ff172db 100644
--- a/src/plugins/eva/gui/gui_red.ml
+++ b/src/plugins/eva/gui/gui_red.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/gui_red.mli b/src/plugins/eva/gui/gui_red.mli
index c6ef4e44317c2c06f169bf3defcdc1b91b372d36..ef0177a9d66e5680b65f1256d4ceb3bfe00a52d5 100644
--- a/src/plugins/eva/gui/gui_red.mli
+++ b/src/plugins/eva/gui/gui_red.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/gui_types.ml b/src/plugins/eva/gui/gui_types.ml
index 3f989adaf5db8eb63d43507cab31ea63783d8d19..554f5d74d09a854922bd818bc1aae85948682021 100644
--- a/src/plugins/eva/gui/gui_types.ml
+++ b/src/plugins/eva/gui/gui_types.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/gui_types.mli b/src/plugins/eva/gui/gui_types.mli
index 04b713cd82aa5d8f73ccb4d14baa58a38cbeddfe..dbb4abcc328b3862aaa177b0e3cb12d33dae72bd 100644
--- a/src/plugins/eva/gui/gui_types.mli
+++ b/src/plugins/eva/gui/gui_types.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/gui/register_gui.ml b/src/plugins/eva/gui/register_gui.ml
index 9f7c8e0b905ee91349bbd3788337f5999c245545..5935ba6a6866787b56caa84a06973e018b3696e9 100644
--- a/src/plugins/eva/gui/register_gui.ml
+++ b/src/plugins/eva/gui/register_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -518,7 +518,7 @@ module Select (Eval: Eval) = struct
          | Mem _, NoOffset when Cil.isFunctionType ty -> begin
              (* Function pointers *)
              (* get the list of functions in the values *)
-             let e = Eva_utils.lval_to_exp lv in
+             let e = Eva_ast.(Build.lval (translate_lval lv)) in
              let state =
                match ki with
                | Kglobal -> Eval.Analysis.get_global_state ()
diff --git a/src/plugins/eva/gui/register_gui.mli b/src/plugins/eva/gui/register_gui.mli
index 96922663fda23e6a97ca4460e4d6b89559e496a0..4e3c372fff145efedc3770d55cafd5d755a609ae 100644
--- a/src/plugins/eva/gui/register_gui.mli
+++ b/src/plugins/eva/gui/register_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/legacy/eval_annots.ml b/src/plugins/eva/legacy/eval_annots.ml
index 8b6ae759c10f0da2504a0fd42e151b62ab49ce65..beff72440d8f151342f6500feb010aec0b244fea 100644
--- a/src/plugins/eva/legacy/eval_annots.ml
+++ b/src/plugins/eva/legacy/eval_annots.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/legacy/eval_annots.mli b/src/plugins/eva/legacy/eval_annots.mli
index bb4b33cac7a70b9ffb9fa0d2fb474bff0b2ee8aa..a1302c5d232bf2d5c70a635121297a259e15e18d 100644
--- a/src/plugins/eva/legacy/eval_annots.mli
+++ b/src/plugins/eva/legacy/eval_annots.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/legacy/eval_op.ml b/src/plugins/eva/legacy/eval_op.ml
index 2aff52c9bf29e0e89220b727bcada149633d33eb..8573642195cac4b0701a71bc726642759e15decc 100644
--- a/src/plugins/eva/legacy/eval_op.ml
+++ b/src/plugins/eva/legacy/eval_op.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/legacy/eval_op.mli b/src/plugins/eva/legacy/eval_op.mli
index cb87265abdff810b65a1d561f9c52c846cec9fb6..40c5f2f62fde559cef4c6ab08cffa7f1408c8993 100644
--- a/src/plugins/eva/legacy/eval_op.mli
+++ b/src/plugins/eva/legacy/eval_op.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/legacy/eval_terms.ml b/src/plugins/eva/legacy/eval_terms.ml
index b661c99d40603029704486f60a2649440de460ee..62539f594e42587fbaf01d4fdddd3bf50b0012c6 100644
--- a/src/plugins/eva/legacy/eval_terms.ml
+++ b/src/plugins/eva/legacy/eval_terms.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -995,8 +995,8 @@ let forward_binop_by_type typ =
 
 let forward_binop typ v1 op v2 =
   match op with
-  | Eq | Ne | Le | Lt | Ge | Gt ->
-    let comp = Eva_utils.conv_comp op in
+  | Eva_ast.Eq | Ne | Le | Lt | Ge | Gt ->
+    let comp = Eva_ast.conv_relation op in
     if Cil.isPointerType typ || Cvalue_forward.are_comparable comp v1 v2
     then forward_binop_by_type typ v1 op v2
     else Cvalue.V.zero_or_one
@@ -1097,6 +1097,7 @@ let rec eval_term ~alarm_mode env t =
       | BNot -> r.etype (* can only be used on an integer type *)
       | LNot -> Cil.intType
     in
+    let op = Eva_ast.translate_unop op in
     let v = Cvalue_forward.forward_unop r.etype op r.eover in
     let eover = v in
     { etype = typ';
@@ -1363,6 +1364,7 @@ and eval_binop ~alarm_mode env op t1 t2 =
     let te1 = Cil.unrollType r1.etype in
     check_logic_alarms ~alarm_mode te1 r1 op r2;
     let typ_res = infer_binop_res_type op te1 in
+    let op = Eva_ast.translate_binop op in
     let eover = forward_binop te1 r1.eover op r2.eover in
     let default _r1 _r2 = under_from_over eover in
     let add_untyped_op factor =
diff --git a/src/plugins/eva/legacy/eval_terms.mli b/src/plugins/eva/legacy/eval_terms.mli
index c50a90054c247e069d75035a115410c84cc95713..4fad597a141b525cee6911892c522f14fa0cc021 100644
--- a/src/plugins/eva/legacy/eval_terms.mli
+++ b/src/plugins/eva/legacy/eval_terms.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/legacy/logic_inout.ml b/src/plugins/eva/legacy/logic_inout.ml
index 7f6db6d4f75c48e434e26205b43ee000b084f9e7..a5c64fd0da0faae3641709d73d86865385802431 100644
--- a/src/plugins/eva/legacy/logic_inout.ml
+++ b/src/plugins/eva/legacy/logic_inout.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/legacy/logic_inout.mli b/src/plugins/eva/legacy/logic_inout.mli
index f5f7aaf82950babc4a850f8e10ab2d7b3d177748..51f3770bcfc9f597e9a30529befcb93abe118896 100644
--- a/src/plugins/eva/legacy/logic_inout.mli
+++ b/src/plugins/eva/legacy/logic_inout.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/locations/locations_product.ml b/src/plugins/eva/locations/locations_product.ml
index e6fad814205d20093d00dd1ced03c3f8c47ece82..37dc0a491d8e80b1d1fbcdb4c24ee3051d5f88fb 100644
--- a/src/plugins/eva/locations/locations_product.ml
+++ b/src/plugins/eva/locations/locations_product.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/locations/locations_product.mli b/src/plugins/eva/locations/locations_product.mli
index 150c21c89eba0fca1c895b2b9fc553e7e4a02392..2350f91097d91a6d449591eee5001e9888888269 100644
--- a/src/plugins/eva/locations/locations_product.mli
+++ b/src/plugins/eva/locations/locations_product.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/parameters.ml b/src/plugins/eva/parameters.ml
index 9f28b45413909c1f5fa636036d365b884c4b92e8..873fae60068548585616ccd4e1b7189afb437840 100644
--- a/src/plugins/eva/parameters.ml
+++ b/src/plugins/eva/parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/parameters.mli b/src/plugins/eva/parameters.mli
index 7c580cf947f83391e2eb898aa173fcbe1793f966..26f6d68592e322fd5f9d67c3dd244ef7974abb63 100644
--- a/src/plugins/eva/parameters.mli
+++ b/src/plugins/eva/parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/auto_loop_unroll.ml b/src/plugins/eva/partitioning/auto_loop_unroll.ml
index fca0c44ebc07734543e871f4d45fa8be744cf173..5c7d6e447b38a7e43abaae74d1b99c468b156826 100644
--- a/src/plugins/eva/partitioning/auto_loop_unroll.ml
+++ b/src/plugins/eva/partitioning/auto_loop_unroll.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -56,15 +56,13 @@
    normalization.
    Any other assignment of [v] cancels the heuristic. *)
 
-open Cil_types
-
 let is_true = function
   | `True | `TrueReduced _ -> true
   | _ -> false
 
 (* Module for auxiliary functions manipulating interpreted automata. *)
 module Graph = struct
-  open Interpreted_automata
+  open Eva_automata
 
   type loop =
     { graph: G.t;   (* The complete graph of the englobing function. *)
@@ -78,7 +76,7 @@ module Graph = struct
     let automaton = get_automaton kf in
     let graph = automaton.graph in
     let vertex, _ = Cil_datatype.Stmt.Hashtbl.find automaton.stmt_table stmt in
-    match get_wto_index kf vertex with
+    match vertex.vertex_wto_index with
     | [] -> raise Not_found
     | head :: _ ->
       (* Find in the wto the component whose head is [head]. *)
@@ -88,14 +86,12 @@ module Graph = struct
         | Wto.Component (h, l) :: tl ->
           if Vertex.equal h head then {graph; head; wto = l} else find (l @ tl)
       in
-      find (get_wto kf)
+      find automaton.wto
 
   (* Applies [f acc instr] to all instructions [instr] in the [loop]. *)
-  let fold_instr f loop acc =
+  let fold_transitions f loop acc =
     let transfer (_v1, edge, _v2) acc =
-      match edge.edge_transition with
-      | Instr (instr, _stmt) -> f acc instr
-      | _ -> acc
+      f acc edge.edge_transition
     in
     let compute_vertex = G.fold_pred_e transfer loop.graph in
     let wto = Wto.flatten loop.wto in
@@ -145,9 +141,8 @@ module Graph = struct
   (* A loop exit condition is an expression and a boolean expression whether the
      expression must be zero or not-zero to exit the loop. *)
   module Condition = struct
-    module Exp = Cil_datatype.ExpStructEq
     module Info = struct let module_name = "Condition" end
-    include Datatype.Pair_with_collections (Exp) (Datatype.Bool) (Info)
+    include Datatype.Pair_with_collections (Eva_ast.Exp) (Datatype.Bool) (Info)
   end
 
   (* Returns a list of loop exit conditions. *)
@@ -175,17 +170,20 @@ let add_written_var vi effect =
   let written_vars = Cil_datatype.Varinfo.Set.add vi effect.written_vars in
   { effect with written_vars }
 
-let is_frama_c_builtin exp =
-  match exp.enode with
-  | Lval (Var vi, NoOffset) -> Ast_info.start_with_frama_c_builtin vi.vname
+let is_frama_c_builtin (exp : Eva_ast.exp) =
+  match exp.node with
+  | Lval { node = Var vi, NoOffset } ->
+    Ast_info.start_with_frama_c_builtin vi.vname
   | _ -> false
 
-let compute_instr_effect effect = function
-  | Set ((Var varinfo, _), _, _) -> add_written_var varinfo effect
-  | Set ((Mem _, _), _, _) -> { effect with pointer_writes = true }
-  | Call (Some (Var varinfo, _), _, _, _) ->
+let compute_transition_effect effect = function
+  | Eva_automata.Assign ({node = (Var varinfo, _)}, _, _) ->
+    add_written_var varinfo effect
+  | Assign ({node = (Mem _, _)}, _, _) ->
+    { effect with pointer_writes = true }
+  | Call (Some {node = Var varinfo, _}, _, _, _) ->
     { (add_written_var varinfo effect) with call = true; }
-  | Call (Some (Mem _, _), _, _, _) ->
+  | Call (Some {node = Mem _, _}, _, _, _) ->
     { effect with pointer_writes = true; call = true; }
   | Call (None, exp, _, _) when not (is_frama_c_builtin exp) ->
     { effect with call = true }
@@ -202,7 +200,7 @@ let compute_loop_effect loop =
       call = false;
       assembly = false; }
   in
-  let effect = Graph.fold_instr compute_instr_effect loop acc in
+  let effect = Graph.fold_transitions compute_transition_effect loop acc in
   if effect.assembly then None else Some effect
 
 (* The status of a lvalue for the automatic loop unroll heuristic. *)
@@ -214,23 +212,22 @@ type var_status =
                  in the loop. *)
   | Unsuitable (* Cannot be used for the heuristic. *)
 
-let is_integer lval = Cil.isIntegralType (Cil.typeOfLval lval)
+let is_integer lval = Cil.isIntegralType lval.Eva_ast.typ
 
 (* Computes the status of a lvalue for the heuristic, according to the
    loop effects. Uses [eval_ptr] to compute the bases pointed by pointer
    expressions. *)
-let classify eval_ptr loop_effect lval =
+let classify eval_ptr loop_effect (lval : Eva_ast.lval) =
   let is_written varinfo =
     Cil_datatype.Varinfo.Set.mem varinfo loop_effect.written_vars
   in
-  let rec is_const_expr expr =
-    match expr.enode with
+  let rec is_const_expr (expr : Eva_ast.exp) =
+    match expr.node with
     | Lval lval -> classify_lval lval = Constant
     | UnOp (_, e, _) | CastE (_, e) -> is_const_expr e
     | BinOp (_, e1, e2, _) -> is_const_expr e1 && is_const_expr e2
-    | Const _ | SizeOf _ | SizeOfE _ | SizeOfStr _
-    | AlignOf _ | AlignOfE _ | AddrOf _ | StartOf _ -> true
-  and classify_lval = function
+    | Const _ | AddrOf _ | StartOf _ -> true
+  and classify_lval lv = match lv.node with
     | Var varinfo, offset ->
       if (varinfo.vglob && loop_effect.call)
       || not (is_const_offset offset)
@@ -259,13 +256,12 @@ let classify eval_ptr loop_effect lval =
   classify_lval lval
 
 (* Returns the list of all lvalues appearing in an expression. *)
-let rec get_lvalues expr =
-  match expr.enode with
+let rec get_lvalues (expr : Eva_ast.exp) =
+  match expr.node with
   | Lval lval -> [ lval ]
   | UnOp (_, e, _) | CastE (_, e) -> get_lvalues e
   | BinOp (_op, e1, e2, _typ) -> get_lvalues e1 @ get_lvalues e2
-  | Const _ | SizeOf _ | SizeOfE _ | SizeOfStr _
-  | AlignOf _ | AlignOfE _ | AddrOf _ | StartOf _ -> []
+  | Const _ | AddrOf _ | StartOf _ -> []
 
 (* Finds the unique candidate lvalue for the automatic loop unrolling
    heuristic in the expression [expr], if it exists. Returns None otherwise.  *)
@@ -286,38 +282,33 @@ let find_lonely_candidate eval_ptr loop_effect expr =
    except on assignemnts of [lval]:
    - to the value of an expression [expr], it applies [f expr acc];
    - to a function call, or if [inner_loop] is true, it raises [exn]. *)
-let transfer_assign lval exn f ~inner_loop acc instr =
-  let is_lval = Cil_datatype.LvalStructEq.equal lval in
-  let transfer_instr ~inner_loop acc = function
-    | Set (lv, expr, _loc) when is_lval lv ->
-      if inner_loop then raise exn else f expr acc
-    | Local_init (vi, AssignInit (SingleInit expr), _loc)
-      when is_lval (Cil.var vi) && not inner_loop ->
-      f expr acc
-    | Local_init (vi, _, _) when is_lval (Cil.var vi) -> raise exn
-    | Call (Some lv, _, _, _) when is_lval lv -> raise exn
-    | _ -> acc
-  in
-  match instr with
-  | Interpreted_automata.Instr (instr, _stmt) ->
-    transfer_instr ~inner_loop acc instr
+let transfer_assign lval exn f ~inner_loop acc transition =
+  let is_lval = Eva_ast.Lval.equal lval in
+  let is_lval_var vi = is_lval (Eva_ast.Build.var vi) in
+  match transition with
+  | Eva_automata.Assign (lv, expr, _stmt) when is_lval lv ->
+    if inner_loop then raise exn else f expr acc
+  | Init (vi, SingleInit (expr, _), _) when is_lval_var vi && not inner_loop ->
+    f expr acc
+  | Init (vi, _, _) when is_lval_var vi -> raise exn
+  | Call (Some lv, _, _, _) when is_lval lv -> raise exn
   | _ -> acc
 
 (* If in the [loop], [lval] is always assigned to the value of another
    lvalue, returns this new lvalue. Otherwise, returns [lval]. *)
-let cross_equality loop lval =
+let cross_equality loop (lval : Eva_ast.lval) =
   (* If no such single equality can be found, return [lval] unchanged. *)
   let exception No_equality in
-  let find_lval expr _x =
-    match expr.enode with
+  let find_lval (expr : Eva_ast.exp) _x =
+    match expr.node with
     | Lval lval -> lval
     | _ -> raise No_equality
   in
-  let transfer ~inner_loop lval instr =
-    transfer_assign lval No_equality find_lval ~inner_loop lval instr
+  let transfer ~inner_loop lval transition =
+    transfer_assign lval No_equality find_lval ~inner_loop lval transition
   in
   let join lv1 lv2 =
-    if Cil_datatype.LvalStructEq.equal lv1 lv2 then lv1 else raise No_equality
+    if Eva_ast.Lval.equal lv1 lv2 then lv1 else raise No_equality
   in
   match Graph.compute ~backward:true loop transfer join lval with
   | Some lval -> lval
@@ -349,38 +340,38 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
   (* Adds or subtracts the integer value of [expr] to the current increment
      [acc.delta], according to [binop] which can be PlusA or MinusA.
      Raises NoIncrement if [expr] is not a constant integer expression. *)
-  let add_to_delta binop acc expr =
-    let typ = Cil.typeOf expr in
-    match Cil.constFoldToInt expr with
+  let add_to_delta context binop acc (expr : Eva_ast.exp) =
+    match Eva_ast.fold_to_integer expr with
     | None -> raise NoIncrement
     | Some i ->
-      let add_to v =
-        v >>- fun v -> Val.forward_binop typ binop v (Val.inject_int typ i)
-      in
-      { value = add_to acc.value; delta = add_to acc.delta; }
+      let typ = expr.typ in
+      let inject i = Val.inject_int typ i in
+      let add v = let* v in Val.forward_binop context typ binop v (inject i) in
+      { value = add acc.value; delta = add acc.delta; }
 
   (* Adds to [acc] the increment from the assignement of [lval] to the value
      of [expr]. Raises NoIncrement if this is not an increment of [lval]. *)
-  let rec delta_assign lval expr acc =
+  let rec delta_assign context lval expr acc =
     (* Is the expression [e] equal to the lvalue [lval] (modulo cast)? *)
-    let rec is_lval e = match e.enode with
-      | Lval lv -> Cil_datatype.LvalStructEq.equal lval lv
+    let rec is_lval (e : Eva_ast.exp) = match e.node with
+      | Lval lv -> Eva_ast.Lval.equal lval lv
       | CastE (typ, e) -> Cil.isIntegralType typ && is_lval e
       | _ -> false
     in
-    match Cil.constFoldToInt expr with
+    match Eva_ast.fold_to_integer expr with
     | Some i ->
-      let v = Val.inject_int (Cil.typeOf expr) i in
+      let v = Val.inject_int expr.typ i in
       { value = `Value v; delta = `Bottom; }
     | None ->
-      match expr.enode with
+      match expr.node with
       | BinOp ((PlusA | MinusA) as binop, e1, e2, _) ->
         if is_lval e1
-        then add_to_delta binop acc e2
+        then add_to_delta context binop acc e2
         else if is_lval e2 && binop = PlusA
-        then add_to_delta binop acc e1
+        then add_to_delta context binop acc e1
         else raise NoIncrement
-      | CastE (typ, e) when Cil.isIntegralType typ -> delta_assign lval e acc
+      | CastE (typ, e) when Cil.isIntegralType typ ->
+        delta_assign context lval e acc
       | _ -> raise NoIncrement
 
   (* Computes an over-approximation of the increment of [lval] in the [loop].
@@ -388,8 +379,8 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
      should be a direct access to a variable whose address is not taken,
      and which should not be global if the loop contains function calls.
      Returns None if no increment can be computed. *)
-  let compute_delta lval loop =
-    let transfer = transfer_assign lval NoIncrement (delta_assign lval) in
+  let compute_delta ctx lval loop =
+    let transfer = transfer_assign lval NoIncrement (delta_assign ctx lval) in
     let join t1 t2 =
       { value = Bottom.join Val.join t1.value t2.value;
         delta = Bottom.join Val.join t1.delta t2.delta; }
@@ -450,12 +441,13 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
          [condition] is NOT positive; its complement is an under-approximation
          of the values for which [condition] is positive. *)
       let cvalue = get_cvalue value in
-      cvalue_complement (Cil.typeOf expr) cvalue >>= fun cvalue ->
+      cvalue_complement expr.typ cvalue >>= fun cvalue ->
       Some (Val.set Main_values.CVal.key cvalue Val.top)
 
   (* If [lval] is a varinfo out-of-scope at statement [stmt] of function [kf],
      introduces it to the [state]. *)
-  let enter_scope state kf stmt = function
+  let enter_scope state kf stmt (lval : Eva_ast.lval) =
+    match lval.node with
     | Var vi, _ ->
       let state =
         if vi.vglob || vi.vformal || Kernel_function.var_is_in_scope stmt vi
@@ -475,7 +467,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
     (* If [lval] is not in scope at [stmt], introduces it into [state] so that
        the [condition] can be properly evaluated in [state]. *)
     let state = enter_scope state kf stmt lval in
-    let expr = Cil.new_exp ~loc:condition.eloc (Lval lval) in
+    let expr = Eva_ast.Build.lval lval in
     (* Evaluate the [condition] in the given [state]. *)
     fst (Eval.evaluate state condition) >> fun (valuation, _v) ->
     (* In the resulting valuation, replace the value of [expr] by [top_int]
@@ -517,7 +509,7 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
 
   (* Is the number of iterations of a loop bounded by [limit]?
      [state] is the loop entry state, and [loop_block] the block of the loop. *)
-  let is_bounded_loop kf stmt loop state limit =
+  let is_bounded_loop kf stmt loop context state limit =
     (* Computes the effect of the loop. Stops if it contains assembly code. *)
     compute_loop_effect loop >>: fun loop_effect ->
     (* Finds loop exit conditions. *)
@@ -540,9 +532,10 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
       evaluate_lvalue state lval >>: fun v_init ->
       (* Computes an over-approximation [v_incr] of the value update of [lval]
          in one iteration of the loop. *)
-      compute_delta lval loop >>: fun v_incr ->
-      let typ = Cil.typeOfLval lval in
-      let binop op v1 v2 = Bottom.non_bottom (Val.forward_binop typ op v1 v2) in
+      compute_delta context lval loop >>: fun v_incr ->
+      let typ = lval.typ in
+      let forward_binop op v1 v2 = Val.forward_binop context typ op v1 v2 in
+      let binop op v1 v2 = Bottom.non_bottom (forward_binop op v1 v2) in
       (* Computes the possible values of [lval] after n loop iterations. *)
       let value =
         (* [delta] is the possible increments of [lval] in one iteration. *)
@@ -578,10 +571,12 @@ module Make (Abstract: Abstractions.S_with_evaluation) = struct
   (* Computes an automatic loop unrolling for statement [stmt] in state [state],
      with a maximum limit. Returns None for no automatic loop unrolling. *)
   let compute ~max_unroll state stmt =
+    let open Option.Operators in
+    let* from_domains = Dom.build_context state |> Bottom.to_option in
     try
       let kf = Kernel_function.find_englobing_kf stmt in
       let loop = Graph.find_loop kf stmt in
-      if is_bounded_loop kf stmt loop state max_unroll
+      if is_bounded_loop kf stmt loop { from_domains } state max_unroll
       then Some max_unroll
       else None
     with Not_found -> None
diff --git a/src/plugins/eva/partitioning/auto_loop_unroll.mli b/src/plugins/eva/partitioning/auto_loop_unroll.mli
index 1922eb815dfc850ff97e624f4730ff9c58444028..f8881f627b0afb63a50041473d7731e77eb0986d 100644
--- a/src/plugins/eva/partitioning/auto_loop_unroll.mli
+++ b/src/plugins/eva/partitioning/auto_loop_unroll.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/partition.ml b/src/plugins/eva/partitioning/partition.ml
index 13ae29b16c5695f7f8418e115b48e0249b67ce18..489368c2ee700b14a2a39c59abd1c10f569a4b80 100644
--- a/src/plugins/eva/partitioning/partition.ml
+++ b/src/plugins/eva/partitioning/partition.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -25,42 +25,94 @@ open Bottom.Operators
 
 (* --- Split monitors --- *)
 
+type split_kind = Eva_annotations.split_kind = Static | Dynamic
+[@@deriving eq,ord]
+
+(* Same as Eva_annotations.split_term but with Eva_ast. *)
+type split_term =
+  | Expression of Eva_ast.Exp.t
+  | Predicate of Cil_datatype.PredicateStructEq.t
+[@@deriving eq, ord]
+
+let translate_split_term
+    (term : Eva_annotations.split_term) : split_term * Cil_types.location =
+  match term with
+  | Expression cil_exp ->
+    Expression (Eva_ast.translate_exp cil_exp), cil_exp.eloc
+  | Predicate pred ->
+    Predicate pred, pred.pred_loc
+
 type split_monitor = {
+  split_term : split_term;
+  split_kind : split_kind;
+  split_loc : Cil_datatype.Location.t;
   split_limit : int;
   mutable split_values : Datatype.Integer.Set.t;
 }
+[@@deriving eq,ord]
+
+let new_monitor
+    ~(limit : int)
+    ~(kind : split_kind)
+    ~(term : Eva_annotations.split_term) =
+  let split_term, split_loc = translate_split_term term in
+  {
+    split_term;
+    split_kind = kind;
+    split_loc;
+    split_limit = limit;
+    split_values = Datatype.Integer.Set.empty;
+  }
 
-let new_monitor ~split_limit = {
-  split_limit;
-  split_values = Datatype.Integer.Set.empty;
-}
+module SplitTerm = Datatype.Make_with_collections (struct
+    include Datatype.Serializable_undefined
+
+    module Exp = Eva_ast.Exp
+    module Predicate = Cil_datatype.PredicateStructEq
+
+    type t = split_term [@@deriving eq, ord]
+
+    let name = "Partition.SplitTerm"
+
+    let reprs =
+      Stdlib.List.map (fun e -> Expression e) Exp.reprs @
+      Stdlib.List.map (fun p -> Predicate p) Predicate.reprs
+
+    let pretty fmt = function
+      | Expression e -> Eva_ast.pp_exp fmt e
+      | Predicate p -> Printer.pp_predicate fmt p
+
+    let hash = function
+      | Expression e -> Hashtbl.hash (1, Exp.hash e)
+      | Predicate p -> Hashtbl.hash (2, Predicate.hash p)
+  end)
 
 module SplitMonitor = Datatype.Make_with_collections (
   struct
     include Datatype.Serializable_undefined
     module Values = Datatype.Integer.Set
 
-    type t = split_monitor
+    type t = split_monitor [@@deriving eq,ord]
 
     let name = "Partition.SplitMonitor"
 
-    let reprs = [ new_monitor ~split_limit:0 ]
-
-    let structural_descr =
-      Structural_descr.t_record
-        [| Datatype.Int.packed_descr; Values.packed_descr |]
-
-    let compare m1 m2 =
-      let c = Int.compare m1.split_limit m2.split_limit in
-      if c <> 0 then c else Values.compare m1.split_values m2.split_values
-
-    let equal = Datatype.from_compare
+    let reprs = [{
+        split_term = Expression (List.hd Eva_ast.Exp.reprs);
+        split_kind = Static;
+        split_loc = Cil_datatype.Location.unknown;
+        split_limit = 0;
+        split_values = Datatype.Integer.Set.empty
+      }]
 
     let pretty fmt m =
       Format.fprintf fmt "%d/%d" (Values.cardinal m.split_values) m.split_limit
 
     let hash m =
-      hash (Datatype.Int.hash m.split_limit, Values.hash m.split_values)
+      hash (
+        SplitTerm.hash m.split_term,
+        Cil_datatype.Location.hash m.split_loc,
+        Datatype.Int.hash m.split_limit,
+        Values.hash m.split_values)
 
     let copy m =
       { m with split_values = m.split_values }
@@ -85,46 +137,7 @@ let new_rationing ~limit ~merge = { current = ref 0; limit; merge }
 
 (* --- Keys --- *)
 
-type split_term = Eva_annotations.split_term =
-  | Expression of Cil_types.exp
-  | Predicate of Cil_types.predicate
-
-module SplitTerm = Datatype.Make_with_collections (struct
-    include Datatype.Serializable_undefined
-
-    module Expressions = Cil_datatype.ExpStructEq
-    module Predicates = Cil_datatype.PredicateStructEq
-
-    type t = split_term
-
-    let name = "Partition.SplitTerm"
-
-    let reprs =
-      Stdlib.List.map (fun e -> Expression e) Expressions.reprs @
-      Stdlib.List.map (fun p -> Predicate p) Predicates.reprs
-
-    let structural_descr =
-      Structural_descr.t_sum [|
-        [| Expressions.packed_descr |] ;
-        [| Predicates.packed_descr |] |]
-
-    let compare x y =
-      match x, y with
-      | Expression e1, Expression e2 -> Expressions.compare e1 e2
-      | Predicate p1, Predicate p2 -> Logic_utils.compare_predicate p1 p2
-      | Expression _, Predicate _ -> 1
-      | Predicate _, Expression _ -> -1
-
-    let equal = Datatype.from_compare
-
-    let pretty fmt = function
-      | Expression e -> Printer.pp_exp fmt e
-      | Predicate p -> Printer.pp_predicate fmt p
 
-    let hash = function
-      | Expression e -> FCHashtbl.hash (1,Expressions.hash e)
-      | Predicate p -> FCHashtbl.hash (2,Predicates.hash p)
-  end)
 
 module SplitMap = SplitTerm.Map
 
@@ -305,17 +318,15 @@ type unroll_limit =
   | IntLimit of int
   | AutoUnroll of Cil_types.stmt * int * int
 
-type split_kind = Eva_annotations.split_kind = Static | Dynamic
-
 type action =
   | Enter_loop of unroll_limit
   | Leave_loop
   | Incr_loop
   | Branch of branch * int
   | Ration of rationing
-  | Restrict of Cil_types.exp * Integer.t list
-  | Split of split_term * split_kind * split_monitor
-  | Merge of split_term
+  | Restrict of Eva_ast.exp * Integer.t list
+  | Split of split_monitor
+  | Merge of Eva_annotations.split_term
   | Update_dynamic_splits
 
 exception InvalidAction
@@ -370,47 +381,47 @@ struct
 
   exception Operation_failed
 
-  let fail ~exp message =
-    let source = fst exp.Cil_types.eloc in
+  let fail ~source message =
     let warn_and_raise message =
       Self.warning ~source ~once:true "%s" message;
       raise Operation_failed
     in
     Pretty_utils.ksfprintf warn_and_raise message
 
-  let evaluate_exp_to_ival state exp =
+  let evaluate_exp_to_ival ~source state exp =
     (* Evaluate the expression *)
     let valuation, value =
       match evaluate state exp with
       | `Value (valuation, value), alarms when Alarmset.is_empty alarms ->
         valuation, value
       | _ ->
-        fail ~exp "this partitioning parameter cannot be evaluated safely on \
-                   all states"
+        fail ~source "this partitioning parameter cannot be evaluated safely on \
+                      all states"
     in
     (* Get the cvalue *)
     let cvalue = match Abstract.Val.get Main_values.CVal.key with
       | Some get_cvalue -> get_cvalue value
-      | None -> fail ~exp "partitioning is disabled when the CValue domain is \
-                           not active"
+      | None -> fail ~source "partitioning is disabled when the CValue domain is \
+                              not active"
     in
     (* Extract the ival *)
     let ival =
       try
         Cvalue.V.project_ival cvalue
       with Cvalue.V.Not_based_on_null ->
-        fail ~exp "this partitioning parameter must evaluate to an integer"
+        fail ~source "this partitioning parameter must evaluate to an integer"
     in
     valuation, ival
 
   exception Split_limit of Integer.t option
 
   let split_by_value ~monitor state exp =
+    let source = fst monitor.split_loc in
     let module SplitValues = Datatype.Integer.Set in
-    let valuation, ival = evaluate_exp_to_ival state exp in
+    let valuation, ival = evaluate_exp_to_ival ~source state exp in
     (* Build a state with the lvalue set to a singleton *)
     let build i acc =
-      let value = Abstract.Val.inject_int (Cil.typeOf exp) i in
+      let value = Abstract.Val.inject_int exp.typ i in
       let state =
         let* valuation = Abstract.Eval.assume ~valuation state exp value in
         (* Check the reduction *)
@@ -418,9 +429,9 @@ struct
       in
       match state with
       | `Value state ->
-        let _,new_ival = evaluate_exp_to_ival state exp in
+        let _,new_ival = evaluate_exp_to_ival ~source state exp in
         if not (Ival.is_singleton_int new_ival) then
-          fail ~exp "failing to learn perfectly from split" ;
+          fail ~source "failing to learn perfectly from split" ;
         monitor.split_values <-
           SplitValues.add i monitor.split_values;
         (i, state) :: acc
@@ -452,18 +463,18 @@ struct
         | None -> ()
         | Some c -> Format.fprintf fmt " (%a)" Integer.pretty c
       in
-      fail ~exp "split on more than %d values%t prevented ; try to improve \
-                 the analysis precision or look at the option -eva-split-limit \
-                 to increase this limit."
+      fail ~source "split on more than %d values%t prevented ; try to improve \
+                    the analysis precision or look at the option -eva-split-limit \
+                    to increase this limit."
         monitor.split_limit pp_count
 
-  let eval_exp_to_int state exp =
-    let _valuation, ival = evaluate_exp_to_ival state exp in
+  let eval_exp_to_int ~source state exp =
+    let _valuation, ival = evaluate_exp_to_ival ~source state exp in
     try Integer.to_int_exn (Ival.project_int ival)
     with
     | Ival.Not_Singleton_Int ->
-      fail ~exp "this partitioning parameter must evaluate to a singleton"
-    | Z.Overflow -> fail ~exp "this partitioning parameter overflows an integer"
+      fail ~source "this partitioning parameter must evaluate to a singleton"
+    | Z.Overflow -> fail ~source "this partitioning parameter overflows an integer"
 
   let split_by_predicate state predicate =
     let env =
@@ -494,7 +505,7 @@ struct
   let stamp_by_value = match Abstract.Val.get Main_values.CVal.key with
     | None -> fun _ _ _ -> None
     | Some get -> fun expr expected_values state ->
-      let typ = Cil.typeOf expr in
+      let typ = expr.Eva_ast.typ in
       let make stamp i = stamp, i, Abstract.Val.inject_int typ i in
       let expected_values = List.mapi make expected_values in
       match fst (evaluate state expr) with
@@ -520,21 +531,24 @@ struct
       in
       let states =
         match term with
-        | Expression exp -> split_by_value ~monitor state exp
-        | Predicate pred -> split_by_predicate state pred
+        | Expression exp ->
+          split_by_value ~monitor state exp
+        | Predicate pred ->
+          split_by_predicate state pred
       in
       List.map update_key states
     with Operation_failed -> [(key,state)]
 
-  let split ~monitor (kind : split_kind) (term : split_term) (p : t) =
+  let split monitor (p : t) =
+    let { split_term; split_kind } = monitor in
     let add_split (key, state) =
       let dynamic_splits =
-        match kind with
-        | Static -> SplitMap.remove term key.dynamic_splits
-        | Dynamic -> SplitMap.add term monitor key.dynamic_splits
+        match split_kind with
+        | Static -> SplitMap.remove split_term key.dynamic_splits
+        | Dynamic -> SplitMap.add split_term monitor key.dynamic_splits
       in
       let key = { key with dynamic_splits } in
-      split_state ~monitor term (key, state)
+      split_state ~monitor split_term (key, state)
     in
     List.concat_map add_split p
 
@@ -554,8 +568,8 @@ struct
     List.map (fun (k,x) -> f k x, x) p
 
   let transfer_keys p = function
-    | Split (expr, kind, monitor) ->
-      split ~monitor kind expr p
+    | Split monitor ->
+      split monitor p
 
     | Update_dynamic_splits ->
       update_dynamic_splits p
@@ -567,7 +581,10 @@ struct
 
         | Enter_loop limit_kind -> fun k x ->
           let limit = try match limit_kind with
-            | ExpLimit exp -> eval_exp_to_int x exp
+            | ExpLimit cil_exp ->
+              let exp = Eva_ast.translate_exp cil_exp
+              and source = fst cil_exp.eloc in
+              eval_exp_to_int ~source x exp
             | IntLimit i -> i
             | AutoUnroll (stmt, min_unroll, max_unroll) ->
               match AutoLoopUnroll.compute ~max_unroll x stmt with
@@ -633,6 +650,7 @@ struct
           { k with ration_stamp = stamp_by_value expr expected_values s}
 
         | Merge term -> fun k _x ->
+          let term, _loc = translate_split_term term in
           { k with splits = SplitMap.remove term k.splits;
                    dynamic_splits = SplitMap.remove term k.dynamic_splits }
       in
diff --git a/src/plugins/eva/partitioning/partition.mli b/src/plugins/eva/partitioning/partition.mli
index 18256b222e2249af59dc67eef3c5128956a6b4f4..286bd6a3ac5e1145552d22b701b663d5bc7f5528 100644
--- a/src/plugins/eva/partitioning/partition.mli
+++ b/src/plugins/eva/partitioning/partition.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -104,16 +104,16 @@ type unroll_limit =
       states are then split or merged accordingly. *)
 type split_kind = Eva_annotations.split_kind = Static | Dynamic
 
-(** Splits can be performed according to a C expression or an ACSL predicate. *)
-type split_term = Eva_annotations.split_term =
-  | Expression of Cil_types.exp
-  | Predicate of Cil_types.predicate
-
 (** Split monitor: prevents splits from generating too many states. *)
 type split_monitor
 
-(** Creates a new monitor that allows to split up to [split_limit] states. *)
-val new_monitor: split_limit:int -> split_monitor
+(** Creates a new monitor that allows to split up to [limit] states according
+    to [term] evaluation. *)
+val new_monitor:
+  limit:int ->
+  kind:split_kind ->
+  term:Eva_annotations.split_term ->
+  split_monitor
 
 (** These actions redefine the partitioning by updating keys or spliting states.
     They are applied to all the pair (key, state) in a flow. *)
@@ -143,7 +143,7 @@ type action =
       If the rationing has been created with [merge:true], all the states from
       each flow receive the same stamp, but states from different flows receive
       different stamps, until [limit] states have been tagged. *)
-  | Restrict of Cil_types.exp * Integer.t list
+  | Restrict of Eva_ast.exp * Integer.t list
   (** [Restrict (exp, list)] restricts the rationing according to the evaluation
       of the expression [exp]:
       – for each integer [i] in [list], states in which [exp] evaluates exactly
@@ -152,15 +152,15 @@ type action =
       – all other states are joined together.
       Previous rationing is erased and replaced by this new stamping.
       Implementation of the option -eva-split-return. *)
-  | Split of split_term * split_kind * split_monitor
-  (** [Split (exp, kind, monitor)] tries to separate states such as the [exp]
-      evaluates to a singleton value in each state in the flow. If necessary and
-      possible, splits states into multiple states. States in which the [exp]
+  | Split of split_monitor
+  (** If [monitor] has been built as [new_monitor ~limit ~kind ~term] then
+      [Split monitor] tries to separate states such as the [term] evaluates
+      to a singleton value in each state in the flow. If necessary and
+      possible, splits states into multiple states. States in which the [term]
       evaluates to different values will be kept separate. Gives up the split
-      if [exp] evaluates to more than [limit] values, [limit] being the split
-      limit of the [monitor]. A same monitor can be used for successive splits
-      on different flows. *)
-  | Merge of split_term
+      if [term] evaluates to more than [limit] values. A same monitor can
+      be used for successive splits on different flows. *)
+  | Merge of Eva_annotations.split_term
   (** Forgets the split of an expression: states that were kept separate only
       by the split of this expression will be joined together. *)
   | Update_dynamic_splits
diff --git a/src/plugins/eva/partitioning/partitioning_index.ml b/src/plugins/eva/partitioning/partitioning_index.ml
index 422d29c424b36cfd050c73f464ae880d6c6cbf62..36c8adc3a792c179a985a3df43c4144924d9724f 100644
--- a/src/plugins/eva/partitioning/partitioning_index.ml
+++ b/src/plugins/eva/partitioning/partitioning_index.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/partitioning_index.mli b/src/plugins/eva/partitioning/partitioning_index.mli
index a5e4173c4af6b662431bbbe20a17f409351b2015..72b6d1672b1329ea35adb2a860ed0559cb15ee89 100644
--- a/src/plugins/eva/partitioning/partitioning_index.mli
+++ b/src/plugins/eva/partitioning/partitioning_index.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/partitioning_parameters.ml b/src/plugins/eva/partitioning/partitioning_parameters.ml
index bbea9b87aed55ef78df676d4cb53fb1d5ffdaa4e..d331531446bf78c9b260930d0302f1c3d0459528 100644
--- a/src/plugins/eva/partitioning/partitioning_parameters.ml
+++ b/src/plugins/eva/partitioning/partitioning_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -110,9 +110,10 @@ struct
     let add name l =
       try
         let vi = Globals.Vars.find_from_astinfo name Global in
-        let monitor = Partition.new_monitor ~split_limit in
-        let expr = Partition.Expression (Cil.evar vi) in
-        Partition.Split (expr, Partition.Dynamic, monitor) :: l
+        let term = Eva_annotations.Expression (Cil.evar vi)
+        and kind = Partition.Dynamic in
+        let monitor = Partition.new_monitor ~limit:split_limit ~term ~kind in
+        Partition.Split monitor :: l
       with Not_found ->
         warn ~current:false "cannot find the global variable %s for value \
                              partitioning; ignoring" name;
@@ -123,11 +124,15 @@ struct
   let flow_actions stmt =
     let map_annot acc t =
       try
-        let monitor = Partition.new_monitor ~split_limit in
         let action =
           match t with
-          | FlowSplit (t, kind) -> Partition.Split (t, kind, monitor)
-          | FlowMerge t -> Partition.Merge t
+          | FlowSplit (term, kind) ->
+            let split_monitor =
+              Partition.new_monitor ~limit:split_limit ~kind ~term
+            in
+            Partition.Split split_monitor
+          | FlowMerge t ->
+            Partition.Merge t
         in
         action :: acc
       with
diff --git a/src/plugins/eva/partitioning/partitioning_parameters.mli b/src/plugins/eva/partitioning/partitioning_parameters.mli
index e3243989addf804db8d30ca815e0323a74db61a1..b0599fb384881e56b6a4907df52dc1e80839cb71 100644
--- a/src/plugins/eva/partitioning/partitioning_parameters.mli
+++ b/src/plugins/eva/partitioning/partitioning_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/per_stmt_slevel.ml b/src/plugins/eva/partitioning/per_stmt_slevel.ml
index 0ba36de8ddf80183b108383be9d99adbf8836c36..e67ace503cd687930234d1d23d40b2cf43d6a260 100644
--- a/src/plugins/eva/partitioning/per_stmt_slevel.ml
+++ b/src/plugins/eva/partitioning/per_stmt_slevel.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/per_stmt_slevel.mli b/src/plugins/eva/partitioning/per_stmt_slevel.mli
index 65fd7a53262a7db947866d63a925727e91abc3ca..fe08dfd569db4ce768d98a9a46b6c2b894c84692 100644
--- a/src/plugins/eva/partitioning/per_stmt_slevel.mli
+++ b/src/plugins/eva/partitioning/per_stmt_slevel.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/split_return.ml b/src/plugins/eva/partitioning/split_return.ml
index 76cb38b5d02cb981e9390a0c3a33e4b2532cc215..3a8aea843ad3788a2537571d959364f01a92e359 100644
--- a/src/plugins/eva/partitioning/split_return.ml
+++ b/src/plugins/eva/partitioning/split_return.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/split_return.mli b/src/plugins/eva/partitioning/split_return.mli
index be6d6ee1b185fa717a7cf7f84e38621873a1c394..fd6a280d0f44646e11c49658f79bbd2fef7341f3 100644
--- a/src/plugins/eva/partitioning/split_return.mli
+++ b/src/plugins/eva/partitioning/split_return.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/split_strategy.ml b/src/plugins/eva/partitioning/split_strategy.ml
index 3d9e8f50a189a78d5bda51941dbca3671281e788..8a3600e85a21603a65316e150cf0dea8a0882a60 100644
--- a/src/plugins/eva/partitioning/split_strategy.ml
+++ b/src/plugins/eva/partitioning/split_strategy.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/split_strategy.mli b/src/plugins/eva/partitioning/split_strategy.mli
index 0dba58ed58846abc230f3cc132025f3c73058f51..4eb4f7d72cc99c4c0d45ac8cb15baf20277112a3 100644
--- a/src/plugins/eva/partitioning/split_strategy.mli
+++ b/src/plugins/eva/partitioning/split_strategy.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/partitioning/trace_partitioning.ml b/src/plugins/eva/partitioning/trace_partitioning.ml
index ae449dc72983922a90d7215ed43e9f298d7935db..c9930c43e30d8675612d01ab5481c948ccf98c9e 100644
--- a/src/plugins/eva/partitioning/trace_partitioning.ml
+++ b/src/plugins/eva/partitioning/trace_partitioning.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -173,7 +173,7 @@ struct
 
   let empty_rationing = new_rationing ~limit:0 ~merge:false
 
-  let split_return (flow : flow) (return_exp : exp option) : flow =
+  let split_return (flow : flow) (return_exp : Eva_ast.exp option) : flow =
     let strategy = Split_return.kf_strategy kf in
     if strategy = Split_strategy.FullSplit
     then flow
@@ -189,7 +189,7 @@ struct
         match return_exp with
         | None -> apply (Ration empty_rationing)
         | Some return_exp ->
-          if Cil.isIntegralOrPointerType (Cil.typeOf return_exp)
+          if Cil.isIntegralOrPointerType return_exp.typ
           then apply (Restrict (return_exp, i))
           else apply (Ration empty_rationing)
 
diff --git a/src/plugins/eva/partitioning/trace_partitioning.mli b/src/plugins/eva/partitioning/trace_partitioning.mli
index df482f9df70eb16c7a743a53f0b6178327079dc0..e4683b370c31d27b066797647a87e7776c4eaf73 100644
--- a/src/plugins/eva/partitioning/trace_partitioning.mli
+++ b/src/plugins/eva/partitioning/trace_partitioning.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -85,7 +85,7 @@ sig
   val enter_loop : flow -> Cil_types.stmt -> flow
   val leave_loop : flow -> Cil_types.stmt -> flow
   val next_loop_iteration : flow -> Cil_types.stmt -> flow
-  val split_return : flow -> Cil_types.exp option -> flow
+  val split_return : flow -> Eva_ast.exp option -> flow
 
   (** After the analysis of a function call, recombines callee partitioning keys
       with the caller key. *)
diff --git a/src/plugins/eva/self.ml b/src/plugins/eva/self.ml
index d1c33a8a5ee375b35ac4c016138ba4181b58cfd3..d2e1e284de6f5f393a52c919d1d676c6505ccf50 100644
--- a/src/plugins/eva/self.ml
+++ b/src/plugins/eva/self.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/self.mli b/src/plugins/eva/self.mli
index c5d22caedb189e077fdff74d9d18bd70de0b950f..ab724f59bbc5455c7754f76d9a694b2ec39e4304 100644
--- a/src/plugins/eva/self.mli
+++ b/src/plugins/eva/self.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/test.assert.sh b/src/plugins/eva/test.assert.sh
index 867197fc66200a39d998ba17b9a74c9c90dce066..de5f3adba6c7eee60d4ef1ddb208c20eb41c0be1 100755
--- a/src/plugins/eva/test.assert.sh
+++ b/src/plugins/eva/test.assert.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/eva/test.sh b/src/plugins/eva/test.sh
index 16f254bee2d601626887f5c6f68e865754785f4f..32aaf4ab7672079e80b89a503fca2d7e76467f18 100755
--- a/src/plugins/eva/test.sh
+++ b/src/plugins/eva/test.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/eva/types/assigns.ml b/src/plugins/eva/types/assigns.ml
index cc34f73bdee90be68d279d7b10c517fd0554ab81..6581b3f56efe97eaf0fd410de50c1cc0ced1e268 100644
--- a/src/plugins/eva/types/assigns.ml
+++ b/src/plugins/eva/types/assigns.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/types/assigns.mli b/src/plugins/eva/types/assigns.mli
index 2875fbf0dc3a54e01e7feab400950478fa4f82bb..415f37d5baf58ca286a8dcc669dfc27e6aaeaec3 100644
--- a/src/plugins/eva/types/assigns.mli
+++ b/src/plugins/eva/types/assigns.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/types/callstack.ml b/src/plugins/eva/types/callstack.ml
index 5a081927108f0d0d824542f42644adc21b8d2f22..fec3d18684256394e847727bf854d578c0f3e644 100644
--- a/src/plugins/eva/types/callstack.ml
+++ b/src/plugins/eva/types/callstack.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/types/callstack.mli b/src/plugins/eva/types/callstack.mli
index f63751e19d9ecf65bea5d2f19db6ee7474200be2..0340490e58ec65c80c72e53357be16657c40c4aa 100644
--- a/src/plugins/eva/types/callstack.mli
+++ b/src/plugins/eva/types/callstack.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/types/deps.ml b/src/plugins/eva/types/deps.ml
index 2f6bad3f7a3fd2b6929de54743354bf3c206498f..9ac287585199f8a752f7c210da8d399e0f9872a5 100644
--- a/src/plugins/eva/types/deps.ml
+++ b/src/plugins/eva/types/deps.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/types/deps.mli b/src/plugins/eva/types/deps.mli
index a30399e8e540450f5be762e719d3ffd86db01176..4dbd0ea993573958ea96cd8277a2472b4b82f3c9 100644
--- a/src/plugins/eva/types/deps.mli
+++ b/src/plugins/eva/types/deps.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/abstract.ml b/src/plugins/eva/utils/abstract.ml
index 1ef84e43b66b2516ada82693c6488252cb76a5d8..2db761536bf7bc22383fdd4d95c12220cedaf84c 100644
--- a/src/plugins/eva/utils/abstract.ml
+++ b/src/plugins/eva/utils/abstract.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,6 +20,28 @@
 (*                                                                        *)
 (**************************************************************************)
 
+module Context = struct
+
+  type 'a context = (module Abstract_context.S with type t = 'a)
+  module C = struct type 'a t = 'a context end
+  include Structure.Shape (Structure.Key_Context) (C)
+
+  module type Internal = sig
+    include Abstract_context.S
+    val structure : t structure
+  end
+
+  module type External = sig
+    include Internal
+    include Structure.External
+      with type t := t
+       and type 'a key := 'a key
+       and type 'a data := 'a data
+  end
+
+end
+
+
 module Value = struct
 
   module V = struct
diff --git a/src/plugins/eva/utils/abstract.mli b/src/plugins/eva/utils/abstract.mli
index 399aac89323e8e0d894e720a5c4d5ee4e9cc6329..6ced511c6f1121f03803f40e03c476e33c541d67 100644
--- a/src/plugins/eva/utils/abstract.mli
+++ b/src/plugins/eva/utils/abstract.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -33,6 +33,26 @@
     Note that their behavior is undefined if an abstraction contains
     several times the same leaf module. *)
 
+(** Key and structure for abstract contexts.
+    See {!Structure} for more details. *)
+module Context : sig
+  include Structure.Shape
+    with type 'a key = 'a Structure.Key_Context.key
+     and type 'a data = (module Abstract_context.S with type t = 'a)
+
+  module type Internal = sig
+    include Abstract_context.S
+    val structure: t structure
+  end
+
+  module type External = sig
+    include Internal
+    include Structure.External with type t := t
+                                and type 'a key := 'a key
+                                and type 'a data := 'a data
+  end
+end
+
 (** Key and structure for abstract values.
     See {!Structure} for more details. *)
 module Value : sig
diff --git a/src/plugins/eva/utils/active_behaviors.ml b/src/plugins/eva/utils/active_behaviors.ml
index d0a188a78ef1d290d44c5f6c0ae045c7d1d8b1de..ef692f10fec6a95fdec9d84741053e852fc6da52 100644
--- a/src/plugins/eva/utils/active_behaviors.ml
+++ b/src/plugins/eva/utils/active_behaviors.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/active_behaviors.mli b/src/plugins/eva/utils/active_behaviors.mli
index 8ac3515b0446c42b506d3b0d94fb8c58378f38f5..c590378ad57e0587a5f19a6ce0431f9b7d165a70 100644
--- a/src/plugins/eva/utils/active_behaviors.mli
+++ b/src/plugins/eva/utils/active_behaviors.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/backward_formals.ml b/src/plugins/eva/utils/backward_formals.ml
index 9d916598299fa4a77ec64fbd0f7ba748e8a90c50..a17b6c10a839faee03ecaefe3aba8f82e61b3468 100644
--- a/src/plugins/eva/utils/backward_formals.ml
+++ b/src/plugins/eva/utils/backward_formals.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -22,31 +22,21 @@
 
 open Cil_types
 
-exception Unsafe
 
-(* This visitor checks that an expression is guaranteed to evaluate in
+(* This function checks that an expression is guaranteed to evaluate in
    the same way before and after a call. We restrict ourselves to
    lvalues that are unreferenced locals or formals, because they cannot
    be changed by the callee. *)
-let safe_argument_visitor = object(self)
-  inherit Visitor.frama_c_inplace
-
-  method! vlval = function
+let safe_argument expr =
+  let is_safe_lval ~visitor:_ (lval : Eva_ast.lval) =
+    match lval.node with
     | Var vi, NoOffset ->
-      if vi.vaddrof || Cil.typeHasQualifier "volatile" vi.vtype || vi.vglob
-      then raise Unsafe;
-      Cil.DoChildren
-    | _, _ -> raise Unsafe
-
-  method inspect expr =
-    try
-      ignore (Visitor.visitFramacExpr (self:>Visitor.frama_c_inplace) expr);
-      true
-    with Unsafe -> false
-end
-
-let safe_argument = safe_argument_visitor#inspect
-
+      not (vi.vaddrof || Cil.typeHasQualifier "volatile" vi.vtype || vi.vglob)
+    | _, _ -> false
+  in
+  let open Eva_ast_visitor.Fold in
+  let folder = { default with fold_lval = is_safe_lval } in
+  visit_exp ~neutral:true ~combine:(&&) folder expr
 
 let written_formals kf =
   let module S = Cil_datatype.Varinfo.Set in
diff --git a/src/plugins/eva/utils/backward_formals.mli b/src/plugins/eva/utils/backward_formals.mli
index 9aac889c7b2cf0630f313a27711ff5f56d3fb0d2..4f419e671e1f4d441722b6c54a4161db56fe1032 100644
--- a/src/plugins/eva/utils/backward_formals.mli
+++ b/src/plugins/eva/utils/backward_formals.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -30,7 +30,7 @@ val written_formals: Cil_types.kernel_function -> Cil_datatype.Varinfo.Set.t
     which may be internally overwritten by [kf] during its call. *)
 
 
-val safe_argument: Cil_types.exp -> bool
+val safe_argument: Eva_ast.exp -> bool
 (** [safe_argument e] returns [true] if [e] (which is supposed to be
     an actual parameter) is guaranteed to evaluate in the same way before and
     after the call. *)
diff --git a/src/plugins/eva/utils/cvalue_callbacks.ml b/src/plugins/eva/utils/cvalue_callbacks.ml
index 99461fbbeb8ba04c86f57163a4a90380d8f25a1b..e8f7e5f9c7b949e388b33ba1a1c76fb8f6eddb1c 100644
--- a/src/plugins/eva/utils/cvalue_callbacks.ml
+++ b/src/plugins/eva/utils/cvalue_callbacks.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/cvalue_callbacks.mli b/src/plugins/eva/utils/cvalue_callbacks.mli
index 203dddeced30b3c8eb3a0604026075e42ca8837d..8a9553df3346113f41a14de86e1a17ffc889351e 100644
--- a/src/plugins/eva/utils/cvalue_callbacks.mli
+++ b/src/plugins/eva/utils/cvalue_callbacks.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_annotations.ml b/src/plugins/eva/utils/eva_annotations.ml
index ceb834c1e9717ff4856a626a1d1c90ff6d6bb8ce..91f28919b04a085bd7ace65aef587e3b7708fb92 100644
--- a/src/plugins/eva/utils/eva_annotations.ml
+++ b/src/plugins/eva/utils/eva_annotations.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_annotations.mli b/src/plugins/eva/utils/eva_annotations.mli
index 556d4d58168584b18fc7a596a30117d16f0d139d..a56ce470ae9125b8bf154b00c7db743e1dfe60c7 100644
--- a/src/plugins/eva/utils/eva_annotations.mli
+++ b/src/plugins/eva/utils/eva_annotations.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -46,6 +46,7 @@ type unroll_annotation =
 
 type split_kind = Static | Dynamic
 
+(** Splits can be performed according to a C expression or an ACSL predicate. *)
 type split_term =
   | Expression of Cil_types.exp
   | Predicate of Cil_types.predicate
diff --git a/src/plugins/eva/utils/eva_audit.ml b/src/plugins/eva/utils/eva_audit.ml
index 4cace237ac77141f7f4bc7cb74ed7b6e00ba1b43..586178ff8eb44b2d85e30daabe0ef4d40048f946 100644
--- a/src/plugins/eva/utils/eva_audit.ml
+++ b/src/plugins/eva/utils/eva_audit.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_audit.mli b/src/plugins/eva/utils/eva_audit.mli
index 78bda6fe1644a3295e318a6047c26415bdb7756c..6b80b2a8a9b8c95d25bb811c3a7518487db42cfd 100644
--- a/src/plugins/eva/utils/eva_audit.mli
+++ b/src/plugins/eva/utils/eva_audit.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_dynamic.ml b/src/plugins/eva/utils/eva_dynamic.ml
index 967967525c6d1287b6147e63b4657190b6b82e62..5308cd158fcbcefb66164601d2a2cb3f6e85e301 100644
--- a/src/plugins/eva/utils/eva_dynamic.ml
+++ b/src/plugins/eva/utils/eva_dynamic.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_dynamic.mli b/src/plugins/eva/utils/eva_dynamic.mli
index d02e1bd992261f7c55b42d5f7b91eb48d7fb711b..993b7f863f548ace9df097c18e55e6c8f6f0e907 100644
--- a/src/plugins/eva/utils/eva_dynamic.mli
+++ b/src/plugins/eva/utils/eva_dynamic.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_perf.ml b/src/plugins/eva/utils/eva_perf.ml
index 4c0ae010c6ff1309e2e1fd7e93d48f702691b2bf..efb4a27305ab0ab8bd4c7af35ec92b903fb956a9 100644
--- a/src/plugins/eva/utils/eva_perf.ml
+++ b/src/plugins/eva/utils/eva_perf.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_perf.mli b/src/plugins/eva/utils/eva_perf.mli
index cb4a2af9a1eb768e56c5e454594206e1ef4b0fdf..77bfd55f02a30fc6758f6f7ed3a180ecaf8cde43 100644
--- a/src/plugins/eva/utils/eva_perf.mli
+++ b/src/plugins/eva/utils/eva_perf.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_results.ml b/src/plugins/eva/utils/eva_results.ml
index a36640fe33adda23fdf861e02d1bd4d36b8b948e..41f787cd032d7a4b146e2b844b6f6c92f9b5d31b 100644
--- a/src/plugins/eva/utils/eva_results.ml
+++ b/src/plugins/eva/utils/eva_results.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_results.mli b/src/plugins/eva/utils/eva_results.mli
index 38ace066ca04458f1610d340cf11c2dd4ed754f7..806a8844bc6c594845cd9d9cbc874e1036ad7b6e 100644
--- a/src/plugins/eva/utils/eva_results.mli
+++ b/src/plugins/eva/utils/eva_results.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/eva_utils.ml b/src/plugins/eva/utils/eva_utils.ml
index 9c7f2b5d521dfcb74236fa6fc235f03ce0f7d190..ad3e6bec741090f1008cdba2e354223c45ab380a 100644
--- a/src/plugins/eva/utils/eva_utils.ml
+++ b/src/plugins/eva/utils/eva_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -100,7 +100,7 @@ let get_subdivision stmt =
     x
 
 let pretty_actuals fmt actuals =
-  let pp fmt (e,x) = Cvalue.V.pretty_typ (Some (Cil.typeOf e)) fmt x in
+  let pp fmt (e,x) = Cvalue.V.pretty_typ (Some (e.Eva_ast.typ)) fmt x in
   Pretty_utils.pp_flowlist pp fmt actuals
 
 let pretty_current_cfunction_name fmt =
@@ -178,17 +178,6 @@ let postconditions_mention_result spec =
     false
   with Exit -> true
 
-let conv_comp op =
-  let module C = Abstract_interp.Comp in
-  match op with
-  | Eq -> C.Eq
-  | Ne -> C.Ne
-  | Le -> C.Le
-  | Lt -> C.Lt
-  | Ge -> C.Ge
-  | Gt -> C.Gt
-  | _ -> assert false
-
 let conv_relation rel =
   let module C = Abstract_interp.Comp in
   match rel with
@@ -199,72 +188,9 @@ let conv_relation rel =
   | Rge -> C.Ge
   | Rgt -> C.Gt
 
-let loc_dummy_value =
-  let l = { Cil_datatype.Position.unknown with
-            Filepath.pos_path = Datatype.Filepath.of_string "_value_" }
-  in
-  l, l
-
-let zero e =
-  let loc = loc_dummy_value in
-  let typ = Cil.unrollType (Cil.typeOf e) in
-  match typ with
-  | TFloat (fk, _) -> Cil.new_exp ~loc (Const (CReal (0., fk, None)))
-  | TEnum ({ekind = ik },_)
-  | TInt (ik, _) -> Cil.new_exp ~loc (Const (CInt64 (Integer.zero, ik, None)))
-  | TPtr _ ->
-    let ik = Cil.(theMachine.upointKind) in
-    let zero = Cil.new_exp ~loc (Const (CInt64 (Integer.zero, ik, None))) in
-    Cil.mkCast ~force:true ~newt:typ zero
-  | typ -> Self.fatal ~current:true "non-scalar type %a"
-             Printer.pp_typ typ
-
-let eq_with_zero positive e =
-  let op = if positive then Eq else Ne in
-  let loc = Cil_datatype.Location.unknown in
-  Cil.new_exp ~loc (BinOp (op, zero e, e, Cil.intType))
-
-let is_value_zero e =
-  e.eloc == loc_dummy_value
-
-let inv_rel = function
-  | Gt -> Le
-  | Lt -> Ge
-  | Le -> Gt
-  | Ge -> Lt
-  | Eq -> Ne
-  | Ne -> Eq
-  | _ -> assert false
-
-(* Transform an expression supposed to be [positive] into an equivalent
-   one in which the root expression is a comparison operator. *)
-let rec normalize_as_cond expr positive =
-  match expr.enode with
-  | UnOp (LNot, e, _) -> normalize_as_cond e (not positive)
-  | BinOp ((Le|Ne|Eq|Gt|Lt|Ge as binop), e1, e2, typ) ->
-    if positive then
-      expr
-    else
-      let binop = inv_rel binop in
-      let enode = BinOp (binop, e1, e2, typ) in
-      Cil.new_exp ~loc:expr.eloc enode
-  | _ ->
-    eq_with_zero (not positive) expr
-
 module PairExpBool =
   Datatype.Pair_with_collections(Cil_datatype.Exp)(Datatype.Bool)
     (struct let module_name = "Value.Eva_utils.PairExpBool" end)
-module MemoNormalizeAsCond =
-  State_builder.Hashtbl
-    (PairExpBool.Hashtbl)
-    (Cil_datatype.Exp)
-    (struct
-      let name = "Eva_utils.MemoNormalizeAsCond"
-      let size = 64
-      let dependencies = [ Ast.self ]
-    end)
-let normalize_as_cond e pos =
-  MemoNormalizeAsCond.memo (fun (e, pos) -> normalize_as_cond e pos) (e, pos)
 
 module MemoLvalToExp =
   Cil_state_builder.Lval_hashtbl
@@ -279,59 +205,6 @@ let lval_to_exp =
   MemoLvalToExp.memo
     (fun lv -> Cil.new_exp ~loc:Cil_datatype.Location.unknown (Lval lv))
 
-(* Computation of the inputs of an expression. *)
-let rec deps_of_expr find_loc expr =
-  let rec process expr = match expr.enode with
-    | Lval lval ->
-      (* Dereference of an lvalue. *)
-      deps_of_lval find_loc lval
-    | UnOp (_, e, _) | CastE (_, e) ->
-      (* Unary operators. *)
-      process e
-    | BinOp (_, e1, e2, _) ->
-      (* Binary operators. *)
-      Deps.join (process e1) (process e2)
-    | StartOf lv | AddrOf lv ->
-      (* computation of an address: the inputs of the lvalue whose address
-         is computed are read to compute said address. *)
-      { data = indirect_zone_of_lval find_loc lv;
-        indirect = Locations.Zone.bottom; }
-    | Const _ | SizeOf _ | AlignOf _ | SizeOfStr _ | SizeOfE _ | AlignOfE _ ->
-      (* static constructs, nothing is read to evaluate them. *)
-      Deps.bottom
-  in
-  process expr
-
-and zone_of_expr find_loc expr = Deps.to_zone (deps_of_expr find_loc expr)
-
-(* dereference of an lvalue: first, its address must be computed,
-   then its contents themselves are read *)
-and deps_of_lval find_loc lval =
-  let ploc = find_loc lval in
-  let zone = Precise_locs.enumerate_valid_bits Read ploc in
-  { data = zone;
-    indirect = indirect_zone_of_lval find_loc lval; }
-
-(* Computations of the inputs of a lvalue : union of the "host" part and
-   the offset. *)
-and indirect_zone_of_lval find_loc (lhost, offset) =
-  Locations.Zone.join
-    (zone_of_lhost find_loc lhost) (zone_of_offset find_loc offset)
-
-(* Computation of the inputs of a host. Nothing for a variable, and the
-   inputs of [e] for a dereference [*e]. *)
-and zone_of_lhost find_loc = function
-  | Var _ -> Locations.Zone.bottom
-  | Mem e -> zone_of_expr find_loc e
-
-(* Computation of the inputs of an offset. *)
-and zone_of_offset find_loc = function
-  | NoOffset -> Locations.Zone.bottom
-  | Field (_, o) -> zone_of_offset find_loc o
-  | Index (e, o) ->
-    Locations.Zone.join
-      (zone_of_expr find_loc e) (zone_of_offset find_loc o)
-
 let rec height_expr expr =
   match expr.enode with
   | Const _ | SizeOf _ | SizeOfStr _ | AlignOf _ -> 0
diff --git a/src/plugins/eva/utils/eva_utils.mli b/src/plugins/eva/utils/eva_utils.mli
index 2e6380b1ba6aebca694803c7112c684743c46389..84e2b95149884ae70190bfe0eaa9bbd93004ae49 100644
--- a/src/plugins/eva/utils/eva_utils.mli
+++ b/src/plugins/eva/utils/eva_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -61,7 +61,7 @@ val emitter : Emitter.t
 val get_slevel : Kernel_function.t -> Parameters.SlevelFunction.value
 val get_subdivision: stmt -> int
 val pretty_actuals :
-  Format.formatter -> (Cil_types.exp * Cvalue.V.t) list -> unit
+  Format.formatter -> (Eva_ast.exp * Cvalue.V.t) list -> unit
 val pretty_current_cfunction_name : Format.formatter -> unit
 val warning_once_current : ('a, Format.formatter, unit) format -> 'a
 
@@ -97,44 +97,11 @@ val find_return_var: kernel_function -> varinfo option
 val postconditions_mention_result: Cil_types.funspec -> bool
 (** Does the post-conditions of this specification mention [\result]? *)
 
-val conv_comp: binop -> Abstract_interp.Comp.t
 val conv_relation: relation -> Abstract_interp.Comp.t
 
-val normalize_as_cond: exp -> bool -> exp
-(** [normalize_as_cond e positive] returns the expression corresponding to
-    [e != 0] when [positive] is true, and [e == 0] otherwise. The
-    resulting expression will always have a comparison operation at its
-    root. *)
-
-val is_value_zero: exp -> bool
-(** Return [true] iff the argument has been created by {!normalize_as_cond} *)
-
 val lval_to_exp: lval -> exp
 (** This function is memoized to avoid creating too many expressions *)
 
-
-(** Dependences of expressions and lvalues. *)
-
-val zone_of_expr:
-  (lval -> Precise_locs.precise_location) -> exp -> Locations.Zone.t
-(** Given a function computing the location of lvalues, computes the memory zone
-    on which the value of an expression depends. *)
-
-val indirect_zone_of_lval:
-  (lval -> Precise_locs.precise_location) -> lval -> Locations.Zone.t
-(** Given a function computing the location of lvalues, computes the memory zone
-    on which the offset and the pointer expression (if any) of an lvalue depend.
-*)
-
-val deps_of_expr:
-  (lval -> Precise_locs.precise_location) -> exp -> Deps.t
-(** Given a function computing the location of lvalues, computes the memory
-    dependencies of an expression. *)
-
-val deps_of_lval: (lval -> Precise_locs.precise_location) -> lval -> Deps.t
-(** Given a function computing the location of lvalues, computes the memory
-    dependencies of an lvalue. *)
-
 (** Computes the height of an expression, that is the maximum number of nested
     operations in this expression. *)
 val height_expr: exp -> int
diff --git a/src/plugins/eva/utils/eval_typ.ml b/src/plugins/eva/utils/eval_typ.ml
index 554666fb3418023e6642c574d970ee937ce79232..9b2cc6ad98f71eb78cadd6ccde53e6c7c72ea74b 100644
--- a/src/plugins/eva/utils/eval_typ.ml
+++ b/src/plugins/eva/utils/eval_typ.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -114,7 +114,7 @@ let refine_fun_ptr typ args =
   match Cil.unrollType typ, args with
   | TFun (_, Some _, _, _), _ | _, None -> typ
   | TFun (ret, None, var, attrs), Some l ->
-    let ltyps = List.map (fun arg -> "", Cil.typeOf arg, []) l in
+    let ltyps = List.map (fun arg -> "", arg, []) l in
     TFun (ret, Some ltyps, var, attrs)
   | _ -> assert false
 
@@ -133,38 +133,6 @@ let compatible_functions typ_pointer ?args kfs =
   in
   List.fold_left check_pointer ([], false) kfs
 
-
-(* Does the expr contains a lval having a volatile part ? *)
-let rec expr_contains_volatile expr =
-  let rec aux expr = match expr.enode with
-    | Lval lval -> lval_contains_volatile lval
-    | UnOp (_, e, _) | CastE (_, e) -> aux e
-    | AddrOf lv | StartOf lv -> lval_contains_volatile lv
-    | BinOp (_, e1, e2, _) -> aux e1 || aux e2
-    | _ -> false
-  in
-  aux expr
-
-(* Does the lval (or sub expr) has a volatile part ? *)
-and lval_contains_volatile lval =
-  Cil.isVolatileLval lval ||
-  expr_in_lval_contains_volatile lval
-
-and expr_in_lval_contains_volatile (lhost, offset) =
-  expr_in_host_contains_volatile lhost ||
-  expr_in_offset_contains_volatile offset
-
-and expr_in_host_contains_volatile = function
-  | Var _ -> false
-  | Mem e ->
-    expr_contains_volatile e
-
-and expr_in_offset_contains_volatile = function
-  | NoOffset -> false
-  | Field (_, o) -> expr_in_offset_contains_volatile o
-  | Index (e, o) ->
-    expr_in_offset_contains_volatile o || expr_contains_volatile e
-
 (* Scalar types *)
 
 type integer_range = { i_bits: int; i_signed: bool }
diff --git a/src/plugins/eva/utils/eval_typ.mli b/src/plugins/eva/utils/eval_typ.mli
index 18e94b718afae26e34319dc1f7c757d3d8f943e6..f00f1829f7e46a12296646253c0268611ce9f638 100644
--- a/src/plugins/eva/utils/eval_typ.mli
+++ b/src/plugins/eva/utils/eval_typ.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -54,16 +54,9 @@ val need_cast: typ -> typ -> bool
    ignore more or less safely the incompatibility in the types (which is however
    reported in the returned boolean). *)
 val compatible_functions:
-  typ -> ?args:exp list -> Kernel_function.t list ->
+  typ -> ?args:typ list -> Kernel_function.t list ->
   Kernel_function.t list * bool
 
-val expr_contains_volatile: exp -> bool
-val lval_contains_volatile: lval -> bool
-(** Those two expressions indicate that one l-value contained inside
-    the arguments (and the l-value itself for [lval_contains_volatile]) has
-    volatile qualifier. Relational analyses should not learn anything on
-    such values. *)
-
 (** Abstraction of an integer type, more convenient than an [ikind] because
     it can also be used for bitfields. *)
 type integer_range = { i_bits: int; i_signed: bool }
diff --git a/src/plugins/eva/utils/library_functions.ml b/src/plugins/eva/utils/library_functions.ml
index 171ef8bff7ca8807ecf7d6367e16261a69bc92b5..98e63c0048c6b3d44cd9a27b05cb493f0a323194 100644
--- a/src/plugins/eva/utils/library_functions.ml
+++ b/src/plugins/eva/utils/library_functions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -90,6 +90,10 @@ let unsupported_specifications =
     "strerror", "string.c";
     "strndup", "string.c";
     "unsetenv", "stdlib.c";
+    "vasprintf", "stdio.c";
+    "vfscanf", "stdio.c";
+    "vscanf", "stdio.c";
+    "wcsdup", "wchar.c";
   ]
 
 let unsupported_specs_tbl =
diff --git a/src/plugins/eva/utils/library_functions.mli b/src/plugins/eva/utils/library_functions.mli
index 58fcc8ddc9b4484d71e229f9fec59b86c0d2522e..51b3bb14c432420f0d7d1fe521dbe25c69471bde 100644
--- a/src/plugins/eva/utils/library_functions.mli
+++ b/src/plugins/eva/utils/library_functions.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/private.ml b/src/plugins/eva/utils/private.ml
index 2a103740752b240773be661b721e6142729470cc..48470709471ff1c8f571e597d884c2629e6dbca9 100644
--- a/src/plugins/eva/utils/private.ml
+++ b/src/plugins/eva/utils/private.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -21,6 +21,7 @@
 (**************************************************************************)
 
 module Abstract_domain = Abstract_domain
+module Abstract_context = Abstract_context
 module Abstract_value = Abstract_value
 module Abstract_location = Abstract_location
 module Abstract = Abstract
@@ -30,6 +31,7 @@ module Alarmset = Alarmset
 module Analysis = Analysis
 module Assigns = Assigns
 module Callstack = Callstack
+module Unit_context = Unit_context
 module Cvalue_domain = Cvalue_domain
 module Cvalue_results = Cvalue_results
 module Domain_builder = Domain_builder
@@ -41,6 +43,7 @@ module Eval_annots = Eval_annots
 module Eval_op = Eval_op
 module Eval_terms = Eval_terms
 module Eval_typ = Eval_typ
+module Eva_ast = Eva_ast
 module Function_calls = Function_calls
 module Logic_inout = Logic_inout
 module Main_locations = Main_locations
diff --git a/src/plugins/eva/utils/private.mli b/src/plugins/eva/utils/private.mli
index eb7491b3c9617d5c9f9e8029b9d5106d13bf2f5c..2db3103b84536ccfdebcac32e95de06582d23bbf 100644
--- a/src/plugins/eva/utils/private.mli
+++ b/src/plugins/eva/utils/private.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -25,6 +25,7 @@
     to the internal modules of Eva they need. *)
 
 module Abstract_domain = Abstract_domain
+module Abstract_context = Abstract_context
 module Abstract_value = Abstract_value
 module Abstract_location = Abstract_location
 module Abstract = Abstract
@@ -34,6 +35,7 @@ module Alarmset = Alarmset
 module Analysis = Analysis
 module Assigns = Assigns
 module Callstack = Callstack
+module Unit_context = Unit_context
 module Cvalue_domain = Cvalue_domain
 module Cvalue_results = Cvalue_results
 module Domain_builder = Domain_builder
@@ -45,6 +47,7 @@ module Eval_annots = Eval_annots
 module Eval_op = Eval_op
 module Eval_terms = Eval_terms
 module Eval_typ = Eval_typ
+module Eva_ast = Eva_ast
 module Function_calls = Function_calls
 module Logic_inout = Logic_inout
 module Main_locations = Main_locations
diff --git a/src/plugins/eva/utils/red_statuses.ml b/src/plugins/eva/utils/red_statuses.ml
index af80f2255c20882ec87a421a26b08ac8a7ddebc2..05f4efb03c8b26180907bdf7b33d216b1610d004 100644
--- a/src/plugins/eva/utils/red_statuses.ml
+++ b/src/plugins/eva/utils/red_statuses.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/red_statuses.mli b/src/plugins/eva/utils/red_statuses.mli
index 12ad7c0588ce8a549193d153bb8f8f5e8d17d807..44723e22be5219adabd4421fe8f02049135a45cd 100644
--- a/src/plugins/eva/utils/red_statuses.mli
+++ b/src/plugins/eva/utils/red_statuses.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/results.ml b/src/plugins/eva/utils/results.ml
index 0df27562e45c83d92c131f8e32b81caa27d8889e..15e4eae116d2b22674a2c883a2c3487190cf1b13 100644
--- a/src/plugins/eva/utils/results.ml
+++ b/src/plugins/eva/utils/results.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -212,7 +212,7 @@ struct
     type valuation = A.Eval.Valuation.t
     type exp = (valuation * A.Val.t) Eval.evaluated
     type lval = (valuation * A.Val.t Eval.flagged_value) Eval.evaluated
-    type loc = (valuation * A.Loc.location * Cil_types.typ) Eval.evaluated
+    type loc = (valuation * A.Loc.location) Eval.evaluated
   end
 
   type ('a,'c) evaluation =
@@ -292,7 +292,7 @@ struct
     | None ->
       Result.error DisabledDomain
     | Some extract ->
-      let hce = Hcexprs.HCE.of_exp exp in
+      let hce = Hcexprs.HCE.of_exp (Eva_ast.translate_exp exp) in
       let extract' state =
         let equalities = Equality_domain.project (extract state) in
         try NonTrivial (Set.find hce equalities)
@@ -306,8 +306,9 @@ struct
         | (`Top | `Bottom) as r -> r
         | `Value Trivial -> `Top
         | `Value (NonTrivial e) ->
-          let l = Equality.elements e in
-          `Value (List.map Hcexprs.HCE.to_exp l)
+          let list = Equality.elements e in
+          let to_cil hce = Hcexprs.HCE.to_exp hce |> Eva_ast.to_cil_exp in
+          `Value (List.map to_cil list)
       in
       convert r
 
@@ -423,7 +424,7 @@ struct
     | Address (r, access) ->
       let extract (x, _alarms) =
         let open Bottom.Operators in
-        let+ _valuation,loc,_typ = x in loc
+        let+ _valuation,loc = x in loc
       in
       Response.map extract r, access
 
@@ -576,13 +577,17 @@ let build_eval_lval_and_exp () =
   let eval_exp exp req = build @@ M.eval_exp exp req in
   eval_lval, eval_exp
 
-let eval_lval lval req = Value ((fst @@ build_eval_lval_and_exp ()) lval req)
+let eval_lval lval req =
+  let lval = Eva_ast.translate_lval lval in
+  Value ((fst @@ build_eval_lval_and_exp ()) lval req)
 
 let eval_var vi req = eval_lval (Cil.var vi) req
 
-let eval_exp exp req = Value ((snd @@ build_eval_lval_and_exp ()) exp req)
+let eval_exp exp req =
+  let exp = Eva_ast.translate_exp exp in
+  Value ((snd @@ build_eval_lval_and_exp ()) exp req)
 
-let eval_address ?(for_writing=false) lval req =
+let eval_address' ?(for_writing=false) lval req =
   let module M = Make () in
   let v = M.eval_address ~for_writing lval req in
   Address
@@ -591,6 +596,10 @@ let eval_address ?(for_writing=false) lval req =
       let v = v
     end : Lvaluation)
 
+let eval_address ?(for_writing=false) lval req =
+  let lval = Eva_ast.translate_lval lval in
+  eval_address' ~for_writing lval req
+
 let eval_callee exp req =
   (* Check the validity of exp *)
   begin match exp with
@@ -599,6 +608,7 @@ let eval_callee exp req =
       invalid_arg "The callee must be an lvalue with no offset"
   end;
   let module M = Make () in
+  let exp = Eva_ast.translate_exp exp in
   M.eval_callee exp req
 
 let callee stmt =
@@ -722,20 +732,20 @@ let alarms : type a. a evaluation -> Alarms.t list =
 (* Dependencies *)
 
 let expr_deps expr request =
-  let lval_to_loc lv = eval_address lv request |> as_precise_loc in
-  Eva_utils.zone_of_expr lval_to_loc expr
+  let lval_to_loc lv = eval_address' lv request |> as_precise_loc in
+  Eva_ast.zone_of_exp lval_to_loc (Eva_ast.translate_exp expr)
 
 let lval_deps lval request =
-  let lval_to_loc lv = eval_address lv request |> as_precise_loc in
-  Eva_utils.zone_of_expr lval_to_loc (Cil.dummy_exp (Lval lval))
+  let lval_to_loc lv = eval_address' lv request |> as_precise_loc in
+  Eva_ast.zone_of_lval lval_to_loc (Eva_ast.translate_lval lval)
 
 let address_deps lval request =
-  let lval_to_loc lv = eval_address lv request |> as_precise_loc in
-  Eva_utils.indirect_zone_of_lval lval_to_loc lval
+  let lval_to_loc lv = eval_address' lv request |> as_precise_loc in
+  Eva_ast.indirect_zone_of_lval lval_to_loc (Eva_ast.translate_lval lval)
 
 let expr_dependencies expr request =
-  let lval_to_loc lv = eval_address lv request |> as_precise_loc in
-  Eva_utils.deps_of_expr lval_to_loc expr
+  let lval_to_loc lv = eval_address' lv request |> as_precise_loc in
+  Eva_ast.deps_of_exp lval_to_loc (Eva_ast.translate_exp expr)
 
 (* Taint *)
 
diff --git a/src/plugins/eva/utils/results.mli b/src/plugins/eva/utils/results.mli
index c68373ebcb4157a8312dfefb59b6f0467863d320..60965a2fa111758342eec3dba15942a069433589 100644
--- a/src/plugins/eva/utils/results.mli
+++ b/src/plugins/eva/utils/results.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/statistics.ml b/src/plugins/eva/utils/statistics.ml
index 508a68db4ad07966275613466a6fd24c6ce5b10a..fee25e4b4952b6fd88092d93b2036f83b60fe40f 100644
--- a/src/plugins/eva/utils/statistics.ml
+++ b/src/plugins/eva/utils/statistics.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/statistics.mli b/src/plugins/eva/utils/statistics.mli
index ca402e73218f526d265cf2b19a624bc27910b93a..34dbabffab112467984242f4902894a386a3d7f2 100644
--- a/src/plugins/eva/utils/statistics.mli
+++ b/src/plugins/eva/utils/statistics.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/structure.ml b/src/plugins/eva/utils/structure.ml
index fc26b9d977c0cd7648718c837b23876be4fb805e..f04b8bebb148ead1868c1aa21c11a94c0ca0ebe4 100644
--- a/src/plugins/eva/utils/structure.ml
+++ b/src/plugins/eva/utils/structure.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -87,6 +87,7 @@ module Make () = struct
   let print fmt x = Format.pp_print_string fmt x.name
 end
 
+module Key_Context = Make ()
 module Key_Value = Make ()
 module Key_Location = Make ()
 module Key_Domain = Make ()
diff --git a/src/plugins/eva/utils/structure.mli b/src/plugins/eva/utils/structure.mli
index e235c87bf5e0f10f6b1549de2488355ad5e88fb8..ad2a55a7c37dabf150755b94b04d6a1731aafd92 100644
--- a/src/plugins/eva/utils/structure.mli
+++ b/src/plugins/eva/utils/structure.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -44,6 +44,9 @@ end
 
 module Make () : Key
 
+(** Keys module for the abstract contexts of Eva. *)
+module Key_Context : Key
+
 (** Keys module for the abstract values of Eva. *)
 module Key_Value : Key
 
diff --git a/src/plugins/eva/utils/summary.ml b/src/plugins/eva/utils/summary.ml
index 6982ec1bfeef2b3ad812871677fbe05e8d79fc86..db6f0b4e54438cf7271142465fba88c2c660673c 100644
--- a/src/plugins/eva/utils/summary.ml
+++ b/src/plugins/eva/utils/summary.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/summary.mli b/src/plugins/eva/utils/summary.mli
index e9c2b55f95d26a2df9e658371a65aa6eebb954c5..406c8a7ecbb0070447f89323e457bdb2285ce71d 100644
--- a/src/plugins/eva/utils/summary.mli
+++ b/src/plugins/eva/utils/summary.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/unit_tests.ml b/src/plugins/eva/utils/unit_tests.ml
index c6d1bd1b156e87c21a618959fb268e1ce3515833..aa6f0b876a26605114642df08e1499fbe9507472 100644
--- a/src/plugins/eva/utils/unit_tests.ml
+++ b/src/plugins/eva/utils/unit_tests.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -94,24 +94,26 @@ module Sign = struct
 
   let test_unop unop typ values =
     let test (cval, sign) =
-      let cval_res = Cval.forward_unop typ unop cval in
-      let sign_res = Sign.forward_unop typ unop sign in
+      let context = Abstract_value.{ from_domains = Unit_context.top } in
+      let cval_res = Cval.forward_unop context typ unop cval in
+      let sign_res = Sign.forward_unop context typ unop sign in
       let bug = not (Bottom.is_included is_included cval_res sign_res) in
       report bug "%a %a = %a  while  %a %a = %a"
-        Printer.pp_unop unop Cval.pretty cval (Bottom.pretty Cval.pretty) cval_res
-        Printer.pp_unop unop Sign.pretty sign (Bottom.pretty Sign.pretty) sign_res
+        Eva_ast.pp_unop unop Cval.pretty cval (Bottom.pretty Cval.pretty) cval_res
+        Eva_ast.pp_unop unop Sign.pretty sign (Bottom.pretty Sign.pretty) sign_res
     in
     List.iter test values
 
   let test_binop binop typ values =
     let test (cval1, sign1) (cval2, sign2) =
-      let cval_res = Cval.forward_binop typ binop cval1 cval2 in
-      let sign_res = Sign.forward_binop typ binop sign1 sign2 in
+      let context = Abstract_value.{ from_domains = Unit_context.top } in
+      let cval_res = Cval.forward_binop context typ binop cval1 cval2 in
+      let sign_res = Sign.forward_binop context typ binop sign1 sign2 in
       let bug = not (Bottom.is_included is_included cval_res sign_res) in
       report bug "%a %a %a = %a  while  %a %a %a = %a"
-        Cval.pretty cval1 Printer.pp_binop binop Cval.pretty cval2
+        Cval.pretty cval1 Eva_ast.pp_binop binop Cval.pretty cval2
         (Bottom.pretty Cval.pretty) cval_res
-        Sign.pretty sign1 Printer.pp_binop binop Sign.pretty sign2
+        Sign.pretty sign1 Eva_ast.pp_binop binop Sign.pretty sign2
         (Bottom.pretty Sign.pretty) sign_res
     in
     List.iter (fun x -> List.iter (test x) values) values
diff --git a/src/plugins/eva/utils/unit_tests.mli b/src/plugins/eva/utils/unit_tests.mli
index f90a8ef03fff3507eb28022576e2b056c0d1ffec..4c19672a5febcf7f200830dd489d71247b43752a 100644
--- a/src/plugins/eva/utils/unit_tests.mli
+++ b/src/plugins/eva/utils/unit_tests.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/widen.ml b/src/plugins/eva/utils/widen.ml
index f4caa9f5a6efd427cf6b2f9c33305a78ab0900e7..0bb8593600eec7ffec9734e71bb24d0909f76345 100644
--- a/src/plugins/eva/utils/widen.ml
+++ b/src/plugins/eva/utils/widen.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -437,7 +437,7 @@ module Parsed_Dynamic_Hints =
     end)
 
 let dynamic_bases_of_lval states e offset =
-  let lv = (Mem e, offset) in
+  let lv = Eva_ast.mk_lval (Mem e, offset) in
   List.fold_left (fun acc' state ->
       let location = Cvalue_queries.lval_to_loc state lv in
       Locations.Location_Bits.fold_bases
@@ -510,6 +510,8 @@ let dynamic_widen_hints_hook _callstack stmt states =
         List.fold_right (fun dhint (_acc_modified, acc_hints as acc) ->
             let old_bases = dhint.bases in
             let exp, offset = dhint.lv in
+            let exp = Eva_ast.translate_exp exp
+            and offset = Eva_ast.translate_offset offset in
             let bases = dynamic_bases_of_lval states exp offset in
             let new_bases = Base.Hptset.diff bases old_bases in
             if Base.Hptset.is_empty new_bases then
diff --git a/src/plugins/eva/utils/widen.mli b/src/plugins/eva/utils/widen.mli
index c54cb15e261c6a79823c7bb6460c4792c2a9a275..9730b32d3e8ac64568618b96358129b96c2fcd5f 100644
--- a/src/plugins/eva/utils/widen.mli
+++ b/src/plugins/eva/utils/widen.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/widen_hints_ext.ml b/src/plugins/eva/utils/widen_hints_ext.ml
index 31ceab2ccc3da945345b24be46be5651e6780655..d8f5cb75f0b2b5e9b1f386c237296015a9cdaff4 100644
--- a/src/plugins/eva/utils/widen_hints_ext.ml
+++ b/src/plugins/eva/utils/widen_hints_ext.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/utils/widen_hints_ext.mli b/src/plugins/eva/utils/widen_hints_ext.mli
index 18926e62edcd3b6e078eaab604eba066298bcaa7..05cd2015d521a9bd7be5fa53e5564adf15b94892 100644
--- a/src/plugins/eva/utils/widen_hints_ext.mli
+++ b/src/plugins/eva/utils/widen_hints_ext.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/values/abstract_location.ml b/src/plugins/eva/values/abstract_location.ml
index 96f75b0855b0a349b275184a43fdf895de104826..1651a016da1ea47755f510801bf4dcf2f5fdb72c 100644
--- a/src/plugins/eva/values/abstract_location.ml
+++ b/src/plugins/eva/values/abstract_location.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/values/abstract_value.ml b/src/plugins/eva/values/abstract_value.ml
index 353773dc05fd30888d102d17cd863907ef0b6384..3ebcd29e5a597852ab50f283d9ee0950d531be4b 100644
--- a/src/plugins/eva/values/abstract_value.ml
+++ b/src/plugins/eva/values/abstract_value.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -46,10 +46,23 @@ type bound = Int of Integer.t | Float of float * fkind
 
 type pointer_comparison = Equality | Relation | Subtraction
 
+(** Enriched context.
+    This record could easily be extended to contain more information about the
+    context in which an evaluation takes place, if the need arises. *)
+type 'a enriched = { from_domains : 'a }
+
 (** Signature of abstract numerical values. *)
 module type S = sig
   include Datatype.S
 
+  (** A numerical value abstraction can optionally require some context from
+      abstract domains. Most transfer functions take the context as argument;
+      it is provided by the abstract state in which operations are performed.
+      See {!Abstract_context} for more details about contexts.
+      For values that don't need context, this type can be defined as unit
+      and the context argument can be safely ignored. *)
+  type context
+
   val pretty_typ: typ option -> t Pretty_utils.formatter
   (** Pretty the abstract value assuming it has the type given as argument. *)
 
@@ -120,25 +133,27 @@ module type S = sig
 
   (** Embeds C constants into value abstractions: returns an abstract value
       for the given constant. The constant cannot be an enumeration constant. *)
-  val constant : exp -> constant -> t
+  val constant : context enriched -> Eva_ast.exp -> Eva_ast.constant -> t
 
   (** [forward_unop typ unop v] evaluates the value [unop v], resulting from the
       application of the unary operator [unop] to the value [v].  [typ] is the
       type of [v]. *)
-  val forward_unop : typ -> unop -> t -> t or_bottom
+  val forward_unop : context enriched -> typ -> Eva_ast.unop -> t -> t or_bottom
 
   (** [forward_binop typ binop v1 v2] evaluates the value [v1 binop v2],
       resulting from the application of the binary operator [binop] to the
       values [v1] and [v2]. [typ] is the type of [v1]. *)
-  val forward_binop : typ -> binop -> t -> t -> t or_bottom
+  val forward_binop :
+    context enriched -> typ -> Eva_ast.binop -> t -> t -> t or_bottom
 
   (** [rewrap_integer irange t] wraps around the abstract value [t] to fit the
       integer range [irange], assuming 2's complement. Also used on absolute
       addresses for pointer values, seen as unsigned integers. *)
-  val rewrap_integer: Eval_typ.integer_range -> t -> t
+  val rewrap_integer: context enriched -> Eval_typ.integer_range -> t -> t
 
   (** Abstract evaluation of casts operators from [src_type] to [dst_type]. *)
   val forward_cast :
+    context enriched ->
     src_type: Eval_typ.scalar_typ -> dst_type: Eval_typ.scalar_typ ->
     t -> t or_bottom
 
@@ -164,19 +179,23 @@ module type S = sig
   (** Backward evaluation of the binary operation [left binop right = result];
       tries to reduce the argument [left] and [right] according to [result].
       [input_type] is the type of [left], [resulting_type] the type of [result]. *)
-  val backward_binop : input_type:typ -> resulting_type:typ ->
-    binop -> left:t -> right:t -> result:t -> (t option * t option) or_bottom
+  val backward_binop :
+    context enriched -> input_type:typ -> resulting_type:typ ->
+    Eva_ast.binop -> left:t -> right:t -> result:t ->
+    (t option * t option) or_bottom
 
   (** Backward evaluation of the unary operation [unop arg = res];
       tries to reduce the argument [arg] according to [res].
       [typ_arg] is the type of [arg]. *)
   val backward_unop :
-    typ_arg:typ -> unop -> arg:t -> res:t -> t option or_bottom
+    context enriched -> typ_arg:typ -> Eva_ast.unop ->
+    arg:t -> res:t -> t option or_bottom
 
   (** Backward evaluation of the cast of the value [src_val] of type [src_typ]
       into the value [dst_val] of type [dst_typ]. Tries to reduce [scr_val]
       according to [dst_val]. *)
   val backward_cast:
+    context enriched ->
     src_typ: typ ->
     dst_typ: typ ->
     src_val: t ->
@@ -205,6 +224,9 @@ module type Leaf = sig
 
   (** The key identifies the module and the type [t] of abstract values. *)
   val key: t key
+
+  (** The abstract context on which this value depends. *)
+  val context : context Abstract_context.dependencies
 end
 
 (** Eva abstractions are divided between values, locations and domains.
diff --git a/src/plugins/eva/values/cvalue_backward.ml b/src/plugins/eva/values/cvalue_backward.ml
index b0431ddb6813842582d397a42f10372c457dc3bb..b4ba8bff308f2cb7303e551bdaf2125b49d7dd13 100644
--- a/src/plugins/eva/values/cvalue_backward.ml
+++ b/src/plugins/eva/values/cvalue_backward.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -260,7 +260,7 @@ let backward_lor ~v1 ~v2 ~res =
 let backward_binop ~typ_res ~res_value ~typ_e1 v1 binop v2 =
   let typ = Cil.unrollType typ_res in
   match binop, typ with
-  | PlusA, TInt _ ->  backward_add_int typ ~res_value ~v1 ~v2 true
+  | Eva_ast.PlusA, TInt _ ->  backward_add_int typ ~res_value ~v1 ~v2 true
   | MinusA, TInt _ -> backward_add_int typ ~res_value ~v1 ~v2 false
 
   | PlusA, TFloat (fk, _) ->  backward_add_float (Fval.kind fk) ~res_value ~v1 ~v2 `Add
@@ -277,7 +277,7 @@ let backward_binop ~typ_res ~res_value ~typ_e1 v1 binop v2 =
 
   (* comparison operators *)
   | (Eq | Ne | Le | Lt | Ge | Gt), _ -> begin
-      let binop = Eva_utils.conv_comp binop in
+      let binop = Eva_ast.conv_relation binop in
       match V.is_included V.singleton_zero res_value,
             V.is_included V.singleton_one  res_value with
       | true, true  ->
@@ -339,7 +339,7 @@ let backward_binop ~typ_res ~res_value ~typ_e1 v1 binop v2 =
 
 let backward_unop ~typ_arg op ~arg:_ ~res =
   match op with
-  | LNot -> None (* handled by the generic mechanism *)
+  | Eva_ast.LNot -> None (* handled by the generic mechanism *)
   | BNot -> None (* No real idea of what should be done *)
   | Neg ->
     try
diff --git a/src/plugins/eva/values/cvalue_backward.mli b/src/plugins/eva/values/cvalue_backward.mli
index 1b2e2d44f3120f5b91eb51240f2d4e30bba7492a..a6f35d23a96a75441e7b45f062b22d88a9f4ff0c 100644
--- a/src/plugins/eva/values/cvalue_backward.mli
+++ b/src/plugins/eva/values/cvalue_backward.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -34,13 +34,13 @@ val backward_binop:
   typ_res:typ ->
   res_value: V.t ->
   typ_e1:typ ->
-  V.t -> binop -> V.t -> (V.t * V.t) option
+  V.t -> Eva_ast.binop -> V.t -> (V.t * V.t) option
 
 (** This function tries to reduce the argument value of an unary operation,
     given its result. [typ_arg] is the type of [arg]. *)
 val backward_unop:
   typ_arg:typ ->
-  unop ->
+  Eva_ast.unop ->
   arg: V.t ->
   res: V.t ->
   V.t option
diff --git a/src/plugins/eva/values/cvalue_forward.ml b/src/plugins/eva/values/cvalue_forward.ml
index 8015fb3dd1544b778205539b6ef921345fd397be..4ecec4b55d32fe546714bb96ac8d078dde4df609 100644
--- a/src/plugins/eva/values/cvalue_forward.ml
+++ b/src/plugins/eva/values/cvalue_forward.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -377,7 +377,7 @@ let forward_minus_pp ~typ ev1 ev2 =
    The function must behave as if it was acting on unbounded integers *)
 let forward_binop_int ~typ ev1 op ev2 =
   match op with
-  | PlusPI  -> V.add_untyped ~factor:(Bit_utils.osizeof_pointed typ) ev1 ev2
+  | Eva_ast.PlusPI  -> V.add_untyped ~factor:(Bit_utils.osizeof_pointed typ) ev1 ev2
   | MinusPI ->
     let int_base = Int_Base.neg (Bit_utils.osizeof_pointed typ) in
     V.add_untyped ~factor:int_base ev1 ev2
@@ -403,7 +403,7 @@ let forward_binop_int ~typ ev1 op ev2 =
       ~contains_zero: (V.contains_zero ev1 || V.contains_zero ev2)
       ~contains_non_zero:(V.contains_non_zero ev1 && V.contains_non_zero ev2)
   | Eq | Ne | Ge | Le | Gt | Lt ->
-    let op = Eva_utils.conv_comp op in
+    let op = Eva_ast.conv_relation op in
     let signed = Bit_utils.is_signed_int_enum_pointer (Cil.unrollType typ) in
     V.inject_comp_result (V.forward_comp_int ~signed op ev1 ev2)
 
@@ -416,12 +416,12 @@ let forward_binop_float fkind ev1 op ev2 =
       V.inject_float (f fkind f1 f2)
     in
     match op with
-    | PlusA ->   binary_float_floats "+." Fval.add
+    | Eva_ast.PlusA ->   binary_float_floats "+." Fval.add
     | MinusA ->  binary_float_floats "-." Fval.sub
     | Mult ->    binary_float_floats "*." Fval.mul
     | Div ->     binary_float_floats "/." Fval.div
     | Eq | Ne | Lt | Gt | Le | Ge ->
-      let op = Eva_utils.conv_comp op in
+      let op = Eva_ast.conv_relation op in
       V.inject_comp_result (Fval.forward_comp op f1 f2)
     | _ -> assert false
 
@@ -448,7 +448,7 @@ let forward_uneg v t =
 
 let forward_unop typ op value =
   match op with
-  | Neg -> forward_uneg value typ
+  | Eva_ast.Neg -> forward_uneg value typ
   | BNot -> begin
       match Cil.unrollType typ with
       | TInt (ik, _) | TEnum ({ekind=ik}, _) ->
diff --git a/src/plugins/eva/values/cvalue_forward.mli b/src/plugins/eva/values/cvalue_forward.mli
index 085dd06bd941246b8d79fca08fea8ee15f51e615..a68b00784670c517273eaf66f34d54ed85c86912 100644
--- a/src/plugins/eva/values/cvalue_forward.mli
+++ b/src/plugins/eva/values/cvalue_forward.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -34,11 +34,11 @@ val assume_not_nan: assume_finite:bool -> fkind -> V.t -> V.t truth
 val assume_pointer: V.t -> V.t truth
 val assume_comparable: pointer_comparison -> V.t -> V.t -> (V.t * V.t) truth
 
-val forward_binop_int: typ: typ -> V.t -> binop -> V.t -> V.t
+val forward_binop_int: typ: typ -> V.t -> Eva_ast.binop -> V.t -> V.t
 
-val forward_binop_float: Fval.kind -> V.t -> binop -> V.t -> V.t
+val forward_binop_float: Fval.kind -> V.t -> Eva_ast.binop -> V.t -> V.t
 
-val forward_unop: typ -> unop -> V.t -> V.t
+val forward_unop: typ -> Eva_ast.unop -> V.t -> V.t
 
 val rewrap_integer: Eval_typ.integer_range -> V.t -> V.t
 
diff --git a/src/plugins/eva/values/location_lift.ml b/src/plugins/eva/values/location_lift.ml
index 769faab7a8c797b552699a8a3ea996bee1c9812c..05a2155cc5e86fe27e789f64a45def486cc98c27 100644
--- a/src/plugins/eva/values/location_lift.ml
+++ b/src/plugins/eva/values/location_lift.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/values/location_lift.mli b/src/plugins/eva/values/location_lift.mli
index d66d68fb6ca44873bbf1c31eb0ce6943bad92227..27e7116b03cc5f0d3b1778a976dc5a8b82952a1b 100644
--- a/src/plugins/eva/values/location_lift.mli
+++ b/src/plugins/eva/values/location_lift.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/values/main_locations.ml b/src/plugins/eva/values/main_locations.ml
index 9a8a1eab3637fc7f3e8af0cf373afb50709c1bf5..48f5a0c0de4d3bff967526311a9edbc0be25adeb 100644
--- a/src/plugins/eva/values/main_locations.ml
+++ b/src/plugins/eva/values/main_locations.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/values/main_locations.mli b/src/plugins/eva/values/main_locations.mli
index c288fecaebe43ac363756fb9cc8d1f60be8135cf..8353a900bc654ae7f3f133229a91c418de3ddc6d 100644
--- a/src/plugins/eva/values/main_locations.mli
+++ b/src/plugins/eva/values/main_locations.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/values/main_values.ml b/src/plugins/eva/values/main_values.ml
index bdb449966dc64ce435b7d515ab11d963e2e9cc2a..f6469c32437c960039d0d7d2edfacb3aac447aae 100644
--- a/src/plugins/eva/values/main_values.ml
+++ b/src/plugins/eva/values/main_values.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,11 +20,12 @@
 (*                                                                        *)
 (**************************************************************************)
 
-open Cil_types
-
 module CVal = struct
   include Cvalue.V
 
+  type context = unit
+  let context = Abstract_context.Leaf (module Unit_context)
+
   let zero = Cvalue.V.singleton_zero
   let one = Cvalue.V.singleton_one
 
@@ -47,23 +48,25 @@ module CVal = struct
   let assume_pointer = Cvalue_forward.assume_pointer
   let assume_comparable = Cvalue_forward.assume_comparable
 
-  let constant exp = function
+  let constant _context _exp = function
+    | Eva_ast.CTopInt _ -> Cvalue.V.top_int
     | CInt64 (i,_k,_s) -> Cvalue.V.inject_int i
     | CChr c           -> Cvalue.V.inject_int (Cil.charConstToInt c)
-    | CWStr _ | CStr _ -> Cvalue.V.inject (Base.of_string_exp exp) Ival.zero
+    | CString base ->
+      Cvalue.V.inject base Ival.zero
     | CReal (f, fkind, fstring) ->
       Cvalue_forward.eval_float_constant f fkind fstring
     | CEnum _ -> assert false
 
-  let forward_unop typ unop value =
+  let forward_unop _context typ unop value =
     let value = Cvalue_forward.forward_unop typ unop value in
     (* TODO: `Bottom must be in CValue and Cvalue_forward. *)
     if Cvalue.V.is_bottom value then `Bottom else `Value value
 
-  let forward_binop typ binop v1 v2 =
+  let forward_binop _context typ binop v1 v2 =
     let value =
       match typ with
-      | TFloat (fkind, _) ->
+      | Cil_types.TFloat (fkind, _) ->
         Cvalue_forward.forward_binop_float (Fval.kind fkind) v1 binop v2
       | TInt _ | TPtr _ | _ as typ ->
         Cvalue_forward.forward_binop_int ~typ v1 binop v2
@@ -72,16 +75,16 @@ module CVal = struct
     then `Bottom
     else `Value value
 
-  let rewrap_integer = Cvalue_forward.rewrap_integer
+  let rewrap_integer _context = Cvalue_forward.rewrap_integer
 
-  let forward_cast ~src_type ~dst_type v =
+  let forward_cast _context ~src_type ~dst_type v =
     let v = Cvalue_forward.forward_cast ~src_type ~dst_type v in
     if Cvalue.V.is_bottom v then `Bottom else `Value v
 
-  let backward_binop ~input_type ~resulting_type binop ~left ~right ~result =
+  let backward_binop _ctx ~input_type ~resulting_type op ~left ~right ~result =
     let reduction =
       Cvalue_backward.backward_binop
-        ~typ_res:resulting_type ~res_value:result ~typ_e1:input_type left binop right
+        ~typ_res:resulting_type ~res_value:result ~typ_e1:input_type left op right
     in
     match reduction with
     | None -> `Value (None, None)
@@ -90,7 +93,7 @@ module CVal = struct
       then `Bottom
       else `Value (Some v1, Some v2)
 
-  let backward_unop ~typ_arg op ~arg ~res =
+  let backward_unop _context ~typ_arg op ~arg ~res =
     let reduction = Cvalue_backward.backward_unop ~typ_arg op ~arg ~res in
     match reduction with
     | None -> `Value None
@@ -99,7 +102,7 @@ module CVal = struct
       then `Bottom
       else `Value r
 
-  let backward_cast ~src_typ ~dst_typ ~src_val ~dst_val =
+  let backward_cast _context ~src_typ ~dst_typ ~src_val ~dst_val =
     let reduction =
       Cvalue_backward.backward_cast ~src_typ ~dst_typ ~src_val ~dst_val
     in
@@ -142,6 +145,9 @@ let cval = Abstract_value.Leaf (module CVal)
 module Interval = struct
   include Datatype.Option (Ival)
 
+  type context = unit
+  let context = Abstract_context.Leaf (module Unit_context)
+
   let pretty_typ _ = pretty
 
   let top = None
@@ -172,15 +178,15 @@ module Interval = struct
   let assume_pointer v = `Unknown v
   let assume_comparable _ v1 v2 = `Unknown (v1, v2)
 
-  let constant _ _ = top
-  let forward_unop _ _ _ = `Value top
-  let forward_binop _ _ _ _ = `Value top
-  let forward_cast ~src_type:_ ~dst_type:_ _ = `Value top
+  let constant _ _ _ = top
+  let forward_unop _ _ _ _ = `Value top
+  let forward_binop _ _ _ _ _ = `Value top
+  let forward_cast _ ~src_type:_ ~dst_type:_ _ = `Value top
 
   let resolve_functions _ = `Top, true
   let replace_base _substitution t = t
 
-  let rewrap_integer range value =
+  let rewrap_integer _ range value =
     match value with
     | None -> value
     | Some value ->
@@ -188,10 +194,10 @@ module Interval = struct
       let signed = range.Eval_typ.i_signed in
       Some (Ival.cast_int_to_int ~signed ~size value)
 
-  let backward_unop ~typ_arg:_ _unop ~arg:_ ~res:_ = `Value None
-  let backward_binop ~input_type:_ ~resulting_type:_ _binop ~left:_ ~right:_ ~result:_ =
+  let backward_unop _ ~typ_arg:_ _unop ~arg:_ ~res:_ = `Value None
+  let backward_binop _ ~input_type:_ ~resulting_type:_ _binop ~left:_ ~right:_ ~result:_ =
     `Value (None, None)
-  let backward_cast ~src_typ:_ ~dst_typ:_ ~src_val:_ ~dst_val:_ =
+  let backward_cast _ ~src_typ:_ ~dst_typ:_ ~src_val:_ ~dst_val:_ =
     `Value None
 
   let key = Structure.Key_Value.create_key "interval"
diff --git a/src/plugins/eva/values/main_values.mli b/src/plugins/eva/values/main_values.mli
index 41fe9c06e0ce50aa889d77871517a9045772802d..daec5ef3c6c16add4c4e4bdef255f04fb8f6c136 100644
--- a/src/plugins/eva/values/main_values.mli
+++ b/src/plugins/eva/values/main_values.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -23,16 +23,19 @@
 (** Main numeric values of Eva that can be used by abstract domains. *)
 
 (** Main abstract values built over Cvalue.V, used by most domains. *)
-module CVal: Abstract_value.Leaf with type t = Cvalue.V.t
+module CVal: Abstract_value.Leaf
+  with type t = Cvalue.V.t and type context = unit
 val cval: CVal.t Abstract_value.dependencies
 
 (** Dummy intervals: no forward nor backward propagations,
     only used as a reduced product with CVal above. [None] is top. *)
-module Interval: Abstract_value.Leaf with type t = Ival.t option
+module Interval: Abstract_value.Leaf
+  with type t = Ival.t option and type context = unit
 val ival: Interval.t Abstract_value.dependencies
 
 (** Simple sign values, used by the sign domain. *)
-module Sign: Abstract_value.Leaf with type t = Sign_value.t
+module Sign: Abstract_value.Leaf
+  with type t = Sign_value.t and type context = unit
 val sign: Sign.t Abstract_value.dependencies
 
 (*
diff --git a/src/plugins/eva/values/offsm_value.ml b/src/plugins/eva/values/offsm_value.ml
index fa44973302f440c4f8e266b00cfa086561421d19..fd657c92ee4eed9e274e71018eb4eceb00246e94 100644
--- a/src/plugins/eva/values/offsm_value.ml
+++ b/src/plugins/eva/values/offsm_value.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -369,9 +369,14 @@ module Datatype_Offsm_or_top = Datatype.Make_with_collections(struct
   end)
 
 
-module Offsm : Abstract_value.Leaf with type t = offsm_or_top = struct
+module Offsm
+  : Abstract_value.Leaf with type t = offsm_or_top and type context = unit
+= struct
   include Datatype_Offsm_or_top
 
+  type context = unit
+  let context = Abstract_context.Leaf (module Unit_context)
+
   let pretty_typ typ fmt = function
     | Top as o -> pretty fmt o
     | O o ->
@@ -412,10 +417,10 @@ module Offsm : Abstract_value.Leaf with type t = offsm_or_top = struct
   let assume_pointer v = `Unknown v
   let assume_comparable _ v1 v2 = `Unknown (v1, v2)
 
-  let constant e _c =
+  let constant _context e _c =
     if store_redundant then
-      match Cil.constFoldToInt e with
-      | Some i -> inject_int (Cil.typeOf e) i
+      match Eva_ast.fold_to_integer e with
+      | Some i -> inject_int e.typ i
       | None -> Top
     else Top
 
@@ -426,17 +431,17 @@ module Offsm : Abstract_value.Leaf with type t = offsm_or_top = struct
       let f v = snd (Cvalue.V_Or_Uninitialized.replace_base substitution v) in
       O (Cvalue.V_Offsetmap.map_on_values f offsm)
 
-  let forward_unop _typ op o =
+  let forward_unop _context _typ op o =
     let o' = match o, op with
-      | Top, _ | _, (Neg | LNot) -> Top
+      | Top, _ | _, (Eva_ast.Neg | LNot) -> Top
       | O o, BNot -> O (bnot o)
     in
     `Value o'
 
-  let forward_binop _typ op o1 o2 =
+  let forward_binop _context _typ op o1 o2 =
     let o' =
       match o1, o2, op with
-      | O _o1, O _o2, (Shiftlt | Shiftrt) ->
+      | O _o1, O _o2, (Eva_ast.Shiftlt | Shiftrt) ->
         (* It is inconvenient to handle shift here, because we need a
            constant for o2 *)
         Top
@@ -447,17 +452,18 @@ module Offsm : Abstract_value.Leaf with type t = offsm_or_top = struct
     in
     `Value o'
 
-  let backward_binop ~input_type:_ ~resulting_type:_ _op ~left:_ ~right:_ ~result:_ =
+  let backward_binop _context ~input_type:_ ~resulting_type:_
+      _op ~left:_ ~right:_ ~result:_ =
     `Value (None, None)
 
-  let backward_unop ~typ_arg:_ _unop ~arg:_ ~res:_ = `Value None
+  let backward_unop _context ~typ_arg:_ _unop ~arg:_ ~res:_ = `Value None
 
-  let backward_cast ~src_typ:_ ~dst_typ:_ ~src_val:_ ~dst_val:_ =
+  let backward_cast _context ~src_typ:_ ~dst_typ:_ ~src_val:_ ~dst_val:_ =
     `Value None
 
-  let rewrap_integer _range o = o
+  let rewrap_integer _context _range o = o
 
-  let forward_cast ~src_type ~dst_type o =
+  let forward_cast _context ~src_type ~dst_type o =
     let open Eval_typ in
     match o, src_type, dst_type with
     | O o, (TSInt src | TSPtr src), (TSInt dst | TSPtr dst) ->
@@ -515,23 +521,23 @@ let () = Abstractions.Hooks.register @@ fun (module Abstraction) ->
           let* v = strengthen_v typ (get_cvalue t) o in
           `Value (set_cvalue v t)
 
-      let forward_unop typ op t =
+      let forward_unop context typ op t =
         match op with
-        | BNot ->
+        | Eva_ast.BNot ->
           let t = strengthen_offsm typ t in
-          let* t = forward_unop typ op t in
+          let* t = forward_unop context typ op t in
           strengthen_v typ t
-        | _ -> forward_unop typ op t
+        | _ -> forward_unop context typ op t
 
-      let forward_binop typ op l r =
+      let forward_binop context typ op l r =
         match op with
-        | BAnd | BOr | BXor ->
+        | Eva_ast.BAnd | BOr | BXor ->
           let l = strengthen_offsm typ l
           and r = strengthen_offsm typ r in
-          let* t = forward_binop typ op l r in
+          let* t = forward_binop context typ op l r in
           strengthen_v typ t
         | Shiftlt | Shiftrt ->
-          let* p = forward_binop typ op l r in
+          let* p = forward_binop context typ op l r in
           begin
             try
               let i = get_cvalue r |> V.project_ival |> Ival.project_int in
@@ -542,7 +548,7 @@ let () = Abstractions.Hooks.register @@ fun (module Abstraction) ->
               `Value (set_offsm (O offsm) p)
             with V.Not_based_on_null | Ival.Not_Singleton_Int -> `Value p
           end
-        | _ -> forward_binop typ op l r
+        | _ -> forward_binop context typ op l r
     end in
     (module struct
       include Abstraction
diff --git a/src/plugins/eva/values/offsm_value.mli b/src/plugins/eva/values/offsm_value.mli
index fa9b4ef0b4172c9d55e5a6d4562fe6f47871971c..07a20d5a562c6de3b2c2d3df4b8806b436af5e52 100644
--- a/src/plugins/eva/values/offsm_value.mli
+++ b/src/plugins/eva/values/offsm_value.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/eva/values/sign_value.ml b/src/plugins/eva/values/sign_value.ml
index fdb788c8506f0aec6f0658211b7f3b140032edcc..04ab54aa224b3beb5389335ef7e2f9c60fd404f2 100644
--- a/src/plugins/eva/values/sign_value.ml
+++ b/src/plugins/eva/values/sign_value.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -68,6 +68,9 @@ include Datatype.Make(struct
 let pretty_debug = pretty
 let pretty_typ _ = pretty
 
+type context = unit
+let context = Abstract_context.Leaf (module Unit_context)
+
 (* Inclusion: test inclusion of each field. *)
 let is_included v1 v2 =
   let bincl b1 b2 = (not b1) || b2 in
@@ -99,8 +102,8 @@ let inject_int _ i =
   else if Integer.gt i Integer.zero then pos
   else zero
 
-let constant _ = function
-  | CInt64 (i, _, _) -> inject_int () i
+let constant _context _expr = function
+  | Eva_ast.CInt64 (i, _, _) -> inject_int () i
   | _ -> top
 
 (* Extracting function pointers from an abstraction. Not implemented
@@ -144,9 +147,9 @@ let bitwise_not typ v =
 
 let logical_not v = { pos = v.zero; neg = false; zero = v.pos || v.neg }
 
-let forward_unop typ op v =
+let forward_unop _context typ op v =
   match op with
-  | Neg -> `Value (neg_unop v)
+  | Eva_ast.Neg -> `Value (neg_unop v)
   | BNot -> `Value (bitwise_not typ v)
   | LNot -> `Value (logical_not v)
 
@@ -223,9 +226,9 @@ let logical_or v1 v2 =
   let zero = v1.zero && v2.zero in
   { pos; neg; zero }
 
-let forward_binop _ op v1 v2 =
+let forward_binop _context _typ op v1 v2 =
   match op with
-  | PlusA  -> `Value (plus v1 v2)
+  | Eva_ast.PlusA  -> `Value (plus v1 v2)
   | MinusA -> `Value (plus v1 (neg_unop v2))
   | Mult   -> `Value (mul v1 v2)
   | Div    -> if equal zero v2 then `Bottom else `Value (div v1 v2)
@@ -236,13 +239,13 @@ let forward_binop _ op v1 v2 =
   | LOr -> `Value (logical_or v1 v2)
   | _      -> `Value top
 
-let rewrap_integer range v =
+let rewrap_integer _context range v =
   if equal v zero then v
   else if range.Eval_typ.i_signed then top else pos_or_zero
 
 (* Casts from type [src_typ] to type [dst_typ]. As downcasting can wrap,
    we only handle upcasts precisely *)
-let forward_cast ~src_type ~dst_type v =
+let forward_cast _context ~src_type ~dst_type v =
   let open Eval_typ in
   match src_type, dst_type with
   | TSInt range_src, TSInt range_dst ->
@@ -312,10 +315,10 @@ let backward_comp_right op ~left ~right =
 (* This functions must reduce the values [left] and [right], assuming
    that [left op right == result] holds. Currently, it is only implemented
    for comparison operators. *)
-let backward_binop ~input_type:_ ~resulting_type:_ op ~left ~right ~result =
+let backward_binop _ctx ~input_type:_ ~resulting_type:_ op ~left ~right ~result =
   match op with
-  | Ne | Eq | Le | Lt | Ge | Gt ->
-    let op = Eva_utils.conv_comp op in
+  | Eva_ast.Ne | Eq | Le | Lt | Ge | Gt ->
+    let op = Eva_ast.conv_relation op in
     if equal zero result then
       (* The comparison is false, as it always evaluate to false. Reduce by the
          fact that the inverse comparison is true.  *)
@@ -334,9 +337,12 @@ let backward_binop ~input_type:_ ~resulting_type:_ op ~left ~right ~result =
   | _ -> `Value (None, None)
 
 (* Not implemented precisely *)
-let backward_unop ~typ_arg:_ _op ~arg:_ ~res:_ = `Value None
+let backward_unop _context ~typ_arg:_ _op ~arg:_ ~res:_ =
+  `Value None
+
 (* Not implemented precisely *)
-let backward_cast ~src_typ:_ ~dst_typ:_ ~src_val:_ ~dst_val:_ = `Value None
+let backward_cast _context ~src_typ:_ ~dst_typ:_ ~src_val:_ ~dst_val:_ =
+  `Value None
 
 (* Eva boilerplate, used to retrieve the domain. *)
 let key = Structure.Key_Value.create_key "sign_values"
diff --git a/src/plugins/eva/values/sign_value.mli b/src/plugins/eva/values/sign_value.mli
index 26a9145bc44fa0c9ee80cd1b8523bbe291924285..7fadfe569703267e5dede1c083937d92099ea031 100644
--- a/src/plugins/eva/values/sign_value.mli
+++ b/src/plugins/eva/values/sign_value.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -28,5 +28,5 @@ type signs = {
   neg: bool;  (** true: maybe negative, false: never negative *)
 }
 
-include Abstract_value.Leaf with type t = signs
+include Abstract_value.Leaf with type t = signs and type context = unit
 val pretty_debug: t Pretty_utils.formatter
diff --git a/src/plugins/eva/values/value_lift.ml b/src/plugins/eva/values/value_lift.ml
new file mode 100644
index 0000000000000000000000000000000000000000..08d29c185bad5f4445d713dd5b25b8e344ebc4b8
--- /dev/null
+++ b/src/plugins/eva/values/value_lift.ml
@@ -0,0 +1,72 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+module type Conversion = sig
+  type extended
+  type internal
+  val restrict : extended -> internal
+end
+
+module Make
+    (Val: Abstract_value.Leaf)
+    (Convert : Conversion with type internal := Val.context)
+= struct
+
+  (* Import most of [Val] *)
+  include (Val: Abstract_value.S
+           with type context := Val.context (* we are converting this type *)
+            and type t = Val.t)
+  type context = Convert.extended
+
+  let structure = Abstract.Value.Leaf (Val.key, (module Val))
+
+  let restrict context =
+    let open Abstract_value in
+    { from_domains = Convert.restrict context.from_domains }
+
+  (* Now lift the functions that contain {!context} in their type. *)
+
+  let constant context exp constant =
+    Val.constant (restrict context) exp constant
+
+  let forward_unop context typ unop value =
+    Val.forward_unop (restrict context) typ unop value
+
+  let forward_binop context typ binop left right =
+    Val.forward_binop (restrict context) typ binop left right
+
+  let rewrap_integer context range value =
+    Val.rewrap_integer (restrict context) range value
+
+  let forward_cast context ~src_type ~dst_type value =
+    Val.forward_cast (restrict context) ~src_type ~dst_type value
+
+  let backward_binop context ~input_type ~resulting_type binop ~left ~right ~result =
+    Val.backward_binop (restrict context) ~input_type ~resulting_type binop ~left ~right ~result
+
+  let backward_unop context ~typ_arg unop ~arg ~res =
+    Val.backward_unop (restrict context) ~typ_arg unop ~arg ~res
+
+  let backward_cast context ~src_typ ~dst_typ ~src_val ~dst_val =
+    Val.backward_cast (restrict context) ~src_typ ~dst_typ ~src_val ~dst_val
+
+end
diff --git a/src/plugins/eva/values/value_lift.mli b/src/plugins/eva/values/value_lift.mli
new file mode 100644
index 0000000000000000000000000000000000000000..a706eb89ea344f6d0028a3d5bc04d2add39c8271
--- /dev/null
+++ b/src/plugins/eva/values/value_lift.mli
@@ -0,0 +1,33 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+module type Conversion = sig
+  type extended
+  type internal
+  val restrict : extended -> internal
+end
+
+module Make
+    (Val: Abstract_value.Leaf)
+    (Convert : Conversion with type internal := Val.context)
+  : Abstract.Value.Internal with type t = Val.t
+                             and type context = Convert.extended
diff --git a/src/plugins/eva/values/value_product.ml b/src/plugins/eva/values/value_product.ml
index 8f2101a68cd756802b98f379afae7fbefb4d47f9..0cfbe6e78b6af8861d9a89b6c430ef53ec9022ed 100644
--- a/src/plugins/eva/values/value_product.ml
+++ b/src/plugins/eva/values/value_product.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -45,82 +45,90 @@ let narrow_truth_pair x y =
   narrow_any_truth combine x y
 
 module Make
-    (Left: Abstract_value.S)
-    (Right: Abstract_value.S)
+    (Context : Abstract_context.S)
+    (Left  : Abstract.Value.Internal with type context = Context.t)
+    (Right : Abstract.Value.Internal with type context = Context.t)
 = struct
 
   include Datatype.Pair (Left) (Right)
+  type context = Context.t
+  let structure = Abstract.Value.Node (Left.structure, Right.structure)
 
   let pretty_typ typ =
     Pretty_utils.pp_pair ~pre:"@[" ~sep:",@ " ~suf:"@]"
       (Left.pretty_typ typ) (Right.pretty_typ typ)
 
   let top = Left.top, Right.top
+
   let is_included (l1, r1) (l2, r2) =
     Left.is_included l1 l2 && Right.is_included r1 r2
+
   let join (l1, r1) (l2, r2) =
     Left.join l1 l2, Right.join r1 r2
+
   let narrow (l1, r1) (l2, r2) =
-    Left.narrow l1 l2 >>- fun left ->
-    Right.narrow r1 r2 >>-: fun right ->
+    let+ left  = Left.narrow  l1 l2
+    and+ right = Right.narrow r1 r2 in
     left, right
 
   let zero = Left.zero, Right.zero
-  let one = Left.one, Right.one
+  let one  = Left.one , Right.one
   let top_int = Left.top_int, Right.top_int
   let inject_int typ i = Left.inject_int typ i, Right.inject_int typ i
 
   let assume_non_zero (left, right) =
-    let left_truth = Left.assume_non_zero left
+    let left_truth  = Left.assume_non_zero  left
     and right_truth = Right.assume_non_zero right in
     narrow_truth (left, left_truth) (right, right_truth)
 
   let assume_bounded kind bound (left, right) =
-    let left_truth = Left.assume_bounded kind bound left
+    let left_truth  = Left.assume_bounded  kind bound left
     and right_truth = Right.assume_bounded kind bound right in
     narrow_truth (left, left_truth) (right, right_truth)
 
   let assume_not_nan ~assume_finite fkind (left, right) =
-    let left_truth = Left.assume_not_nan ~assume_finite fkind left
+    let left_truth  = Left.assume_not_nan  ~assume_finite fkind left
     and right_truth = Right.assume_not_nan ~assume_finite fkind right in
     narrow_truth (left, left_truth) (right, right_truth)
 
   let assume_pointer (left, right) =
-    let left_truth = Left.assume_pointer left
+    let left_truth  = Left.assume_pointer  left
     and right_truth = Right.assume_pointer right in
     narrow_truth (left, left_truth) (right, right_truth)
 
   let assume_comparable op (l1, r1) (l2, r2) =
-    let left_truth = Left.assume_comparable op l1 l2
+    let left_truth  = Left.assume_comparable  op l1 l2
     and right_truth = Right.assume_comparable op r1 r2 in
     narrow_truth_pair ((l1, l2), left_truth) ((r1, r2), right_truth)
 
-  let constant expr constant =
-    let left = Left.constant expr constant
-    and right = Right.constant expr constant in
+  let constant context expr constant =
+    let left  = Left.constant  context expr constant
+    and right = Right.constant context expr constant in
     left, right
 
-  let forward_unop typ unop (left, right) =
-    Left.forward_unop typ unop left >>- fun left ->
-    Right.forward_unop typ unop right >>-: fun right ->
+  let forward_unop context typ unop (left, right) =
+    let+ left  = Left.forward_unop  context typ unop left
+    and+ right = Right.forward_unop context typ unop right in
     left, right
 
-  let forward_binop typ binop (l1, r1) (l2, r2) =
-    Left.forward_binop typ binop l1 l2 >>- fun left ->
-    Right.forward_binop typ binop r1 r2 >>-: fun right ->
+  let forward_binop context typ binop (l1, r1) (l2, r2) =
+    let+ left  = Left.forward_binop  context typ binop l1 l2
+    and+ right = Right.forward_binop context typ binop r1 r2 in
     left, right
 
-  let rewrap_integer range (left, right) =
-    Left.rewrap_integer range left, Right.rewrap_integer range right
+  let rewrap_integer context range (left, right) =
+    let left  = Left.rewrap_integer  context range left
+    and right = Right.rewrap_integer context range right in
+    left, right
 
-  let forward_cast ~src_type ~dst_type (left, right) =
-    Left.forward_cast ~src_type ~dst_type left >>- fun left ->
-    Right.forward_cast ~src_type ~dst_type right >>-: fun right ->
+  let forward_cast context ~src_type ~dst_type (left, right) =
+    let+ left  = Left.forward_cast context  ~src_type ~dst_type left
+    and+ right = Right.forward_cast context ~src_type ~dst_type right in
     left, right
 
   let resolve_functions (left, right) =
-    let list1, b1 = Left.resolve_functions left
-    and list2, b2 = Right.resolve_functions right in
+    let list1, b1 = Left.resolve_functions  left  in
+    let list2, b2 = Right.resolve_functions right in
     let list = match list1, list2 with
       | `Top, _ -> list2
       | _, `Top -> list1
@@ -129,8 +137,7 @@ module Make
     list, b1 && b2
 
   let replace_base substitution (left, right) =
-    Left.replace_base substitution left,
-    Right.replace_base substitution right
+    Left.replace_base substitution left, Right.replace_base substitution right
 
   let reduce (orig_left, orig_right) left right = match left, right with
     | None, None            -> None
@@ -138,25 +145,25 @@ module Make
     | None, Some right      -> Some (orig_left, right)
     | Some left, Some right -> Some (left, right)
 
-  let backward_unop ~typ_arg unop ~arg:(arg_l, arg_r as arg) ~res:(res_l, res_r) =
-    Left.backward_unop ~typ_arg unop ~arg:arg_l ~res:res_l >>- fun left ->
-    Right.backward_unop ~typ_arg unop ~arg:arg_r ~res:res_r >>-: fun right ->
+  let backward_unop context ~typ_arg unop ~arg ~res =
+    let on_left  = Left.backward_unop  context ~typ_arg unop in
+    let on_right = Right.backward_unop context ~typ_arg unop in
+    let+ left  = on_left  ~arg:(fst arg) ~res:(fst res)
+    and+ right = on_right ~arg:(snd arg) ~res:(snd res) in
     reduce arg left right
 
-  let backward_binop ~input_type ~resulting_type binop ~left ~right ~result =
-    let l1, r1 = left and l2, r2 = right and l3, r3 = result in
-    Left.backward_binop ~input_type ~resulting_type
-      binop ~left:l1 ~right:l2 ~result:l3
-    >>- fun (l1, l2) ->
-    Right.backward_binop ~input_type ~resulting_type
-      binop ~left:r1 ~right:r2 ~result:r3
-    >>-: fun (r1, r2) ->
+  let backward_binop ctx ~input_type ~resulting_type binop ~left ~right ~result:res =
+    let on_left  = Left.backward_binop  ctx ~input_type ~resulting_type binop in
+    let on_right = Right.backward_binop ctx ~input_type ~resulting_type binop in
+    let+ l1, l2 = on_left  ~left:(fst left) ~right:(fst right) ~result:(fst res)
+    and+ r1, r2 = on_right ~left:(snd left) ~right:(snd right) ~result:(snd res) in
     reduce left l1 r1, reduce right l2 r2
 
-  let backward_cast ~src_typ ~dst_typ ~src_val ~dst_val =
-    let l1, r1 = src_val and l2, r2 = dst_val in
-    Left.backward_cast ~src_typ ~dst_typ ~src_val:l1 ~dst_val:l2 >>- fun left ->
-    Right.backward_cast ~src_typ ~dst_typ ~src_val:r1 ~dst_val:r2 >>-: fun right ->
+  let backward_cast context ~src_typ ~dst_typ ~src_val ~dst_val =
+    let on_left  = Left.backward_cast  context ~src_typ ~dst_typ in
+    let on_right = Right.backward_cast context ~src_typ ~dst_typ in
+    let+ left  = on_left  ~src_val:(fst src_val) ~dst_val:(fst dst_val)
+    and+ right = on_right ~src_val:(snd src_val) ~dst_val:(snd dst_val) in
     reduce src_val left right
 
 end
diff --git a/src/plugins/eva/values/value_product.mli b/src/plugins/eva/values/value_product.mli
index f53f265b25b1670f777045be22892c8f096c665b..dd4e6e528750d561e19b5651afe1501922acfd0e 100644
--- a/src/plugins/eva/values/value_product.mli
+++ b/src/plugins/eva/values/value_product.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -35,9 +35,12 @@ val narrow_truth_pair:
   (('a * 'b)  * ('a * 'b)) truth
 
 module Make
-    (Left: Abstract_value.S)
-    (Right: Abstract_value.S)
-  : Abstract_value.S with type t = Left.t * Right.t
+    (Context : Abstract_context.S)
+    (Left  : Abstract.Value.Internal with type context = Context.t)
+    (Right : Abstract.Value.Internal with type context = Context.t)
+  : Abstract.Value.Internal
+    with type t = Left.t * Right.t
+     and type context = Context.t
 
 
 (*
diff --git a/src/plugins/eva/vtests.sh b/src/plugins/eva/vtests.sh
index 5411f3c559ef2fb9fd9fb1dfef5cacec258fe02d..61831dad0c0f4680bd5dab937e73f6ba95dbc90f 100755
--- a/src/plugins/eva/vtests.sh
+++ b/src/plugins/eva/vtests.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/from/From.ml b/src/plugins/from/From.ml
index a2bbb575037a34ebd51051c1406eee5d305a44b5..1ef6e8ac46f65647f6a5de139960c0adb14f1861 100644
--- a/src/plugins/from/From.ml
+++ b/src/plugins/from/From.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/From.mli b/src/plugins/from/From.mli
index ac0db406d4db28374a7cea5b28c4486c54885a05..8ba9f18b0cec0195d3fb8b4c4525ef691c4b17f4 100644
--- a/src/plugins/from/From.mli
+++ b/src/plugins/from/From.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/callwise.ml b/src/plugins/from/callwise.ml
index 1d70d24bb671bb6e53819735614723cf564333ac..86524b2a61920c0bf3462aaa2b5b81f7c8915771 100644
--- a/src/plugins/from/callwise.ml
+++ b/src/plugins/from/callwise.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/callwise.mli b/src/plugins/from/callwise.mli
index ad682a4d569ca6c75efea339479e358348a738aa..5fb0a10602653f23d1077e178e98635015185d1f 100644
--- a/src/plugins/from/callwise.mli
+++ b/src/plugins/from/callwise.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/dune b/src/plugins/from/dune
index 1f4eab52cb87d4906ba5ec6760a46e7ab3416fc9..1e769f239c2119877b6ab480a5229572e8426863 100644
--- a/src/plugins/from/dune
+++ b/src/plugins/from/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/from/dune-project b/src/plugins/from/dune-project
index e7963b3b436325692652845f9471d55cf11e934c..9611da31e77cc2b9aeab0be03cc0bd689ee2a74e 100644
--- a/src/plugins/from/dune-project
+++ b/src/plugins/from/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/from/from_compute.ml b/src/plugins/from/from_compute.ml
index fddf07d1882cdb193ed23f3dabcc0c1fb6686622..0432d1d2785b88e6baa85fae55ed024218b11be1 100644
--- a/src/plugins/from/from_compute.ml
+++ b/src/plugins/from/from_compute.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/from_compute.mli b/src/plugins/from/from_compute.mli
index a48e9c38d2675bd00784dc2a7af4a1230328ccf9..947813ca2e56061989a8d417eba5a272d928c2c5 100644
--- a/src/plugins/from/from_compute.mli
+++ b/src/plugins/from/from_compute.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/from_memory.ml b/src/plugins/from/from_memory.ml
index 57d9fde7a112b070d89182f35e8ac20107f5bc62..2abd40555195a0aae26bc58b21ebded10672fd5c 100644
--- a/src/plugins/from/from_memory.ml
+++ b/src/plugins/from/from_memory.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/from_memory.mli b/src/plugins/from/from_memory.mli
index 8e6f08e5905a93ea68fc7f20a0c284b27eaa0f02..e39d333166e7965d73023111e4c80b2f11b2253a 100644
--- a/src/plugins/from/from_memory.mli
+++ b/src/plugins/from/from_memory.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/from_parameters.ml b/src/plugins/from/from_parameters.ml
index 90bf44aba972b771d878f9fbbde14a356094eff3..0c360e3e9f6b56ceeb30f01053639ca305597d94 100644
--- a/src/plugins/from/from_parameters.ml
+++ b/src/plugins/from/from_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/from_parameters.mli b/src/plugins/from/from_parameters.mli
index c72029de115996e7cf87de2f59652fb4cadee61f..ec53deab8e297430e0af29cff59917c701e58f76 100644
--- a/src/plugins/from/from_parameters.mli
+++ b/src/plugins/from/from_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/from_register.ml b/src/plugins/from/from_register.ml
index 680ad06894204d0f75bc0a4c0a372010ae9776f5..2d36395f16c39358bdbd413b7a5bb03d6ef8aab4 100644
--- a/src/plugins/from/from_register.ml
+++ b/src/plugins/from/from_register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/from_register.mli b/src/plugins/from/from_register.mli
index 5f7b5b910bf802e38160d64aada0325b66a66ae9..692dfc979a8d6e19548de057b38f154cf86453f2 100644
--- a/src/plugins/from/from_register.mli
+++ b/src/plugins/from/from_register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/functionwise.ml b/src/plugins/from/functionwise.ml
index 972c2749f7f19c2ea85b81ed1339a71acf19e48b..c8787d22071df43d4daa5af5efa03250a0b93f67 100644
--- a/src/plugins/from/functionwise.ml
+++ b/src/plugins/from/functionwise.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/functionwise.mli b/src/plugins/from/functionwise.mli
index 5f0ba60bace3c7b9c29a4dfa3c4506482b3b25a7..e5b92ba1b518d51ceb2ce346c2f168416b42cfb0 100644
--- a/src/plugins/from/functionwise.mli
+++ b/src/plugins/from/functionwise.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/gui/dune b/src/plugins/from/gui/dune
index f689792f99b3391648bcf570d01900d64093d034..8f77d0b82328d9e40831b101fb5f92456ae907cd 100644
--- a/src/plugins/from/gui/dune
+++ b/src/plugins/from/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/from/gui/from_register_gui.ml b/src/plugins/from/gui/from_register_gui.ml
index c2c8219b36d3310f519e11254df4fc4809755abd..db0d89544310d649ced594ac9e4807d8c20aedc0 100644
--- a/src/plugins/from/gui/from_register_gui.ml
+++ b/src/plugins/from/gui/from_register_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/from/gui/from_register_gui.mli b/src/plugins/from/gui/from_register_gui.mli
index 74104193ebf5762e6c1805ab698537ef2b6a44bc..baab1a4af6eda6d9452310f95bf9b379286f0f6c 100644
--- a/src/plugins/from/gui/from_register_gui.mli
+++ b/src/plugins/from/gui/from_register_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/GSourceView.ml b/src/plugins/gui/GSourceView.ml
index 99b336c92d2636a5664d8d45041629a8cce75ce0..4fffe8de2f87262410d8e73924bab1249cf1df6f 100644
--- a/src/plugins/gui/GSourceView.ml
+++ b/src/plugins/gui/GSourceView.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/GSourceView.mli b/src/plugins/gui/GSourceView.mli
index b5ccadfc62cf5cbc8addd5267c124a2d4d6e88f4..160c95d9bd8b207363e4dbb559733d02d5885fbd 100644
--- a/src/plugins/gui/GSourceView.mli
+++ b/src/plugins/gui/GSourceView.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/analyses_manager.ml b/src/plugins/gui/analyses_manager.ml
index 6bfc77e2fc3dc06b7bda3a78bbf8437495f1998e..3829394d682adb1b1f64c7d8c66a485927b2850f 100644
--- a/src/plugins/gui/analyses_manager.ml
+++ b/src/plugins/gui/analyses_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/analyses_manager.mli b/src/plugins/gui/analyses_manager.mli
index 1d0f25a886ea6cee40f8a686c691359cfcb397e1..700472eb28422cd14d7c950b807eb15d1f81948a 100644
--- a/src/plugins/gui/analyses_manager.mli
+++ b/src/plugins/gui/analyses_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/book_manager.ml b/src/plugins/gui/book_manager.ml
index 7eb5c3c9fd2eaca4abf668cae7154da913fe61ca..7c793614b58ea2f1552a1a3281ce65d10d2d70e0 100644
--- a/src/plugins/gui/book_manager.ml
+++ b/src/plugins/gui/book_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/book_manager.mli b/src/plugins/gui/book_manager.mli
index f82233441d138cd622135c612983e8e15a5d6567..2fa34638a03e03677c17cf09d44dfd5d8bdcc9ec 100644
--- a/src/plugins/gui/book_manager.mli
+++ b/src/plugins/gui/book_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/design.ml b/src/plugins/gui/design.ml
index a86b95b86cee8f229072c1a88fc6493f94910330..2196841e685c48c15c9ec87af00fd711069f4c63 100644
--- a/src/plugins/gui/design.ml
+++ b/src/plugins/gui/design.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/design.mli b/src/plugins/gui/design.mli
index 36f07f7edd75ad2651497afb7f955ebb252ab533..abb4998badbd0f470765fe703919cb2cddf40007 100644
--- a/src/plugins/gui/design.mli
+++ b/src/plugins/gui/design.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/dune b/src/plugins/gui/dune
index eb4fd75ad7130dcc2296fab28e96f71f65fc8e59..ba749af4bae282fbfde8b604455900ae37863540 100644
--- a/src/plugins/gui/dune
+++ b/src/plugins/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/gui/file_manager.ml b/src/plugins/gui/file_manager.ml
index 3feaf60108f06f9b067ea54e0e8336325c0c3973..d4350180008950254e31edbd5f6b9f0ac8752c15 100644
--- a/src/plugins/gui/file_manager.ml
+++ b/src/plugins/gui/file_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/file_manager.mli b/src/plugins/gui/file_manager.mli
index 1d0f25a886ea6cee40f8a686c691359cfcb397e1..700472eb28422cd14d7c950b807eb15d1f81948a 100644
--- a/src/plugins/gui/file_manager.mli
+++ b/src/plugins/gui/file_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/filetree.ml b/src/plugins/gui/filetree.ml
index 5ec96ea7e73a925c192b3252ee12df04a15d08ba..ad6f63a75dff74eea5382461785a8619cd133c95 100644
--- a/src/plugins/gui/filetree.ml
+++ b/src/plugins/gui/filetree.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/filetree.mli b/src/plugins/gui/filetree.mli
index e84fac7c34f812293d8d6a57bfa2241903115b74..36c4896d120d75ab0568ab72dad418f326f56978 100644
--- a/src/plugins/gui/filetree.mli
+++ b/src/plugins/gui/filetree.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/gtk_form.ml b/src/plugins/gui/gtk_form.ml
index 3efd86030140b9fffe16530af207110cfc4b251f..95432be291adc3c1691875025fe31fe057b0a12c 100644
--- a/src/plugins/gui/gtk_form.ml
+++ b/src/plugins/gui/gtk_form.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/gtk_form.mli b/src/plugins/gui/gtk_form.mli
index a425839ac824cf5a81e69931dfed672de7d87937..83e38c9c3a25a15d9ec606d567f3fbbd7226788a 100644
--- a/src/plugins/gui/gtk_form.mli
+++ b/src/plugins/gui/gtk_form.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/gtk_helper.ml b/src/plugins/gui/gtk_helper.ml
index 2e3c67a9ca38abe45e53408ccef3fbf2988370be..3bf2e03f8aef733f744e9f5c40337d28175ee448 100644
--- a/src/plugins/gui/gtk_helper.ml
+++ b/src/plugins/gui/gtk_helper.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/gtk_helper.mli b/src/plugins/gui/gtk_helper.mli
index 9a3934518ec91db91094662c6a10816a6aa44972..44a1857a14e77f9ba5d7c0d1bdbada2e3263dc2a 100644
--- a/src/plugins/gui/gtk_helper.mli
+++ b/src/plugins/gui/gtk_helper.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/gui_parameters.ml b/src/plugins/gui/gui_parameters.ml
index 46face452dcefa6f209fa945f895161089ed8ee9..70882c2143ae26620c0dfb60a8e94b116ef114a1 100644
--- a/src/plugins/gui/gui_parameters.ml
+++ b/src/plugins/gui/gui_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/gui_parameters.mli b/src/plugins/gui/gui_parameters.mli
index 48642b0f3fb0a1800e8ca9c38651623a7aedb122..ecc785aeda042a503c414c139ff8c92ec2d89e3a 100644
--- a/src/plugins/gui/gui_parameters.mli
+++ b/src/plugins/gui/gui_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/gui_printers.ml b/src/plugins/gui/gui_printers.ml
index ab2135054051d9a777170bdc0300816910134eee..9ea024778278299e9579bc9d32054493d3058a1f 100644
--- a/src/plugins/gui/gui_printers.ml
+++ b/src/plugins/gui/gui_printers.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/gui_printers.mli b/src/plugins/gui/gui_printers.mli
index a736d7a27f3dcbc8c61aa69fcf1751353be4d79f..cefc1a9ba7c5bc175fe5ac9a86fc82fa7f23f512 100644
--- a/src/plugins/gui/gui_printers.mli
+++ b/src/plugins/gui/gui_printers.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/help_manager.ml b/src/plugins/gui/help_manager.ml
index 0ac0ab6798b22bfc04ea81c49090ad2190cd248a..8d8e9732f9608c203d1b12a0911028b19da2b25a 100644
--- a/src/plugins/gui/help_manager.ml
+++ b/src/plugins/gui/help_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -26,11 +26,13 @@ let show main_ui =
     "Thibaud Antignac";
     "Gergö Barany";
     "Patrick Baudin";
+    "Nicolas Bellec";
     "Thibaut Benjamin";
     "Allan Blanchard";
     "Lionel Blatter";
     "François Bobot";
     "Richard Bonichon";
+    "Vincent Botbol";
     "Quentin Bouillaguet";
     "David Bühler";
     "Zakaria Chihani";
@@ -44,6 +46,7 @@ let show main_ui =
     "Maxime Jacquemin";
     "Florent Kirchner";
     "Alexander Kogtenkov";
+    "Remi Lazarini";
     "Tristan Le Gall";
     "Jean-Christophe Léchenet";
     "Matthieu Lemerre";
diff --git a/src/plugins/gui/help_manager.mli b/src/plugins/gui/help_manager.mli
index 1d0f25a886ea6cee40f8a686c691359cfcb397e1..700472eb28422cd14d7c950b807eb15d1f81948a 100644
--- a/src/plugins/gui/help_manager.mli
+++ b/src/plugins/gui/help_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/history.ml b/src/plugins/gui/history.ml
index 281c9345adbfe77d553aa2ce020e3a52e2b8683f..dac46077e4909aa8e2cb30f5b906e85e99bc4565 100644
--- a/src/plugins/gui/history.ml
+++ b/src/plugins/gui/history.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/history.mli b/src/plugins/gui/history.mli
index 64d13d1946c302f1b1b93bcc401f1ad547db5546..7bf0bc48012e5b5ca747dfc72ec9b01a657d724c 100644
--- a/src/plugins/gui/history.mli
+++ b/src/plugins/gui/history.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/launcher.ml b/src/plugins/gui/launcher.ml
index 00b716d11b7fbe22d41970655c82f6aae69c8192..9887e42c08a56385c0b1c10efebd881edade4afe 100644
--- a/src/plugins/gui/launcher.ml
+++ b/src/plugins/gui/launcher.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/launcher.mli b/src/plugins/gui/launcher.mli
index 78da33b0c82639886472644eb3c2d0da785b088d..36f91a7153d61373d3189f7d99d3681fcd7b2645 100644
--- a/src/plugins/gui/launcher.mli
+++ b/src/plugins/gui/launcher.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/menu_manager.ml b/src/plugins/gui/menu_manager.ml
index 56e64e53e6ade951ef9d5412d74de1c729815ca4..c6f5c34fa6d9b424f82fa3d28d624ab0829459ae 100644
--- a/src/plugins/gui/menu_manager.ml
+++ b/src/plugins/gui/menu_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/menu_manager.mli b/src/plugins/gui/menu_manager.mli
index 4e42305d41d4f201f730d45f14541ec958266f0d..4fb77a6a84d862b45119461b55777d58d43beba9 100644
--- a/src/plugins/gui/menu_manager.mli
+++ b/src/plugins/gui/menu_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/pretty_source.ml b/src/plugins/gui/pretty_source.ml
index 60293a2379d7727fc783a6061b85c4e5ebc778ed..337dd2a673bf23c11d799913da03feadcd501cf5 100644
--- a/src/plugins/gui/pretty_source.ml
+++ b/src/plugins/gui/pretty_source.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/pretty_source.mli b/src/plugins/gui/pretty_source.mli
index 81d8fa012082c414d03f8d5ff48f4820a6b95440..7a5b962f6519578329e36075a7df39dd6d005378 100644
--- a/src/plugins/gui/pretty_source.mli
+++ b/src/plugins/gui/pretty_source.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/project_manager.ml b/src/plugins/gui/project_manager.ml
index 01042b69bb17f1e9307bad71c2df382a76ba2933..b459366ef79fa0acbda953d09f595170397df02a 100644
--- a/src/plugins/gui/project_manager.ml
+++ b/src/plugins/gui/project_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/project_manager.mli b/src/plugins/gui/project_manager.mli
index 7ca91d28d34f745a87b326c09fed40ed51bad160..b07bfd72dac411425ba94b333c3c2f397566a2ef 100644
--- a/src/plugins/gui/project_manager.mli
+++ b/src/plugins/gui/project_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/property_navigator.ml b/src/plugins/gui/property_navigator.ml
index a873fdbf6f894e4b03faea6bdaded41d0c61d0da..1381ced216afa36c447485daceaa6e24e8c3af73 100644
--- a/src/plugins/gui/property_navigator.ml
+++ b/src/plugins/gui/property_navigator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/property_navigator.mli b/src/plugins/gui/property_navigator.mli
index b8f2fc66543cdb1ae01fa0d9cf9c889628d19554..ae9ad7935cadd44f47b695b0f58a957e3a131b73 100644
--- a/src/plugins/gui/property_navigator.mli
+++ b/src/plugins/gui/property_navigator.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/source_manager.ml b/src/plugins/gui/source_manager.ml
index fbac7ffa49a7bb78905c8757a4a0f4160970a345..e1d65a547e505f92bba89ff78759222375d98e4b 100644
--- a/src/plugins/gui/source_manager.ml
+++ b/src/plugins/gui/source_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/source_manager.mli b/src/plugins/gui/source_manager.mli
index 53279bde43868c7c8d96cf88a987476eb04993c3..55b0d7761384e50379128040ab032e2f48df3f6d 100644
--- a/src/plugins/gui/source_manager.mli
+++ b/src/plugins/gui/source_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/source_viewer.ml b/src/plugins/gui/source_viewer.ml
index 09637e94ef98a2ddc3236437d07d7449255e290a..94c280c739d14003d62fe22c14356b57c325df0a 100644
--- a/src/plugins/gui/source_viewer.ml
+++ b/src/plugins/gui/source_viewer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/source_viewer.mli b/src/plugins/gui/source_viewer.mli
index 1197599fcb95370d5cffc3ad519c666a55eb0998..77b28554106f7f0010f591ec28491de2bf32752d 100644
--- a/src/plugins/gui/source_viewer.mli
+++ b/src/plugins/gui/source_viewer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/warning_manager.ml b/src/plugins/gui/warning_manager.ml
index 5e3276074b607ebeae5b6e99de9b1627f1dfede4..fa855eae937590f56301cd3894b77beab6f03f17 100644
--- a/src/plugins/gui/warning_manager.ml
+++ b/src/plugins/gui/warning_manager.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/warning_manager.mli b/src/plugins/gui/warning_manager.mli
index 8c860707a4073bf8b04e26df073ebaafff28fcb7..c09ed0ee2fd9e607cedb92a020fd8e6528e43bc8 100644
--- a/src/plugins/gui/warning_manager.mli
+++ b/src/plugins/gui/warning_manager.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wbox.ml b/src/plugins/gui/wbox.ml
index fa0d9dea19e0c1e021d4d4cbda74007b6d15cddc..936134cd6d60b94f8dc8e80e78b3dcef8358bc96 100644
--- a/src/plugins/gui/wbox.ml
+++ b/src/plugins/gui/wbox.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wbox.mli b/src/plugins/gui/wbox.mli
index bc1bb3775a724d36c96aa73682741597d825e16e..653fea88442ea0f0e44352fa37211ad1ff897e00 100644
--- a/src/plugins/gui/wbox.mli
+++ b/src/plugins/gui/wbox.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wfile.ml b/src/plugins/gui/wfile.ml
index e3b2cc745f864a75eebe2eac12e69f8ca7f1364c..726be52501315e37c00e2032c0c475d7f1ef693a 100644
--- a/src/plugins/gui/wfile.ml
+++ b/src/plugins/gui/wfile.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wfile.mli b/src/plugins/gui/wfile.mli
index 729a14cda393545c6873218eec4c07ed8f04205c..5d8877a15ce347e5d306757e6f615ef3ddaac020 100644
--- a/src/plugins/gui/wfile.mli
+++ b/src/plugins/gui/wfile.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/widget.ml b/src/plugins/gui/widget.ml
index 9152074e634ad59213b3cda247dc6eece8d9886e..01698c1cadeab802430668ce08867dbb4a3635b6 100644
--- a/src/plugins/gui/widget.ml
+++ b/src/plugins/gui/widget.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/widget.mli b/src/plugins/gui/widget.mli
index cf9d02a10f2bfcf54621147279743881ab737a05..7d4bc61dffd2d1b7cd7a3ce224ba1f3687a0228c 100644
--- a/src/plugins/gui/widget.mli
+++ b/src/plugins/gui/widget.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wpalette.ml b/src/plugins/gui/wpalette.ml
index c8ced139f2d3735984c055b70aa8b9ba4330fbf2..3658f84bd8ce9f8f10f455e21306a742eb0971f0 100644
--- a/src/plugins/gui/wpalette.ml
+++ b/src/plugins/gui/wpalette.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wpalette.mli b/src/plugins/gui/wpalette.mli
index c74caf14add112b746f9f8d87b3c39ce8ecfb79e..278f86b61b37cbbfdc1df940c79a6d56fbd983bc 100644
--- a/src/plugins/gui/wpalette.mli
+++ b/src/plugins/gui/wpalette.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wpane.ml b/src/plugins/gui/wpane.ml
index 96705b4857681e7bb35dc91f1156293d668a89b0..d407a0bc7ce90184e65e39fa7e0e762f126c535d 100644
--- a/src/plugins/gui/wpane.ml
+++ b/src/plugins/gui/wpane.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wpane.mli b/src/plugins/gui/wpane.mli
index 832d0f07e22a6386a7f033d7d50ea8abf8b94f8a..4314a54a8eb574575d24b0f31e2c535766d18956 100644
--- a/src/plugins/gui/wpane.mli
+++ b/src/plugins/gui/wpane.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wtable.ml b/src/plugins/gui/wtable.ml
index 12d29beba3a4c04f15b163ee98b22299e0d59a14..4ec9c1137e2ccd8bb5758ef415761ad658edde21 100644
--- a/src/plugins/gui/wtable.ml
+++ b/src/plugins/gui/wtable.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wtable.mli b/src/plugins/gui/wtable.mli
index a1e17b30acb4d0ffe1c9269f40aa576dcb671123..c38e69a83c1aeb85c26aeb352e0b591c7dfe39b0 100644
--- a/src/plugins/gui/wtable.mli
+++ b/src/plugins/gui/wtable.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wtext.ml b/src/plugins/gui/wtext.ml
index d048fb17b3dab8988ff49ae77f04e907e1014178..82c325db504561fc6d3e00fe25a9e0334533ac26 100644
--- a/src/plugins/gui/wtext.ml
+++ b/src/plugins/gui/wtext.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wtext.mli b/src/plugins/gui/wtext.mli
index c9877ad16d9db63017211b43d802624ca4cf0915..676f613477170b4eb122c91582869c1fdf8eca4a 100644
--- a/src/plugins/gui/wtext.mli
+++ b/src/plugins/gui/wtext.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wutil.ml b/src/plugins/gui/wutil.ml
index e0f404a42ce0d7abf8b4f3dbf3f77fb34dbd5ac5..c582a666057401ee34ee3603e8331cb23483052c 100644
--- a/src/plugins/gui/wutil.ml
+++ b/src/plugins/gui/wutil.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wutil.mli b/src/plugins/gui/wutil.mli
index ed03d90a6a172b2cf44df4c1e2a975c5ecf5e649..e1484e53394f0c50931f4d4a20bb050ed06e4b18 100644
--- a/src/plugins/gui/wutil.mli
+++ b/src/plugins/gui/wutil.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wutil_once.ml b/src/plugins/gui/wutil_once.ml
index d09654f8cf7733d4477feb9c7cb7e20cd501ade8..89c89615dae11ed58992037b0f94b1504a15ddbd 100644
--- a/src/plugins/gui/wutil_once.ml
+++ b/src/plugins/gui/wutil_once.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/gui/wutil_once.mli b/src/plugins/gui/wutil_once.mli
index ba7274baf27d8b230729d44009c9a0b4685c07ef..8754c8451acc4228da94cfde1e9872d8610c126f 100644
--- a/src/plugins/gui/wutil_once.mli
+++ b/src/plugins/gui/wutil_once.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/compute_impact.ml b/src/plugins/impact/compute_impact.ml
index e92cbe6a932f02cab388b78e95db27681ecc3a46..d0a5da3a64cfff9e06d15d7ba3453ddd22b3f763 100644
--- a/src/plugins/impact/compute_impact.ml
+++ b/src/plugins/impact/compute_impact.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/compute_impact.mli b/src/plugins/impact/compute_impact.mli
index ab1244b8157e901a06712fdfd77fed3652e7edec..1076c997d396c5a5ec33ef596e11559687009151 100644
--- a/src/plugins/impact/compute_impact.mli
+++ b/src/plugins/impact/compute_impact.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/dune b/src/plugins/impact/dune
index 418b94fb5eb56c55e22551ccddcb85f2a336d41b..42d4ed696f7714cbe94f497ac4b7137b656a9b9e 100644
--- a/src/plugins/impact/dune
+++ b/src/plugins/impact/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/impact/dune-project b/src/plugins/impact/dune-project
index e57a1918542599f084a41d62a8a010036629d2f7..1dc154b6a28651879a9b4c0e7ff304c184398321 100644
--- a/src/plugins/impact/dune-project
+++ b/src/plugins/impact/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/impact/gui/dune b/src/plugins/impact/gui/dune
index 869309c1a703eac94a6f435c3e1239b464ba23c4..77cfeab94c3b2fd38cdcb4dcd88cc0e67c1415eb 100644
--- a/src/plugins/impact/gui/dune
+++ b/src/plugins/impact/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/impact/gui/register_gui.ml b/src/plugins/impact/gui/register_gui.ml
index 640c23d7428cbb0f2a4283a84be9f1ca947e1284..6426179a8087f8a1b92a6110c2e0414b70b7d6d5 100644
--- a/src/plugins/impact/gui/register_gui.ml
+++ b/src/plugins/impact/gui/register_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/gui/register_gui.mli b/src/plugins/impact/gui/register_gui.mli
index f3b366cb4ea8ce3001538a7f2e3f2101bd9fc021..fa6dd5e2ed5c931ded530977717c57b75a349040 100644
--- a/src/plugins/impact/gui/register_gui.mli
+++ b/src/plugins/impact/gui/register_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/options.ml b/src/plugins/impact/options.ml
index 44ead580c0f003c885621fc4c3ddb1be077dc510..8a089142eacd52f3e7379a24076a5541d0caa22c 100644
--- a/src/plugins/impact/options.ml
+++ b/src/plugins/impact/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/options.mli b/src/plugins/impact/options.mli
index 59b3397809964c1434d79a570cc431bc24917154..faebc35aff1a9f310d38823113c0ed597ed7f600 100644
--- a/src/plugins/impact/options.mli
+++ b/src/plugins/impact/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/pdg_aux.ml b/src/plugins/impact/pdg_aux.ml
index 290979130415c3c1cb9b92426d5017c95b0c8862..df335158b96b465786660fcfadaa8e4fa40da997 100644
--- a/src/plugins/impact/pdg_aux.ml
+++ b/src/plugins/impact/pdg_aux.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/pdg_aux.mli b/src/plugins/impact/pdg_aux.mli
index a226b0ee8a0b68c13fd7a6a4940bb11af380bab3..81d926e03438bf6b7cb07cba180144c192b1d730 100644
--- a/src/plugins/impact/pdg_aux.mli
+++ b/src/plugins/impact/pdg_aux.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/reason_graph.ml b/src/plugins/impact/reason_graph.ml
index 79eb06b1f53f36d8afb8e1b1957fde90f02201ba..6736da22022fcbcd17bb17f7c118746189a345b2 100644
--- a/src/plugins/impact/reason_graph.ml
+++ b/src/plugins/impact/reason_graph.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/reason_graph.mli b/src/plugins/impact/reason_graph.mli
index b3e31209f576dc60a2f88d37e5b624b583d7465b..903cc2703e5fc3a8e334f3e3ca08896c30d6ffbb 100644
--- a/src/plugins/impact/reason_graph.mli
+++ b/src/plugins/impact/reason_graph.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/register.ml b/src/plugins/impact/register.ml
index 84f9e678d825fb51539fa4cd8e315d30d0b35049..817fae52b385f7c97a31f9f8db5874cfd4fc72b2 100644
--- a/src/plugins/impact/register.ml
+++ b/src/plugins/impact/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/impact/register.mli b/src/plugins/impact/register.mli
index 4c4ac73534d6d9d5cd71ab6e370aebd7422c7b99..35e476eb808dbb9e39c63d5a75ca885ab8057e1d 100644
--- a/src/plugins/impact/register.mli
+++ b/src/plugins/impact/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/Inout.ml b/src/plugins/inout/Inout.ml
index 9eb53af878a48b71db0473a78803356da097be97..7ae6956d81e0d6553b7ad8414cbf9b575a00d890 100644
--- a/src/plugins/inout/Inout.ml
+++ b/src/plugins/inout/Inout.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/Inout.mli b/src/plugins/inout/Inout.mli
index 90a3cb7230ef0a3ef10a40f338f17e4789d2eadd..99d47d0d1551f0a6fd0b128119b6a106339d4577 100644
--- a/src/plugins/inout/Inout.mli
+++ b/src/plugins/inout/Inout.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/context.ml b/src/plugins/inout/context.ml
index 39669b095c4fb343ba72662270204cf5684d46ac..4d4443eb36921da27c0b6b7a5e16652876b7321a 100644
--- a/src/plugins/inout/context.ml
+++ b/src/plugins/inout/context.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/cumulative_analysis.ml b/src/plugins/inout/cumulative_analysis.ml
index 9fd6d8dcfe08947ead6ec1cc3ed539dfc867a6cc..fe7eba811ec90b257007807bf5e84be6c6bde9dd 100644
--- a/src/plugins/inout/cumulative_analysis.ml
+++ b/src/plugins/inout/cumulative_analysis.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/cumulative_analysis.mli b/src/plugins/inout/cumulative_analysis.mli
index edbe9ae2db120ed9264599a27be79b3c49f30fba..afe5b19864f825f1a40a21925c2ac2eeb7047d0c 100644
--- a/src/plugins/inout/cumulative_analysis.mli
+++ b/src/plugins/inout/cumulative_analysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/derefs.ml b/src/plugins/inout/derefs.ml
index 0a1d04589e82846f82e0d9d2ca291eb77bb0f564..ac796e5768644c1b8e26cc05fa2e023f484ae8c0 100644
--- a/src/plugins/inout/derefs.ml
+++ b/src/plugins/inout/derefs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/derefs.mli b/src/plugins/inout/derefs.mli
index 47b1ed0f8338d900486e46d2edbe993d332ef141..7dfcbd2e26b0d844af17b30c6c3da70d0e9d37d9 100644
--- a/src/plugins/inout/derefs.mli
+++ b/src/plugins/inout/derefs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/dune b/src/plugins/inout/dune
index 9ed847d58dca23a18a7d18af687751c14a0516aa..7e8cd0dc2ea96e2785f047b639e833a8b9117740 100644
--- a/src/plugins/inout/dune
+++ b/src/plugins/inout/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/inout/dune-project b/src/plugins/inout/dune-project
index 708209bcf9eff8a97af24c817ecd204579a91734..b2a65fb1d046d01019fbea61a26de30c64a05451 100644
--- a/src/plugins/inout/dune-project
+++ b/src/plugins/inout/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/inout/inout_parameters.ml b/src/plugins/inout/inout_parameters.ml
index c3490e0be0c96694eca4e130e75389f075c11c4e..7afedfb23825dbcecf672c699d9aa2287723d1c2 100644
--- a/src/plugins/inout/inout_parameters.ml
+++ b/src/plugins/inout/inout_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/inout_parameters.mli b/src/plugins/inout/inout_parameters.mli
index 072733bfd9af9606db3dd2d9e922be7780e77cf1..f48967bb81591df1ad23802762587f54c73faa48 100644
--- a/src/plugins/inout/inout_parameters.mli
+++ b/src/plugins/inout/inout_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/inputs.ml b/src/plugins/inout/inputs.ml
index 9ba413e0ebea34503d79d50ba96a490a83484293..9907f7419a2a40868df4bc69923c593548caaf00 100644
--- a/src/plugins/inout/inputs.ml
+++ b/src/plugins/inout/inputs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/inputs.mli b/src/plugins/inout/inputs.mli
index 93148f6a94ee91ca176417a29789b30b1ac6f591..1b902e3b09c4758edc0c2df048a70dae8a248eda 100644
--- a/src/plugins/inout/inputs.mli
+++ b/src/plugins/inout/inputs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/operational_inputs.ml b/src/plugins/inout/operational_inputs.ml
index 74d506662ca0d90cfad653097b3140edffa329d9..3bf289711fed138935db3a7bc2ed26f3941f4fa8 100644
--- a/src/plugins/inout/operational_inputs.ml
+++ b/src/plugins/inout/operational_inputs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/operational_inputs.mli b/src/plugins/inout/operational_inputs.mli
index 2a545e374ea6d2b90328be4d2f8496802a788de4..ec07eb384bf92c4e628d98cfe1c7735a87b9af1e 100644
--- a/src/plugins/inout/operational_inputs.mli
+++ b/src/plugins/inout/operational_inputs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/outputs.ml b/src/plugins/inout/outputs.ml
index ebe3b67fe7d1426bf16c2b1b49b2fc7863959d12..5793f6f4828e75e3fcb389499e3a10f15406ba3c 100644
--- a/src/plugins/inout/outputs.ml
+++ b/src/plugins/inout/outputs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/outputs.mli b/src/plugins/inout/outputs.mli
index 192edda7fa5ee3c80f93d96fdf0afe495204402b..1e22ce0540950555d61f0bf131cf334dfb6ccd00 100644
--- a/src/plugins/inout/outputs.mli
+++ b/src/plugins/inout/outputs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/register.ml b/src/plugins/inout/register.ml
index f7a1db558c624007a7d82ccc7b1cf2d61bfcb9ec..f1d23cbd6d38dfec899f4945ecc7f76fbdd0df5f 100644
--- a/src/plugins/inout/register.ml
+++ b/src/plugins/inout/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/inout/register.mli b/src/plugins/inout/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/inout/register.mli
+++ b/src/plugins/inout/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/Instantiate.ml b/src/plugins/instantiate/Instantiate.ml
index 2899be24b28edadbdbd387b25e1cb0870ea643be..ef9de2ac52d563772c2ae7dd088732042a4a0f6c 100644
--- a/src/plugins/instantiate/Instantiate.ml
+++ b/src/plugins/instantiate/Instantiate.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/basic_blocks.ml b/src/plugins/instantiate/basic_blocks.ml
index 1c2e228bfd3719f8a50fbdb5f189f32d83063b9c..3d70d7f617a6ba3719456beaab99260615862625 100644
--- a/src/plugins/instantiate/basic_blocks.ml
+++ b/src/plugins/instantiate/basic_blocks.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/basic_blocks.mli b/src/plugins/instantiate/basic_blocks.mli
index a94338f32876c209d3d54112990277639bbe8e18..7ce010e832c418450ef9a19bdd5eb941226bba93 100644
--- a/src/plugins/instantiate/basic_blocks.mli
+++ b/src/plugins/instantiate/basic_blocks.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/dune b/src/plugins/instantiate/dune
index d98fd93169c94947cde040c491a98b5bbf077b8f..5056e684c1617b71ec08efcdd6376cba972619a0 100644
--- a/src/plugins/instantiate/dune
+++ b/src/plugins/instantiate/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/instantiate/dune-project b/src/plugins/instantiate/dune-project
index 5e7a37b0b996135e340c88e5c8fad9231eaaaad2..1090af6cdb29545a6d4f0fd3156c689848391d54 100644
--- a/src/plugins/instantiate/dune-project
+++ b/src/plugins/instantiate/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/instantiate/global_context.ml b/src/plugins/instantiate/global_context.ml
index c48802ba74273d601e294059d137cdd30e98cb7e..f65579ea5f8da2e3e18462728a0bf92e7625ae10 100644
--- a/src/plugins/instantiate/global_context.ml
+++ b/src/plugins/instantiate/global_context.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/global_context.mli b/src/plugins/instantiate/global_context.mli
index b87fcc396850e6ef78fe0df27f79286324660a20..14cb731d18c215acc3a7903c3ec5e8bf961e671c 100644
--- a/src/plugins/instantiate/global_context.mli
+++ b/src/plugins/instantiate/global_context.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/instantiator_builder.ml b/src/plugins/instantiate/instantiator_builder.ml
index 3b918bd648defef0afdfb82df4db1b26976df845..7c327aa3c4cf33fd97a40f85b1d8abd621bab5d3 100644
--- a/src/plugins/instantiate/instantiator_builder.ml
+++ b/src/plugins/instantiate/instantiator_builder.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/instantiator_builder.mli b/src/plugins/instantiate/instantiator_builder.mli
index d8c77f5e02941443259ebb19ff4dbc5517978267..e0f1e00ab2a71690cfc6fa393fb483ea58e3a3c7 100644
--- a/src/plugins/instantiate/instantiator_builder.mli
+++ b/src/plugins/instantiate/instantiator_builder.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/options.ml b/src/plugins/instantiate/options.ml
index 5ff1b44031079d3002a66815f2fddcfdf76d42c1..14531912904c4252dc4a186d4942d3575229a423 100644
--- a/src/plugins/instantiate/options.ml
+++ b/src/plugins/instantiate/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/options.mli b/src/plugins/instantiate/options.mli
index 7393d7716624130bd5983c32e30e1aeb91ad5b6b..80ea5c0cfa3f4bf07bb9f5c7e4a42eeda74c89b6 100644
--- a/src/plugins/instantiate/options.mli
+++ b/src/plugins/instantiate/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/register.ml b/src/plugins/instantiate/register.ml
index 19461a70748203ed37fa5e2a88550fa6ad9da8df..4e0d4debe1cec646e20d5f5d1b0930b3eddf8be5 100644
--- a/src/plugins/instantiate/register.ml
+++ b/src/plugins/instantiate/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/register.mli b/src/plugins/instantiate/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/instantiate/register.mli
+++ b/src/plugins/instantiate/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/stdlib/basic_alloc.ml b/src/plugins/instantiate/stdlib/basic_alloc.ml
index 53d7684bf045fc1e2224e8ee5319e29433332b46..1f60ce6bf972665d5d15c99fb4753d58d81328f9 100644
--- a/src/plugins/instantiate/stdlib/basic_alloc.ml
+++ b/src/plugins/instantiate/stdlib/basic_alloc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/stdlib/basic_alloc.mli b/src/plugins/instantiate/stdlib/basic_alloc.mli
index bd2eb4d7f0315ff4d9581603914128f781851d6b..4843394fb3a5d732b72cb11bff474000b643ba79 100644
--- a/src/plugins/instantiate/stdlib/basic_alloc.mli
+++ b/src/plugins/instantiate/stdlib/basic_alloc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/stdlib/calloc.ml b/src/plugins/instantiate/stdlib/calloc.ml
index 7303518b5482f1aa1a6bccfc2efa8e8b9e9c9d49..67d72daa2fff3155724d2c001b94767245643389 100644
--- a/src/plugins/instantiate/stdlib/calloc.ml
+++ b/src/plugins/instantiate/stdlib/calloc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/stdlib/calloc.mli b/src/plugins/instantiate/stdlib/calloc.mli
index 2a77e4523d14bd0cc7b06d2e29e26a0580affa17..747b2ca3cce337fd15ccf591ff93ca26230e89a4 100644
--- a/src/plugins/instantiate/stdlib/calloc.mli
+++ b/src/plugins/instantiate/stdlib/calloc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/stdlib/free.ml b/src/plugins/instantiate/stdlib/free.ml
index 101c9cd054ddd7d3a62bf86ef146d6b3a115275a..8abebd80974c2ec16ecaef8d2271f80b391d4850 100644
--- a/src/plugins/instantiate/stdlib/free.ml
+++ b/src/plugins/instantiate/stdlib/free.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/stdlib/free.mli b/src/plugins/instantiate/stdlib/free.mli
index 034505b401b1fc87ea575e85f9c5bbbb23db0e55..48b34e8bdd1d08ae1b4223cc65e0ac1a92a53925 100644
--- a/src/plugins/instantiate/stdlib/free.mli
+++ b/src/plugins/instantiate/stdlib/free.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/stdlib/malloc.ml b/src/plugins/instantiate/stdlib/malloc.ml
index 80b9deec7da94ebbf8ceba2ba0daa09131be1e54..af178fe34976bf6377921b48a18764cceea4507a 100644
--- a/src/plugins/instantiate/stdlib/malloc.ml
+++ b/src/plugins/instantiate/stdlib/malloc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/stdlib/malloc.mli b/src/plugins/instantiate/stdlib/malloc.mli
index 204aeddde41d0830207ef10bd0e285f1c3e8fdeb..df6b7399c646967b31e6e018c518c1b43c6df5dc 100644
--- a/src/plugins/instantiate/stdlib/malloc.mli
+++ b/src/plugins/instantiate/stdlib/malloc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/mem_utils.ml b/src/plugins/instantiate/string/mem_utils.ml
index 356a1f1a89032c0a51e06857fee0b84234ddf926..c92702884be2fc130b0777b7a6334b3d78060a70 100644
--- a/src/plugins/instantiate/string/mem_utils.ml
+++ b/src/plugins/instantiate/string/mem_utils.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/mem_utils.mli b/src/plugins/instantiate/string/mem_utils.mli
index c560397794d9a4625e0eb829b044209c30e9f4cf..b2a756db594624dd02b169e2f3d16b322edc66f2 100644
--- a/src/plugins/instantiate/string/mem_utils.mli
+++ b/src/plugins/instantiate/string/mem_utils.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/memcmp.ml b/src/plugins/instantiate/string/memcmp.ml
index b23dbef1acd45c2ed8bd811adce2273f4e4bda51..2511b81ebe748bc3243f9dd3031e5e61a3618287 100644
--- a/src/plugins/instantiate/string/memcmp.ml
+++ b/src/plugins/instantiate/string/memcmp.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/memcmp.mli b/src/plugins/instantiate/string/memcmp.mli
index 3eb857a1e8b08e316444e27e9f9f1ac00928f337..96e8881cec9554e48849672da5f4194a164ce34a 100644
--- a/src/plugins/instantiate/string/memcmp.mli
+++ b/src/plugins/instantiate/string/memcmp.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/memcpy.ml b/src/plugins/instantiate/string/memcpy.ml
index 756e3fcbe16049670520e4c5ac7780c30b050a7d..a255e28deccd49f2329dbc61530da55e1ade712f 100644
--- a/src/plugins/instantiate/string/memcpy.ml
+++ b/src/plugins/instantiate/string/memcpy.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/memcpy.mli b/src/plugins/instantiate/string/memcpy.mli
index 5d1cc596d0872df73f879764f95268d45c3f1cfb..2b6a7b8fababe60b3599e1931bbdbc058e304ae5 100644
--- a/src/plugins/instantiate/string/memcpy.mli
+++ b/src/plugins/instantiate/string/memcpy.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/memmove.ml b/src/plugins/instantiate/string/memmove.ml
index a2113bb3fba377b3ad0ec590b34f019b0d35d54c..fdfe6d4569689efddc7c86787f0c2433c7f6e4a7 100644
--- a/src/plugins/instantiate/string/memmove.ml
+++ b/src/plugins/instantiate/string/memmove.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/memmove.mli b/src/plugins/instantiate/string/memmove.mli
index ff457dc9fc0c0ff24f5ceecac4c2ce892a88702c..97d463ee60fe0cbc11569893618da437a789c775 100644
--- a/src/plugins/instantiate/string/memmove.mli
+++ b/src/plugins/instantiate/string/memmove.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/memset.ml b/src/plugins/instantiate/string/memset.ml
index fa5f1ad68fc2f0d459938fbdbfb979e887bf09ad..93c437176ed27e2ed9a81ed8d029da59983f03d2 100644
--- a/src/plugins/instantiate/string/memset.ml
+++ b/src/plugins/instantiate/string/memset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/string/memset.mli b/src/plugins/instantiate/string/memset.mli
index e835a2fc96e7695f80860b0ba662d5f5b6d5d572..bc598dceeac17b0d39a73c4da6e2df22cd232953 100644
--- a/src/plugins/instantiate/string/memset.mli
+++ b/src/plugins/instantiate/string/memset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/transform.ml b/src/plugins/instantiate/transform.ml
index 3310e454ec3de0298e160b8b621c3671a410aaf7..4e339fbd286d9f5e6bbd5d274af5a39576324508 100644
--- a/src/plugins/instantiate/transform.ml
+++ b/src/plugins/instantiate/transform.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/instantiate/transform.mli b/src/plugins/instantiate/transform.mli
index b35c9c249147387d338ca1305d5b1e5771d25015..56c3d62c5455434aa4f323eeb83faa92b0284a05 100644
--- a/src/plugins/instantiate/transform.mli
+++ b/src/plugins/instantiate/transform.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/LoopAnalysis.ml b/src/plugins/loop_analysis/LoopAnalysis.ml
index cf5309fab0102c9e8de267ea42d3a4ed42a371f9..42b3d8b2fabec03381c66a0849a0f84d246172b4 100644
--- a/src/plugins/loop_analysis/LoopAnalysis.ml
+++ b/src/plugins/loop_analysis/LoopAnalysis.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/LoopAnalysis.mli b/src/plugins/loop_analysis/LoopAnalysis.mli
index 4ed2d8d03e6f9bf3af1e7ad1f8a52b236f28f379..e5f8fba4b78cd4876e72dc854081144cefc2cc2f 100644
--- a/src/plugins/loop_analysis/LoopAnalysis.mli
+++ b/src/plugins/loop_analysis/LoopAnalysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/dune b/src/plugins/loop_analysis/dune
index 266477032f1b50f9c79653a9cdc2fb5f62b56285..79642b0d4715211a9d9034215b10ef5ee8b73c8d 100644
--- a/src/plugins/loop_analysis/dune
+++ b/src/plugins/loop_analysis/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/loop_analysis/dune-project b/src/plugins/loop_analysis/dune-project
index f12cba87ca3025e3c1307592baae834879a37985..f9f3ca449042090b12e17b9a383411210bbe8db4 100644
--- a/src/plugins/loop_analysis/dune-project
+++ b/src/plugins/loop_analysis/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/loop_analysis/loop_analysis.ml b/src/plugins/loop_analysis/loop_analysis.ml
index 90481b13789fd6bfbcae4aeca2f6bbb738029a1d..8c3db519c41b1be3d13be11654ed080fe05ca5b9 100644
--- a/src/plugins/loop_analysis/loop_analysis.ml
+++ b/src/plugins/loop_analysis/loop_analysis.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/loop_analysis.mli b/src/plugins/loop_analysis/loop_analysis.mli
index 10293c183b8e80b514b923aae0d41c3c6b2ca418..958885b8ba7838b028e5cd3934e42c869bc8c496 100644
--- a/src/plugins/loop_analysis/loop_analysis.mli
+++ b/src/plugins/loop_analysis/loop_analysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/options.ml b/src/plugins/loop_analysis/options.ml
index 9991dec3bc6f7485ad87b3f5fd1be3e4cee62ca2..8e4ba9dbfe153afe75152ebb0f21958d2fe32515 100644
--- a/src/plugins/loop_analysis/options.ml
+++ b/src/plugins/loop_analysis/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/options.mli b/src/plugins/loop_analysis/options.mli
index 6359441c78445ed5534b92ec166b6871b6796e87..0fe2689682ed9be888a11eb5b9c344bbc2c384ef 100644
--- a/src/plugins/loop_analysis/options.mli
+++ b/src/plugins/loop_analysis/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/region_analysis.ml b/src/plugins/loop_analysis/region_analysis.ml
index 3e4780d9af0c20e217732ea367f9ebb23321483a..4645bfb9f8d5e0395a597521b19f87c99666b587 100644
--- a/src/plugins/loop_analysis/region_analysis.ml
+++ b/src/plugins/loop_analysis/region_analysis.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/region_analysis.mli b/src/plugins/loop_analysis/region_analysis.mli
index 7a0147f86d4dfa21a8c42f66f0409b85e26a2517..c00035fdfa00b22ba52c19dfaf23c79b0742967d 100644
--- a/src/plugins/loop_analysis/region_analysis.mli
+++ b/src/plugins/loop_analysis/region_analysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/region_analysis_sig.ml b/src/plugins/loop_analysis/region_analysis_sig.ml
index 05717d23d98efe092444818b5c2ace05c6147955..77ebe428eb12b4ce56d51299979da1e2111b9fe5 100644
--- a/src/plugins/loop_analysis/region_analysis_sig.ml
+++ b/src/plugins/loop_analysis/region_analysis_sig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/region_analysis_stmt.ml b/src/plugins/loop_analysis/region_analysis_stmt.ml
index b0c90eb7a91d3c2ff302a07fdbc090dfbc674e31..e5d4380e2d1b8ba9edc628b56f396dabdde8989e 100644
--- a/src/plugins/loop_analysis/region_analysis_stmt.ml
+++ b/src/plugins/loop_analysis/region_analysis_stmt.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/region_analysis_stmt.mli b/src/plugins/loop_analysis/region_analysis_stmt.mli
index d78e70b0bb998d17b4f294b336e1d9812ebc74af..08dd25e9cc08a2c45fbbb735d6db91db040feddb 100644
--- a/src/plugins/loop_analysis/region_analysis_stmt.mli
+++ b/src/plugins/loop_analysis/region_analysis_stmt.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/register.ml b/src/plugins/loop_analysis/register.ml
index cc4d6ba366686a4f6dc473ffeb6f5c08b4028aeb..cf268345a17640155429b720ce33568412dd6da3 100644
--- a/src/plugins/loop_analysis/register.ml
+++ b/src/plugins/loop_analysis/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/loop_analysis/register.mli b/src/plugins/loop_analysis/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/loop_analysis/register.mli
+++ b/src/plugins/loop_analysis/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/Mardown_report.ml b/src/plugins/markdown-report/Mardown_report.ml
index 7fb802c6c22aff82f6c35cba7e218259d419fe27..6aab2f3bc50ffb1774a980404af560f560dde415 100644
--- a/src/plugins/markdown-report/Mardown_report.ml
+++ b/src/plugins/markdown-report/Mardown_report.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/dune b/src/plugins/markdown-report/dune
index 58cf7b1d43bef21c0612178cb7d08fa0c0976c03..7630fa3eae78e291ddfc28ef1f510456ffeca432 100644
--- a/src/plugins/markdown-report/dune
+++ b/src/plugins/markdown-report/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/markdown-report/dune-project b/src/plugins/markdown-report/dune-project
index fb784f1e963a30de56a6f9716db3a289ae1d74ff..425dae6ed82d455513f5ea602331a1e36d95ff90 100644
--- a/src/plugins/markdown-report/dune-project
+++ b/src/plugins/markdown-report/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/markdown-report/eva-info/dune b/src/plugins/markdown-report/eva-info/dune
index 6ea5596e04945496f2818323c29efe9eccbc50d5..a7bfa4176198c0a2bd9160384fd10548f41f38ef 100644
--- a/src/plugins/markdown-report/eva-info/dune
+++ b/src/plugins/markdown-report/eva-info/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/markdown-report/eva-info/eva_info.ml b/src/plugins/markdown-report/eva-info/eva_info.ml
index c222d04814668b3725f48dea3d078a5da9accfee..56b7c3046c1036fff7d9763a861f7f68426e1735 100644
--- a/src/plugins/markdown-report/eva-info/eva_info.ml
+++ b/src/plugins/markdown-report/eva-info/eva_info.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/eva-info/eva_info.mli b/src/plugins/markdown-report/eva-info/eva_info.mli
index 078a0e8bae5d42b05eb3290283fd3c94f512040a..909d18e24f3d052f00cc8c11b450d60f5d4a78ce 100644
--- a/src/plugins/markdown-report/eva-info/eva_info.mli
+++ b/src/plugins/markdown-report/eva-info/eva_info.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/md_gen.ml b/src/plugins/markdown-report/md_gen.ml
index 50a13f227f5ea63451cef6cdbaba3b1e13ed5dfb..558d42703c279df255c04c63e272e877897e474a 100644
--- a/src/plugins/markdown-report/md_gen.ml
+++ b/src/plugins/markdown-report/md_gen.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/md_gen.mli b/src/plugins/markdown-report/md_gen.mli
index a04aa82f1835357b49127397027d0b4c1df43745..83b3ef6d898ee6d52d683f3fe3f58f7f16553779 100644
--- a/src/plugins/markdown-report/md_gen.mli
+++ b/src/plugins/markdown-report/md_gen.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/mdr_params.ml b/src/plugins/markdown-report/mdr_params.ml
index cb6ef6bdf21c1ae29d0f248f5901903f4b595c05..91a4df612742e3e7ee331f7e84abbca89a2b8103 100644
--- a/src/plugins/markdown-report/mdr_params.ml
+++ b/src/plugins/markdown-report/mdr_params.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/mdr_params.mli b/src/plugins/markdown-report/mdr_params.mli
index af13ce4b164e70106f24085f0a8e40a4d70b8287..1204afa4a75547e3e9b6691ad6040ce3d0dbb87b 100644
--- a/src/plugins/markdown-report/mdr_params.mli
+++ b/src/plugins/markdown-report/mdr_params.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/mdr_register.ml b/src/plugins/markdown-report/mdr_register.ml
index 24e4880f4565fafdbceaf1ffb39362c6b785a4d7..92b42d399e04b589e8216efee99899235ccd06fb 100644
--- a/src/plugins/markdown-report/mdr_register.ml
+++ b/src/plugins/markdown-report/mdr_register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/mdr_register.mli b/src/plugins/markdown-report/mdr_register.mli
index ff8777243c9ffe5b82464687a825d4ed492d8ef0..06d25084da847c74d3bb16e778631dffef56f536 100644
--- a/src/plugins/markdown-report/mdr_register.mli
+++ b/src/plugins/markdown-report/mdr_register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/parse_remarks.ml b/src/plugins/markdown-report/parse_remarks.ml
index fe4b682958a685ab0e936b733bedecc6ecfc67ec..a5dbb328bcbcad7f2a98a00d8cd22e4cbfbfb8fe 100644
--- a/src/plugins/markdown-report/parse_remarks.ml
+++ b/src/plugins/markdown-report/parse_remarks.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/parse_remarks.mli b/src/plugins/markdown-report/parse_remarks.mli
index eef5b8bcdd4098a169ab7a6a361496588c888ebe..d74356c67b40ac9d42fa5b5993dfbeecc2828ec6 100644
--- a/src/plugins/markdown-report/parse_remarks.mli
+++ b/src/plugins/markdown-report/parse_remarks.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/sarif.ml b/src/plugins/markdown-report/sarif.ml
index 38c77b27f3da08ada8005ca69202ce5fcfd17dcc..1d25de0e8a0192429e4e05d606c4c9c5a7d030c2 100644
--- a/src/plugins/markdown-report/sarif.ml
+++ b/src/plugins/markdown-report/sarif.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/sarif.mli b/src/plugins/markdown-report/sarif.mli
index 172ef319cc1e89d368d9ba46b1a27bb8e3bb90bb..d21b82710d3ef77e6beebf062bcc220a46a203a3 100644
--- a/src/plugins/markdown-report/sarif.mli
+++ b/src/plugins/markdown-report/sarif.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/sarif_gen.ml b/src/plugins/markdown-report/sarif_gen.ml
index a06849d8709b42967ed73a9b5b9fb57c4ca39b46..99b049c7bdd8685f3320218feea97c6ba13ae3af 100644
--- a/src/plugins/markdown-report/sarif_gen.ml
+++ b/src/plugins/markdown-report/sarif_gen.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/sarif_gen.mli b/src/plugins/markdown-report/sarif_gen.mli
index 99143bb6dd9a163d2e8bab68c798a64c4b760354..eb7a67c7c299e037ab6ded8201c209daa610c6b5 100644
--- a/src/plugins/markdown-report/sarif_gen.mli
+++ b/src/plugins/markdown-report/sarif_gen.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/markdown-report/share/acsl.xml b/src/plugins/markdown-report/share/acsl.xml
index 93e73698c31fc165527f5be0a45c0752603df396..2167e52e8051126f6bf6ba8c0b7169e1faeabbb2 100644
--- a/src/plugins/markdown-report/share/acsl.xml
+++ b/src/plugins/markdown-report/share/acsl.xml
@@ -2,7 +2,7 @@
 <!--                                                                        -->
 <!--  This file is part of Frama-C.                                         -->
 <!--                                                                        -->
-<!--  Copyright (C) 2007-2023                                               -->
+<!--  Copyright (C) 2007-2024                                               -->
 <!--    CEA (Commissariat à l'énergie atomique et aux énergies              -->
 <!--         alternatives)                                                  -->
 <!--                                                                        -->
diff --git a/src/plugins/markdown-report/tests/md/oracle/cwe126.res.oracle b/src/plugins/markdown-report/tests/md/oracle/cwe126.res.oracle
index 6355ddcc099d73f8d485c9774e22817ad25360f3..2b4cbb58cf0a423e68464a791e2fd97a3d07386b 100644
--- a/src/plugins/markdown-report/tests/md/oracle/cwe126.res.oracle
+++ b/src/plugins/markdown-report/tests/md/oracle/cwe126.res.oracle
@@ -4,7 +4,7 @@
   
 [eva] cwe126.c:77: allocating variable __malloc_goodG2B_l77
 [eva] using specification for function exit
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] cwe126.c:63: starting to merge loop iterations
 [eva] cwe126.c:41: 
diff --git a/src/plugins/markdown-report/tests/sarif/oracle/std_string.sarif b/src/plugins/markdown-report/tests/sarif/oracle/std_string.sarif
index 222b73c887b5894b5baca53f33eb78a6bea39295..2ed274caed50069db64f90b8bf1524ea7c0a23dd 100644
--- a/src/plugins/markdown-report/tests/sarif/oracle/std_string.sarif
+++ b/src/plugins/markdown-report/tests/sarif/oracle/std_string.sarif
@@ -1157,9 +1157,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 189,
+                  "startLine": 247,
                   "startColumn": 12,
-                  "endLine": 189,
+                  "endLine": 247,
                   "endColumn": 25,
                   "byteLength": 13
                 }
@@ -1180,9 +1180,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 187,
+                  "startLine": 245,
                   "startColumn": 28,
-                  "endLine": 187,
+                  "endLine": 245,
                   "endColumn": 34,
                   "byteLength": 6
                 }
@@ -1203,9 +1203,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 189,
+                  "startLine": 247,
                   "startColumn": 12,
-                  "endLine": 189,
+                  "endLine": 247,
                   "endColumn": 25,
                   "byteLength": 13
                 }
@@ -1226,9 +1226,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 185,
+                  "startLine": 243,
                   "startColumn": 13,
-                  "endLine": 185,
+                  "endLine": 243,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -1251,9 +1251,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 198,
+                  "startLine": 261,
                   "startColumn": 17,
-                  "endLine": 198,
+                  "endLine": 261,
                   "endColumn": 42,
                   "byteLength": 25
                 }
@@ -1276,9 +1276,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 198,
+                  "startLine": 261,
                   "startColumn": 17,
-                  "endLine": 198,
+                  "endLine": 261,
                   "endColumn": 42,
                   "byteLength": 25
                 }
@@ -1301,9 +1301,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 197,
+                  "startLine": 260,
                   "startColumn": 12,
-                  "endLine": 197,
+                  "endLine": 260,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -1326,9 +1326,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 202,
+                  "startLine": 265,
                   "startColumn": 17,
-                  "endLine": 202,
+                  "endLine": 265,
                   "endColumn": 37,
                   "byteLength": 20
                 }
@@ -1351,9 +1351,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 202,
+                  "startLine": 265,
                   "startColumn": 17,
-                  "endLine": 202,
+                  "endLine": 265,
                   "endColumn": 37,
                   "byteLength": 20
                 }
@@ -1376,9 +1376,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 201,
+                  "startLine": 264,
                   "startColumn": 12,
-                  "endLine": 201,
+                  "endLine": 264,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -1401,9 +1401,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 205,
+                  "startLine": 268,
                   "startColumn": 17,
-                  "endLine": 205,
+                  "endLine": 268,
                   "endColumn": 37,
                   "byteLength": 20
                 }
@@ -1426,9 +1426,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 205,
+                  "startLine": 268,
                   "startColumn": 17,
-                  "endLine": 205,
+                  "endLine": 268,
                   "endColumn": 37,
                   "byteLength": 20
                 }
@@ -1451,9 +1451,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 204,
+                  "startLine": 267,
                   "startColumn": 12,
-                  "endLine": 204,
+                  "endLine": 267,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -1476,9 +1476,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 80,
+                  "startLine": 90,
                   "startColumn": 12,
-                  "endLine": 80,
+                  "endLine": 90,
                   "endColumn": 33,
                   "byteLength": 21
                 }
@@ -1499,9 +1499,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 75,
+                  "startLine": 85,
                   "startColumn": 20,
-                  "endLine": 75,
+                  "endLine": 85,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -1522,9 +1522,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 78,
+                  "startLine": 88,
                   "startColumn": 28,
-                  "endLine": 78,
+                  "endLine": 88,
                   "endColumn": 49,
                   "byteLength": 21
                 }
@@ -1547,9 +1547,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 76,
+                  "startLine": 86,
                   "startColumn": 12,
-                  "endLine": 76,
+                  "endLine": 86,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -1572,9 +1572,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 76,
+                  "startLine": 86,
                   "startColumn": 12,
-                  "endLine": 76,
+                  "endLine": 86,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -1597,9 +1597,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 77,
+                  "startLine": 87,
                   "startColumn": 12,
-                  "endLine": 77,
+                  "endLine": 87,
                   "endColumn": 34,
                   "byteLength": 22
                 }
@@ -1622,9 +1622,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 172,
+                  "startLine": 230,
                   "startColumn": 14,
-                  "endLine": 172,
+                  "endLine": 230,
                   "endColumn": 37,
                   "byteLength": 23
                 }
@@ -1636,7 +1636,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "finite." },
+          "message": {
+            "text": "behavior finite in function Frama_C_double_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -1645,11 +1647,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 166,
-                  "startColumn": 21,
-                  "endLine": 166,
-                  "endColumn": 55,
-                  "byteLength": 34
+                  "startLine": 230,
+                  "startColumn": 14,
+                  "endLine": 230,
+                  "endColumn": 37,
+                  "byteLength": 23
                 }
               }
             }
@@ -1659,7 +1661,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": {
+            "text": "behavior infinite_not_nan in function Frama_C_double_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -1668,11 +1672,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 167,
-                  "startColumn": 20,
-                  "endLine": 167,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 230,
+                  "startColumn": 14,
+                  "endLine": 230,
+                  "endColumn": 37,
+                  "byteLength": 23
                 }
               }
             }
@@ -1682,7 +1686,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -1691,11 +1695,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 170,
-                  "startColumn": 28,
-                  "endLine": 170,
-                  "endColumn": 72,
-                  "byteLength": 44
+                  "startLine": 221,
+                  "startColumn": 20,
+                  "endLine": 221,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -1705,9 +1709,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "assigns clause in function Frama_C_double_interval."
-          },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -1716,11 +1718,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 168,
-                  "startColumn": 12,
-                  "endLine": 168,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 226,
+                  "startColumn": 20,
+                  "endLine": 226,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -1730,9 +1732,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function Frama_C_double_interval."
-          },
+          "message": { "text": "finite." },
           "locations": [
             {
               "physicalLocation": {
@@ -1741,11 +1741,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 168,
-                  "startColumn": 12,
-                  "endLine": 168,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 220,
+                  "startColumn": 20,
+                  "endLine": 220,
+                  "endColumn": 54,
+                  "byteLength": 34
                 }
               }
             }
@@ -1755,9 +1755,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_double_interval."
-          },
+          "message": { "text": "infinite." },
           "locations": [
             {
               "physicalLocation": {
@@ -1766,11 +1764,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 169,
-                  "startColumn": 12,
-                  "endLine": 169,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "startLine": 224,
+                  "startColumn": 22,
+                  "endLine": 224,
+                  "endColumn": 60,
+                  "byteLength": 38
                 }
               }
             }
@@ -1780,9 +1778,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function Frama_C_float_interval."
-          },
+          "message": { "text": "not_nan." },
           "locations": [
             {
               "physicalLocation": {
@@ -1791,11 +1787,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 163,
-                  "startColumn": 13,
-                  "endLine": 163,
-                  "endColumn": 35,
-                  "byteLength": 22
+                  "startLine": 225,
+                  "startColumn": 21,
+                  "endLine": 225,
+                  "endColumn": 51,
+                  "byteLength": 30
                 }
               }
             }
@@ -1805,7 +1801,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "finite." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
@@ -1814,11 +1810,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 157,
-                  "startColumn": 21,
-                  "endLine": 157,
-                  "endColumn": 55,
-                  "byteLength": 34
+                  "startLine": 222,
+                  "startColumn": 28,
+                  "endLine": 222,
+                  "endColumn": 72,
+                  "byteLength": 44
                 }
               }
             }
@@ -1828,7 +1824,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
@@ -1837,11 +1833,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 158,
-                  "startColumn": 20,
-                  "endLine": 158,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 227,
+                  "startColumn": 28,
+                  "endLine": 227,
+                  "endColumn": 70,
+                  "byteLength": 42
                 }
               }
             }
@@ -1851,7 +1847,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": {
+            "text": "assigns clause in function Frama_C_double_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -1860,11 +1858,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
-                  "startColumn": 28,
-                  "endLine": 161,
-                  "endColumn": 72,
-                  "byteLength": 44
+                  "startLine": 217,
+                  "startColumn": 10,
+                  "endLine": 217,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -1875,7 +1873,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_float_interval."
+            "text": "from clause of term \\result in function Frama_C_double_interval."
           },
           "locations": [
             {
@@ -1885,10 +1883,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 159,
-                  "startColumn": 12,
-                  "endLine": 159,
-                  "endColumn": 19,
+                  "startLine": 217,
+                  "startColumn": 10,
+                  "endLine": 217,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -1900,7 +1898,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_float_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_double_interval."
           },
           "locations": [
             {
@@ -1910,11 +1908,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 159,
-                  "startColumn": 12,
-                  "endLine": 159,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 218,
+                  "startColumn": 10,
+                  "endLine": 218,
+                  "endColumn": 32,
+                  "byteLength": 22
                 }
               }
             }
@@ -1925,7 +1923,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_float_interval."
+            "text": "disjoint clause in function Frama_C_double_interval."
           },
           "locations": [
             {
@@ -1935,11 +1933,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 160,
-                  "startColumn": 12,
-                  "endLine": 160,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "startLine": 230,
+                  "startColumn": 14,
+                  "endLine": 230,
+                  "endColumn": 37,
+                  "byteLength": 23
                 }
               }
             }
@@ -1950,7 +1948,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_int_interval."
+            "text": "behavior default! in function Frama_C_float_interval."
           },
           "locations": [
             {
@@ -1960,11 +1958,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 114,
-                  "startColumn": 11,
-                  "endLine": 114,
-                  "endColumn": 31,
-                  "byteLength": 20
+                  "startLine": 213,
+                  "startColumn": 13,
+                  "endLine": 213,
+                  "endColumn": 35,
+                  "byteLength": 22
                 }
               }
             }
@@ -1974,7 +1972,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": {
+            "text": "behavior finite in function Frama_C_float_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -1983,13 +1983,13 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 109,
-                  "startColumn": 20,
-                  "endLine": 109,
-                  "endColumn": 30,
-                  "byteLength": 10
-                }
-              }
+                  "startLine": 213,
+                  "startColumn": 13,
+                  "endLine": 213,
+                  "endColumn": 35,
+                  "byteLength": 22
+                }
+              }
             }
           ]
         },
@@ -1997,7 +1997,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": {
+            "text": "behavior infinite_not_nan in function Frama_C_float_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -2006,11 +2008,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 112,
-                  "startColumn": 28,
-                  "endLine": 112,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 213,
+                  "startColumn": 13,
+                  "endLine": 213,
+                  "endColumn": 35,
+                  "byteLength": 22
                 }
               }
             }
@@ -2020,9 +2022,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "assigns clause in function Frama_C_int_interval."
-          },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -2031,11 +2031,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 110,
-                  "startColumn": 12,
-                  "endLine": 110,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 204,
+                  "startColumn": 20,
+                  "endLine": 204,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -2045,9 +2045,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function Frama_C_int_interval."
-          },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -2056,11 +2054,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 110,
-                  "startColumn": 12,
-                  "endLine": 110,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 209,
+                  "startColumn": 20,
+                  "endLine": 209,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -2070,9 +2068,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_int_interval."
-          },
+          "message": { "text": "finite." },
           "locations": [
             {
               "physicalLocation": {
@@ -2081,11 +2077,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 111,
-                  "startColumn": 12,
-                  "endLine": 111,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "startLine": 203,
+                  "startColumn": 20,
+                  "endLine": 203,
+                  "endColumn": 54,
+                  "byteLength": 34
                 }
               }
             }
@@ -2095,9 +2091,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function Frama_C_interval."
-          },
+          "message": { "text": "infinite." },
           "locations": [
             {
               "physicalLocation": {
@@ -2106,11 +2100,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 57,
-                  "startColumn": 11,
-                  "endLine": 57,
-                  "endColumn": 27,
-                  "byteLength": 16
+                  "startLine": 207,
+                  "startColumn": 22,
+                  "endLine": 207,
+                  "endColumn": 60,
+                  "byteLength": 38
                 }
               }
             }
@@ -2120,7 +2114,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": { "text": "not_nan." },
           "locations": [
             {
               "physicalLocation": {
@@ -2129,11 +2123,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 52,
-                  "startColumn": 20,
-                  "endLine": 52,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 208,
+                  "startColumn": 21,
+                  "endLine": 208,
+                  "endColumn": 51,
+                  "byteLength": 30
                 }
               }
             }
@@ -2152,11 +2146,34 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 55,
+                  "startLine": 205,
                   "startColumn": 28,
-                  "endLine": 55,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "endLine": 205,
+                  "endColumn": 72,
+                  "byteLength": 44
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_bounded." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/__fc_builtin.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 210,
+                  "startColumn": 28,
+                  "endLine": 210,
+                  "endColumn": 70,
+                  "byteLength": 42
                 }
               }
             }
@@ -2167,7 +2184,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_interval."
+            "text": "assigns clause in function Frama_C_float_interval."
           },
           "locations": [
             {
@@ -2177,10 +2194,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 53,
-                  "startColumn": 12,
-                  "endLine": 53,
-                  "endColumn": 19,
+                  "startLine": 200,
+                  "startColumn": 10,
+                  "endLine": 200,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -2192,7 +2209,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_interval."
+            "text": "from clause of term \\result in function Frama_C_float_interval."
           },
           "locations": [
             {
@@ -2202,10 +2219,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 53,
-                  "startColumn": 12,
-                  "endLine": 53,
-                  "endColumn": 19,
+                  "startLine": 200,
+                  "startColumn": 10,
+                  "endLine": 200,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -2217,7 +2234,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_float_interval."
           },
           "locations": [
             {
@@ -2227,10 +2244,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 54,
-                  "startColumn": 12,
-                  "endLine": 54,
-                  "endColumn": 34,
+                  "startLine": 201,
+                  "startColumn": 10,
+                  "endLine": 201,
+                  "endColumn": 32,
                   "byteLength": 22
                 }
               }
@@ -2242,7 +2259,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_interval_split."
+            "text": "disjoint clause in function Frama_C_float_interval."
           },
           "locations": [
             {
@@ -2252,16 +2269,41 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 64,
-                  "startColumn": 11,
-                  "endLine": 64,
-                  "endColumn": 33,
+                  "startLine": 213,
+                  "startColumn": 13,
+                  "endLine": 213,
+                  "endColumn": 35,
                   "byteLength": 22
                 }
               }
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "behavior default! in function Frama_C_int_interval."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/__fc_builtin.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 124,
+                  "startColumn": 11,
+                  "endLine": 124,
+                  "endColumn": 31,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -2275,9 +2317,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 59,
+                  "startLine": 119,
                   "startColumn": 20,
-                  "endLine": 59,
+                  "endLine": 119,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -2298,9 +2340,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 62,
+                  "startLine": 122,
                   "startColumn": 28,
-                  "endLine": 62,
+                  "endLine": 122,
                   "endColumn": 49,
                   "byteLength": 21
                 }
@@ -2313,7 +2355,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_interval_split."
+            "text": "assigns clause in function Frama_C_int_interval."
           },
           "locations": [
             {
@@ -2323,9 +2365,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 60,
+                  "startLine": 120,
                   "startColumn": 12,
-                  "endLine": 60,
+                  "endLine": 120,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2338,7 +2380,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_interval_split."
+            "text": "from clause of term \\result in function Frama_C_int_interval."
           },
           "locations": [
             {
@@ -2348,9 +2390,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 60,
+                  "startLine": 120,
                   "startColumn": 12,
-                  "endLine": 60,
+                  "endLine": 120,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2363,7 +2405,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_interval_split."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_int_interval."
           },
           "locations": [
             {
@@ -2373,9 +2415,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 61,
+                  "startLine": 121,
                   "startColumn": 12,
-                  "endLine": 61,
+                  "endLine": 121,
                   "endColumn": 34,
                   "byteLength": 22
                 }
@@ -2388,7 +2430,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_long_interval."
+            "text": "behavior default! in function Frama_C_interval."
           },
           "locations": [
             {
@@ -2398,11 +2440,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 130,
-                  "startColumn": 12,
-                  "endLine": 130,
-                  "endColumn": 33,
-                  "byteLength": 21
+                  "startLine": 67,
+                  "startColumn": 11,
+                  "endLine": 67,
+                  "endColumn": 27,
+                  "byteLength": 16
                 }
               }
             }
@@ -2421,9 +2463,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 125,
+                  "startLine": 62,
                   "startColumn": 20,
-                  "endLine": 125,
+                  "endLine": 62,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -2444,9 +2486,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 128,
+                  "startLine": 65,
                   "startColumn": 28,
-                  "endLine": 128,
+                  "endLine": 65,
                   "endColumn": 49,
                   "byteLength": 21
                 }
@@ -2459,7 +2501,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_long_interval."
+            "text": "assigns clause in function Frama_C_interval."
           },
           "locations": [
             {
@@ -2469,9 +2511,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 126,
+                  "startLine": 63,
                   "startColumn": 12,
-                  "endLine": 126,
+                  "endLine": 63,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2484,7 +2526,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_long_interval."
+            "text": "from clause of term \\result in function Frama_C_interval."
           },
           "locations": [
             {
@@ -2494,9 +2536,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 126,
+                  "startLine": 63,
                   "startColumn": 12,
-                  "endLine": 126,
+                  "endLine": 63,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2509,7 +2551,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_long_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_interval."
           },
           "locations": [
             {
@@ -2519,9 +2561,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 127,
+                  "startLine": 64,
                   "startColumn": 12,
-                  "endLine": 127,
+                  "endLine": 64,
                   "endColumn": 34,
                   "byteLength": 22
                 }
@@ -2534,7 +2576,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_long_long_interval."
+            "text": "behavior default! in function Frama_C_interval_split."
           },
           "locations": [
             {
@@ -2544,11 +2586,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 146,
-                  "startColumn": 17,
-                  "endLine": 146,
-                  "endColumn": 43,
-                  "byteLength": 26
+                  "startLine": 74,
+                  "startColumn": 11,
+                  "endLine": 74,
+                  "endColumn": 33,
+                  "byteLength": 22
                 }
               }
             }
@@ -2567,9 +2609,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 141,
+                  "startLine": 69,
                   "startColumn": 20,
-                  "endLine": 141,
+                  "endLine": 69,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -2590,9 +2632,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 144,
+                  "startLine": 72,
                   "startColumn": 28,
-                  "endLine": 144,
+                  "endLine": 72,
                   "endColumn": 49,
                   "byteLength": 21
                 }
@@ -2605,7 +2647,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_long_long_interval."
+            "text": "assigns clause in function Frama_C_interval_split."
           },
           "locations": [
             {
@@ -2615,9 +2657,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 142,
+                  "startLine": 70,
                   "startColumn": 12,
-                  "endLine": 142,
+                  "endLine": 70,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2630,7 +2672,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_long_long_interval."
+            "text": "from clause of term \\result in function Frama_C_interval_split."
           },
           "locations": [
             {
@@ -2640,9 +2682,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 142,
+                  "startLine": 70,
                   "startColumn": 12,
-                  "endLine": 142,
+                  "endLine": 70,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2655,7 +2697,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_long_long_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_interval_split."
           },
           "locations": [
             {
@@ -2665,9 +2707,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 143,
+                  "startLine": 71,
                   "startColumn": 12,
-                  "endLine": 143,
+                  "endLine": 71,
                   "endColumn": 34,
                   "byteLength": 22
                 }
@@ -2680,7 +2722,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_make_unknown."
+            "text": "behavior default! in function Frama_C_intmax_t_interval."
           },
           "locations": [
             {
@@ -2690,11 +2732,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 38,
-                  "startColumn": 12,
-                  "endLine": 38,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "startLine": 172,
+                  "startColumn": 16,
+                  "endLine": 172,
+                  "endColumn": 41,
+                  "byteLength": 25
                 }
               }
             }
@@ -2704,7 +2746,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_p." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -2713,11 +2755,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 33,
-                  "startColumn": 22,
-                  "endLine": 33,
-                  "endColumn": 44,
-                  "byteLength": 22
+                  "startLine": 167,
+                  "startColumn": 20,
+                  "endLine": 167,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -2727,7 +2769,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
@@ -2736,11 +2778,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 36,
+                  "startLine": 170,
                   "startColumn": 28,
-                  "endLine": 36,
-                  "endColumn": 56,
-                  "byteLength": 28
+                  "endLine": 170,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -2751,7 +2793,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_make_unknown."
+            "text": "assigns clause in function Frama_C_intmax_t_interval."
           },
           "locations": [
             {
@@ -2761,11 +2803,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 168,
                   "startColumn": 12,
-                  "endLine": 34,
-                  "endColumn": 23,
-                  "byteLength": 11
+                  "endLine": 168,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -2776,7 +2818,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(p + (0 .. l - 1)) in function Frama_C_make_unknown."
+            "text": "from clause of term \\result in function Frama_C_intmax_t_interval."
           },
           "locations": [
             {
@@ -2786,11 +2828,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 34,
+                  "startLine": 168,
                   "startColumn": 12,
-                  "endLine": 34,
-                  "endColumn": 23,
-                  "byteLength": 11
+                  "endLine": 168,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -2801,7 +2843,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_make_unknown."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_intmax_t_interval."
           },
           "locations": [
             {
@@ -2811,9 +2853,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 35,
+                  "startLine": 169,
                   "startColumn": 12,
-                  "endLine": 35,
+                  "endLine": 169,
                   "endColumn": 34,
                   "byteLength": 22
                 }
@@ -2826,7 +2868,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_nondet."
+            "text": "behavior default! in function Frama_C_long_interval."
           },
           "locations": [
             {
@@ -2836,11 +2878,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 44,
-                  "startColumn": 11,
-                  "endLine": 44,
-                  "endColumn": 25,
-                  "byteLength": 14
+                  "startLine": 140,
+                  "startColumn": 12,
+                  "endLine": 140,
+                  "endColumn": 33,
+                  "byteLength": 21
                 }
               }
             }
@@ -2850,7 +2892,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_a_or_b." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -2859,11 +2901,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 42,
-                  "startColumn": 27,
-                  "endLine": 42,
-                  "endColumn": 55,
-                  "byteLength": 28
+                  "startLine": 135,
+                  "startColumn": 20,
+                  "endLine": 135,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -2873,7 +2915,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function Frama_C_nondet." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
@@ -2882,11 +2924,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 40,
-                  "startColumn": 12,
-                  "endLine": 40,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 138,
+                  "startColumn": 28,
+                  "endLine": 138,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -2897,7 +2939,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_nondet."
+            "text": "assigns clause in function Frama_C_long_interval."
           },
           "locations": [
             {
@@ -2907,9 +2949,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 40,
+                  "startLine": 136,
                   "startColumn": 12,
-                  "endLine": 40,
+                  "endLine": 136,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2922,7 +2964,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_nondet."
+            "text": "from clause of term \\result in function Frama_C_long_interval."
           },
           "locations": [
             {
@@ -2932,11 +2974,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 41,
+                  "startLine": 136,
                   "startColumn": 12,
-                  "endLine": 41,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "endLine": 136,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -2947,7 +2989,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_nondet_ptr."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_long_interval."
           },
           "locations": [
             {
@@ -2957,11 +2999,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 50,
-                  "startColumn": 13,
-                  "endLine": 50,
-                  "endColumn": 31,
-                  "byteLength": 18
+                  "startLine": 137,
+                  "startColumn": 12,
+                  "endLine": 137,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -2971,7 +3013,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_a_or_b." },
+          "message": {
+            "text": "behavior default! in function Frama_C_long_long_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -2980,11 +3024,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 48,
-                  "startColumn": 27,
-                  "endLine": 48,
-                  "endColumn": 55,
-                  "byteLength": 28
+                  "startLine": 156,
+                  "startColumn": 17,
+                  "endLine": 156,
+                  "endColumn": 43,
+                  "byteLength": 26
                 }
               }
             }
@@ -2994,9 +3038,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "assigns clause in function Frama_C_nondet_ptr."
-          },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -3005,11 +3047,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 46,
-                  "startColumn": 12,
-                  "endLine": 46,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 151,
+                  "startColumn": 20,
+                  "endLine": 151,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -3019,9 +3061,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function Frama_C_nondet_ptr."
-          },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
@@ -3030,11 +3070,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 46,
-                  "startColumn": 12,
-                  "endLine": 46,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 154,
+                  "startColumn": 28,
+                  "endLine": 154,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -3045,7 +3085,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_nondet_ptr."
+            "text": "assigns clause in function Frama_C_long_long_interval."
           },
           "locations": [
             {
@@ -3055,11 +3095,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 47,
+                  "startLine": 152,
                   "startColumn": 12,
-                  "endLine": 47,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "endLine": 152,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -3070,7 +3110,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_offset."
+            "text": "from clause of term \\result in function Frama_C_long_long_interval."
           },
           "locations": [
             {
@@ -3080,11 +3120,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 193,
-                  "startColumn": 14,
-                  "endLine": 193,
-                  "endColumn": 28,
-                  "byteLength": 14
+                  "startLine": 152,
+                  "startColumn": 12,
+                  "endLine": 152,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -3094,7 +3134,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function Frama_C_offset." },
+          "message": {
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_long_long_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3103,11 +3145,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 193,
-                  "startColumn": 14,
-                  "endLine": 193,
-                  "endColumn": 28,
-                  "byteLength": 14
+                  "startLine": 153,
+                  "startColumn": 12,
+                  "endLine": 153,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -3118,7 +3160,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_offset."
+            "text": "behavior default! in function Frama_C_make_unknown."
           },
           "locations": [
             {
@@ -3128,11 +3170,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 192,
+                  "startLine": 41,
                   "startColumn": 12,
-                  "endLine": 192,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 41,
+                  "endColumn": 32,
+                  "byteLength": 20
                 }
               }
             }
@@ -3142,9 +3184,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function Frama_C_real_interval_as_double."
-          },
+          "message": { "text": "valid_p." },
           "locations": [
             {
               "physicalLocation": {
@@ -3153,11 +3193,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 181,
-                  "startColumn": 14,
-                  "endLine": 181,
-                  "endColumn": 45,
-                  "byteLength": 31
+                  "startLine": 36,
+                  "startColumn": 22,
+                  "endLine": 36,
+                  "endColumn": 44,
+                  "byteLength": 22
                 }
               }
             }
@@ -3167,7 +3207,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "finite." },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
@@ -3176,11 +3216,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 175,
-                  "startColumn": 21,
-                  "endLine": 175,
-                  "endColumn": 55,
-                  "byteLength": 34
+                  "startLine": 39,
+                  "startColumn": 28,
+                  "endLine": 39,
+                  "endColumn": 56,
+                  "byteLength": 28
                 }
               }
             }
@@ -3190,7 +3230,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": {
+            "text": "assigns clause in function Frama_C_make_unknown."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3199,11 +3241,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 176,
-                  "startColumn": 20,
-                  "endLine": 176,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 37,
+                  "startColumn": 12,
+                  "endLine": 37,
+                  "endColumn": 23,
+                  "byteLength": 11
                 }
               }
             }
@@ -3213,7 +3255,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": {
+            "text": "from clause of term *(p + (0 .. l - 1)) in function Frama_C_make_unknown."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3222,11 +3266,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 179,
-                  "startColumn": 28,
-                  "endLine": 179,
-                  "endColumn": 72,
-                  "byteLength": 44
+                  "startLine": 37,
+                  "startColumn": 12,
+                  "endLine": 37,
+                  "endColumn": 23,
+                  "byteLength": 11
                 }
               }
             }
@@ -3237,7 +3281,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_real_interval_as_double."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_make_unknown."
           },
           "locations": [
             {
@@ -3247,11 +3291,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 177,
+                  "startLine": 38,
                   "startColumn": 12,
-                  "endLine": 177,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 38,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -3262,7 +3306,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_real_interval_as_double."
+            "text": "behavior default! in function Frama_C_make_unknown_wchar."
           },
           "locations": [
             {
@@ -3272,11 +3316,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 177,
+                  "startLine": 48,
                   "startColumn": 12,
-                  "endLine": 177,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 48,
+                  "endColumn": 38,
+                  "byteLength": 26
                 }
               }
             }
@@ -3286,9 +3330,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_real_interval_as_double."
-          },
+          "message": { "text": "valid_p." },
           "locations": [
             {
               "physicalLocation": {
@@ -3297,10 +3339,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 178,
-                  "startColumn": 12,
-                  "endLine": 178,
-                  "endColumn": 34,
+                  "startLine": 43,
+                  "startColumn": 22,
+                  "endLine": 43,
+                  "endColumn": 44,
                   "byteLength": 22
                 }
               }
@@ -3311,9 +3353,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function Frama_C_short_interval."
-          },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
@@ -3322,11 +3362,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 97,
-                  "startColumn": 13,
-                  "endLine": 97,
-                  "endColumn": 35,
-                  "byteLength": 22
+                  "startLine": 46,
+                  "startColumn": 28,
+                  "endLine": 46,
+                  "endColumn": 56,
+                  "byteLength": 28
                 }
               }
             }
@@ -3336,7 +3376,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": {
+            "text": "assigns clause in function Frama_C_make_unknown_wchar."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3345,11 +3387,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 92,
-                  "startColumn": 20,
-                  "endLine": 92,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 44,
+                  "startColumn": 12,
+                  "endLine": 44,
+                  "endColumn": 23,
+                  "byteLength": 11
                 }
               }
             }
@@ -3359,7 +3401,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": {
+            "text": "from clause of term *(p + (0 .. l - 1)) in function Frama_C_make_unknown_wchar."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3368,11 +3412,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 95,
-                  "startColumn": 28,
-                  "endLine": 95,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 44,
+                  "startColumn": 12,
+                  "endLine": 44,
+                  "endColumn": 23,
+                  "byteLength": 11
                 }
               }
             }
@@ -3383,7 +3427,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_short_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_make_unknown_wchar."
           },
           "locations": [
             {
@@ -3393,11 +3437,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 93,
+                  "startLine": 45,
                   "startColumn": 12,
-                  "endLine": 93,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 45,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -3408,7 +3452,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_short_interval."
+            "text": "behavior default! in function Frama_C_malloc_fresh."
           },
           "locations": [
             {
@@ -3418,11 +3462,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 93,
-                  "startColumn": 12,
-                  "endLine": 93,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 258,
+                  "startColumn": 13,
+                  "endLine": 258,
+                  "endColumn": 33,
+                  "byteLength": 20
                 }
               }
             }
@@ -3433,7 +3477,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_short_interval."
+            "text": "assigns clause in function Frama_C_malloc_fresh."
           },
           "locations": [
             {
@@ -3443,11 +3487,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 94,
-                  "startColumn": 12,
-                  "endLine": 94,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "startLine": 255,
+                  "startColumn": 10,
+                  "endLine": 255,
+                  "endColumn": 26,
+                  "byteLength": 16
                 }
               }
             }
@@ -3458,7 +3502,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_size_t_interval."
+            "text": "from clause of term __fc_heap_status in function Frama_C_malloc_fresh."
           },
           "locations": [
             {
@@ -3468,11 +3512,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 154,
-                  "startColumn": 14,
-                  "endLine": 154,
-                  "endColumn": 37,
-                  "byteLength": 23
+                  "startLine": 255,
+                  "startColumn": 10,
+                  "endLine": 255,
+                  "endColumn": 26,
+                  "byteLength": 16
                 }
               }
             }
@@ -3482,7 +3526,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": {
+            "text": "from clause of term \\result in function Frama_C_malloc_fresh."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3491,11 +3537,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 149,
-                  "startColumn": 20,
-                  "endLine": 149,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 256,
+                  "startColumn": 10,
+                  "endLine": 256,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -3505,7 +3551,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": {
+            "text": "allocates/frees clause in function Frama_C_malloc_fresh."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3514,11 +3562,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 152,
-                  "startColumn": 28,
-                  "endLine": 152,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 254,
+                  "startColumn": 12,
+                  "endLine": 254,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -3529,7 +3577,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_size_t_interval."
+            "text": "behavior default! in function Frama_C_nondet."
           },
           "locations": [
             {
@@ -3539,11 +3587,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 150,
-                  "startColumn": 12,
-                  "endLine": 150,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 54,
+                  "startColumn": 11,
+                  "endLine": 54,
+                  "endColumn": 25,
+                  "byteLength": 14
                 }
               }
             }
@@ -3553,9 +3601,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function Frama_C_size_t_interval."
-          },
+          "message": { "text": "result_a_or_b." },
           "locations": [
             {
               "physicalLocation": {
@@ -3564,11 +3610,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 150,
-                  "startColumn": 12,
-                  "endLine": 150,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 52,
+                  "startColumn": 27,
+                  "endLine": 52,
+                  "endColumn": 55,
+                  "byteLength": 28
                 }
               }
             }
@@ -3578,9 +3624,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_size_t_interval."
-          },
+          "message": { "text": "assigns clause in function Frama_C_nondet." },
           "locations": [
             {
               "physicalLocation": {
@@ -3589,11 +3633,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 151,
+                  "startLine": 50,
                   "startColumn": 12,
-                  "endLine": 151,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "endLine": 50,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -3604,7 +3648,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_unsigned_char_interval."
+            "text": "from clause of term \\result in function Frama_C_nondet."
           },
           "locations": [
             {
@@ -3614,11 +3658,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 71,
-                  "startColumn": 21,
-                  "endLine": 71,
-                  "endColumn": 51,
-                  "byteLength": 30
+                  "startLine": 50,
+                  "startColumn": 12,
+                  "endLine": 50,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -3628,7 +3672,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": {
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_nondet."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3637,11 +3683,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 66,
-                  "startColumn": 20,
-                  "endLine": 66,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 51,
+                  "startColumn": 12,
+                  "endLine": 51,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -3651,7 +3697,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": {
+            "text": "behavior default! in function Frama_C_nondet_ptr."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3660,11 +3708,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 69,
-                  "startColumn": 28,
-                  "endLine": 69,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 60,
+                  "startColumn": 13,
+                  "endLine": 60,
+                  "endColumn": 31,
+                  "byteLength": 18
                 }
               }
             }
@@ -3674,9 +3722,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "assigns clause in function Frama_C_unsigned_char_interval."
-          },
+          "message": { "text": "result_a_or_b." },
           "locations": [
             {
               "physicalLocation": {
@@ -3685,11 +3731,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 67,
-                  "startColumn": 12,
-                  "endLine": 67,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 58,
+                  "startColumn": 27,
+                  "endLine": 58,
+                  "endColumn": 55,
+                  "byteLength": 28
                 }
               }
             }
@@ -3700,7 +3746,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_unsigned_char_interval."
+            "text": "assigns clause in function Frama_C_nondet_ptr."
           },
           "locations": [
             {
@@ -3710,9 +3756,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 67,
+                  "startLine": 56,
                   "startColumn": 12,
-                  "endLine": 67,
+                  "endLine": 56,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -3725,7 +3771,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_char_interval."
+            "text": "from clause of term \\result in function Frama_C_nondet_ptr."
           },
           "locations": [
             {
@@ -3735,11 +3781,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 68,
+                  "startLine": 56,
                   "startColumn": 12,
-                  "endLine": 68,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "endLine": 56,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -3750,7 +3796,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_unsigned_int_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_nondet_ptr."
           },
           "locations": [
             {
@@ -3760,34 +3806,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 105,
-                  "startColumn": 20,
-                  "endLine": 105,
-                  "endColumn": 49,
-                  "byteLength": 29
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "order." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/__fc_builtin.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 100,
-                  "startColumn": 20,
-                  "endLine": 100,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 57,
+                  "startColumn": 12,
+                  "endLine": 57,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -3797,7 +3820,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": {
+            "text": "behavior default! in function Frama_C_offset."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3806,11 +3831,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 103,
-                  "startColumn": 28,
-                  "endLine": 103,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 251,
+                  "startColumn": 14,
+                  "endLine": 251,
+                  "endColumn": 28,
+                  "byteLength": 14
                 }
               }
             }
@@ -3820,9 +3845,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "assigns clause in function Frama_C_unsigned_int_interval."
-          },
+          "message": { "text": "assigns clause in function Frama_C_offset." },
           "locations": [
             {
               "physicalLocation": {
@@ -3831,11 +3854,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 101,
-                  "startColumn": 12,
-                  "endLine": 101,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 251,
+                  "startColumn": 14,
+                  "endLine": 251,
+                  "endColumn": 28,
+                  "byteLength": 14
                 }
               }
             }
@@ -3846,7 +3869,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_unsigned_int_interval."
+            "text": "from clause of term \\result in function Frama_C_offset."
           },
           "locations": [
             {
@@ -3856,9 +3879,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 101,
+                  "startLine": 250,
                   "startColumn": 12,
-                  "endLine": 101,
+                  "endLine": 250,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -3871,7 +3894,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_int_interval."
+            "text": "behavior default! in function Frama_C_ptrdiff_t_interval."
           },
           "locations": [
             {
@@ -3881,11 +3904,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 102,
-                  "startColumn": 12,
-                  "endLine": 102,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "startLine": 188,
+                  "startColumn": 17,
+                  "endLine": 188,
+                  "endColumn": 43,
+                  "byteLength": 26
                 }
               }
             }
@@ -3895,9 +3918,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function Frama_C_unsigned_long_interval."
-          },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -3906,11 +3927,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 121,
-                  "startColumn": 21,
-                  "endLine": 121,
-                  "endColumn": 51,
-                  "byteLength": 30
+                  "startLine": 183,
+                  "startColumn": 20,
+                  "endLine": 183,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -3920,7 +3941,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "order." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
@@ -3929,11 +3950,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 116,
-                  "startColumn": 20,
-                  "endLine": 116,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 186,
+                  "startColumn": 28,
+                  "endLine": 186,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -3943,7 +3964,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_bounded." },
+          "message": {
+            "text": "assigns clause in function Frama_C_ptrdiff_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3952,11 +3975,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 119,
-                  "startColumn": 28,
-                  "endLine": 119,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 184,
+                  "startColumn": 12,
+                  "endLine": 184,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -3967,7 +3990,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_unsigned_long_interval."
+            "text": "from clause of term \\result in function Frama_C_ptrdiff_t_interval."
           },
           "locations": [
             {
@@ -3977,9 +4000,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 184,
                   "startColumn": 12,
-                  "endLine": 117,
+                  "endLine": 184,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -3992,7 +4015,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_unsigned_long_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_ptrdiff_t_interval."
           },
           "locations": [
             {
@@ -4002,11 +4025,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 185,
                   "startColumn": 12,
-                  "endLine": 117,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 185,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -4017,7 +4040,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_long_interval."
+            "text": "behavior default! in function Frama_C_real_interval_as_double."
           },
           "locations": [
             {
@@ -4027,11 +4050,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 118,
-                  "startColumn": 12,
-                  "endLine": 118,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "startLine": 239,
+                  "startColumn": 14,
+                  "endLine": 239,
+                  "endColumn": 45,
+                  "byteLength": 31
                 }
               }
             }
@@ -4041,9 +4064,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function Frama_C_unsigned_long_long_interval."
-          },
+          "message": { "text": "finite." },
           "locations": [
             {
               "physicalLocation": {
@@ -4052,11 +4073,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 138,
-                  "startColumn": 26,
-                  "endLine": 138,
-                  "endColumn": 61,
-                  "byteLength": 35
+                  "startLine": 233,
+                  "startColumn": 21,
+                  "endLine": 233,
+                  "endColumn": 55,
+                  "byteLength": 34
                 }
               }
             }
@@ -4075,9 +4096,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 133,
+                  "startLine": 234,
                   "startColumn": 20,
-                  "endLine": 133,
+                  "endLine": 234,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -4098,11 +4119,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 136,
+                  "startLine": 237,
                   "startColumn": 28,
-                  "endLine": 136,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "endLine": 237,
+                  "endColumn": 72,
+                  "byteLength": 44
                 }
               }
             }
@@ -4113,7 +4134,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_unsigned_long_long_interval."
+            "text": "assigns clause in function Frama_C_real_interval_as_double."
           },
           "locations": [
             {
@@ -4123,9 +4144,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 134,
+                  "startLine": 235,
                   "startColumn": 12,
-                  "endLine": 134,
+                  "endLine": 235,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4138,7 +4159,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_unsigned_long_long_interval."
+            "text": "from clause of term \\result in function Frama_C_real_interval_as_double."
           },
           "locations": [
             {
@@ -4148,9 +4169,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 134,
+                  "startLine": 235,
                   "startColumn": 12,
-                  "endLine": 134,
+                  "endLine": 235,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4163,7 +4184,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_long_long_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_real_interval_as_double."
           },
           "locations": [
             {
@@ -4173,9 +4194,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 135,
+                  "startLine": 236,
                   "startColumn": 12,
-                  "endLine": 135,
+                  "endLine": 236,
                   "endColumn": 34,
                   "byteLength": 22
                 }
@@ -4188,7 +4209,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_unsigned_short_interval."
+            "text": "behavior default! in function Frama_C_short_interval."
           },
           "locations": [
             {
@@ -4198,11 +4219,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 88,
-                  "startColumn": 22,
-                  "endLine": 88,
-                  "endColumn": 53,
-                  "byteLength": 31
+                  "startLine": 107,
+                  "startColumn": 13,
+                  "endLine": 107,
+                  "endColumn": 35,
+                  "byteLength": 22
                 }
               }
             }
@@ -4221,9 +4242,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 83,
+                  "startLine": 102,
                   "startColumn": 20,
-                  "endLine": 83,
+                  "endLine": 102,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -4244,9 +4265,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 86,
+                  "startLine": 105,
                   "startColumn": 28,
-                  "endLine": 86,
+                  "endLine": 105,
                   "endColumn": 49,
                   "byteLength": 21
                 }
@@ -4259,7 +4280,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_unsigned_short_interval."
+            "text": "assigns clause in function Frama_C_short_interval."
           },
           "locations": [
             {
@@ -4269,9 +4290,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 84,
+                  "startLine": 103,
                   "startColumn": 12,
-                  "endLine": 84,
+                  "endLine": 103,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4284,7 +4305,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function Frama_C_unsigned_short_interval."
+            "text": "from clause of term \\result in function Frama_C_short_interval."
           },
           "locations": [
             {
@@ -4294,9 +4315,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 84,
+                  "startLine": 103,
                   "startColumn": 12,
-                  "endLine": 84,
+                  "endLine": 103,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4309,7 +4330,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_short_interval."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_short_interval."
           },
           "locations": [
             {
@@ -4319,9 +4340,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 85,
+                  "startLine": 104,
                   "startColumn": 12,
-                  "endLine": 85,
+                  "endLine": 104,
                   "endColumn": 34,
                   "byteLength": 22
                 }
@@ -4334,7 +4355,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function Frama_C_watch_cardinal."
+            "text": "behavior default! in function Frama_C_size_t_interval."
           },
           "locations": [
             {
@@ -4344,11 +4365,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 212,
-                  "startColumn": 12,
-                  "endLine": 212,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "startLine": 164,
+                  "startColumn": 14,
+                  "endLine": 164,
+                  "endColumn": 37,
+                  "byteLength": 23
                 }
               }
             }
@@ -4358,9 +4379,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "assigns clause in function Frama_C_watch_cardinal."
-          },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
@@ -4369,11 +4388,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 212,
-                  "startColumn": 12,
-                  "endLine": 212,
-                  "endColumn": 34,
-                  "byteLength": 22
+                  "startLine": 159,
+                  "startColumn": 20,
+                  "endLine": 159,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -4383,9 +4402,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function Frama_C_watch_value."
-          },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
@@ -4394,11 +4411,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 208,
-                  "startColumn": 12,
-                  "endLine": 208,
-                  "endColumn": 31,
-                  "byteLength": 19
+                  "startLine": 162,
+                  "startColumn": 28,
+                  "endLine": 162,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -4409,7 +4426,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "assigns clause in function Frama_C_watch_value."
+            "text": "assigns clause in function Frama_C_size_t_interval."
           },
           "locations": [
             {
@@ -4419,11 +4436,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 208,
+                  "startLine": 160,
                   "startColumn": 12,
-                  "endLine": 208,
-                  "endColumn": 31,
-                  "byteLength": 19
+                  "endLine": 160,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -4433,20 +4450,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function _Exit." },
+          "message": {
+            "text": "from clause of term \\result in function Frama_C_size_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 517,
+                  "startLine": 160,
                   "startColumn": 12,
-                  "endLine": 517,
-                  "endColumn": 17,
-                  "byteLength": 5
+                  "endLine": 160,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -4456,20 +4475,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "never_terminates." },
+          "message": {
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_size_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 515,
-                  "startColumn": 28,
-                  "endLine": 515,
+                  "startLine": 161,
+                  "startColumn": 12,
+                  "endLine": 161,
                   "endColumn": 34,
-                  "byteLength": 6
+                  "byteLength": 22
                 }
               }
             }
@@ -4479,20 +4500,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function _Exit." },
+          "message": {
+            "text": "behavior default! in function Frama_C_uintmax_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 517,
-                  "startColumn": 12,
-                  "endLine": 517,
-                  "endColumn": 17,
-                  "byteLength": 5
+                  "startLine": 180,
+                  "startColumn": 17,
+                  "endLine": 180,
+                  "endColumn": 43,
+                  "byteLength": 26
                 }
               }
             }
@@ -4502,20 +4525,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function abort." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 498,
-                  "startColumn": 12,
-                  "endLine": 498,
-                  "endColumn": 17,
-                  "byteLength": 5
+                  "startLine": 175,
+                  "startColumn": 20,
+                  "endLine": 175,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -4525,20 +4548,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "status." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 495,
-                  "startColumn": 16,
-                  "endLine": 495,
-                  "endColumn": 33,
-                  "byteLength": 17
+                  "startLine": 178,
+                  "startColumn": 28,
+                  "endLine": 178,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -4548,20 +4571,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "never_terminates." },
+          "message": {
+            "text": "assigns clause in function Frama_C_uintmax_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 496,
-                  "startColumn": 28,
-                  "endLine": 496,
-                  "endColumn": 34,
-                  "byteLength": 6
+                  "startLine": 176,
+                  "startColumn": 12,
+                  "endLine": 176,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -4571,20 +4596,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function abort." },
+          "message": {
+            "text": "from clause of term \\result in function Frama_C_uintmax_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 494,
-                  "startColumn": 10,
-                  "endLine": 494,
-                  "endColumn": 22,
-                  "byteLength": 12
+                  "startLine": 176,
+                  "startColumn": 12,
+                  "endLine": 176,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -4595,21 +4622,21 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\exit_status in function abort."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_uintmax_t_interval."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 494,
-                  "startColumn": 10,
-                  "endLine": 494,
-                  "endColumn": 22,
-                  "byteLength": 12
+                  "startLine": 177,
+                  "startColumn": 12,
+                  "endLine": 177,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -4619,20 +4646,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function abs." },
+          "message": {
+            "text": "behavior default! in function Frama_C_unsigned_char_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 611,
-                  "startColumn": 11,
-                  "endLine": 611,
-                  "endColumn": 14,
-                  "byteLength": 3
+                  "startLine": 81,
+                  "startColumn": 21,
+                  "endLine": 81,
+                  "endColumn": 51,
+                  "byteLength": 30
                 }
               }
             }
@@ -4642,20 +4671,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior negative in function abs." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 611,
-                  "startColumn": 11,
-                  "endLine": 611,
-                  "endColumn": 14,
-                  "byteLength": 3
+                  "startLine": 76,
+                  "startColumn": 20,
+                  "endLine": 76,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -4665,20 +4694,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior nonnegative in function abs." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 611,
-                  "startColumn": 11,
-                  "endLine": 611,
-                  "endColumn": 14,
-                  "byteLength": 3
+                  "startLine": 79,
+                  "startColumn": 28,
+                  "endLine": 79,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -4688,20 +4717,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "abs_representable." },
+          "message": {
+            "text": "assigns clause in function Frama_C_unsigned_char_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 600,
-                  "startColumn": 30,
-                  "endLine": 600,
-                  "endColumn": 51,
-                  "byteLength": 21
+                  "startLine": 77,
+                  "startColumn": 12,
+                  "endLine": 77,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -4711,20 +4742,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "negative." },
+          "message": {
+            "text": "from clause of term \\result in function Frama_C_unsigned_char_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 603,
-                  "startColumn": 22,
-                  "endLine": 603,
-                  "endColumn": 27,
-                  "byteLength": 5
+                  "startLine": 77,
+                  "startColumn": 12,
+                  "endLine": 77,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -4734,20 +4767,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "nonnegative." },
+          "message": {
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_char_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 606,
-                  "startColumn": 25,
-                  "endLine": 606,
-                  "endColumn": 31,
-                  "byteLength": 6
+                  "startLine": 78,
+                  "startColumn": 12,
+                  "endLine": 78,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -4757,20 +4792,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "opposite_result." },
+          "message": {
+            "text": "behavior default! in function Frama_C_unsigned_int_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 604,
-                  "startColumn": 29,
-                  "endLine": 604,
-                  "endColumn": 42,
-                  "byteLength": 13
+                  "startLine": 115,
+                  "startColumn": 20,
+                  "endLine": 115,
+                  "endColumn": 49,
+                  "byteLength": 29
                 }
               }
             }
@@ -4780,20 +4817,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "same_result." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 607,
-                  "startColumn": 25,
-                  "endLine": 607,
-                  "endColumn": 37,
-                  "byteLength": 12
+                  "startLine": 110,
+                  "startColumn": 20,
+                  "endLine": 110,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -4803,20 +4840,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function abs." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 611,
-                  "startColumn": 11,
-                  "endLine": 611,
-                  "endColumn": 14,
-                  "byteLength": 3
+                  "startLine": 113,
+                  "startColumn": 28,
+                  "endLine": 113,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -4827,20 +4864,20 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function abs."
+            "text": "assigns clause in function Frama_C_unsigned_int_interval."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 601,
-                  "startColumn": 10,
-                  "endLine": 601,
-                  "endColumn": 17,
+                  "startLine": 111,
+                  "startColumn": 12,
+                  "endLine": 111,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -4851,20 +4888,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function abs." },
+          "message": {
+            "text": "from clause of term \\result in function Frama_C_unsigned_int_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 611,
-                  "startColumn": 11,
-                  "endLine": 611,
-                  "endColumn": 14,
-                  "byteLength": 3
+                  "startLine": 111,
+                  "startColumn": 12,
+                  "endLine": 111,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -4874,20 +4913,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function abs." },
+          "message": {
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_int_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 611,
-                  "startColumn": 11,
-                  "endLine": 611,
-                  "endColumn": 14,
-                  "byteLength": 3
+                  "startLine": 112,
+                  "startColumn": 12,
+                  "endLine": 112,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -4898,21 +4939,21 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior default! in function at_quick_exit."
+            "text": "behavior default! in function Frama_C_unsigned_long_interval."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 504,
-                  "startColumn": 11,
-                  "endLine": 504,
-                  "endColumn": 24,
-                  "byteLength": 13
+                  "startLine": 131,
+                  "startColumn": 21,
+                  "endLine": 131,
+                  "endColumn": 51,
+                  "byteLength": 30
                 }
               }
             }
@@ -4922,20 +4963,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function at_quick_exit." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 504,
-                  "startColumn": 11,
-                  "endLine": 504,
-                  "endColumn": 24,
-                  "byteLength": 13
+                  "startLine": 126,
+                  "startColumn": 20,
+                  "endLine": 126,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -4945,22 +4986,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function at_quick_exit."
-          },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 503,
-                  "startColumn": 12,
-                  "endLine": 503,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 129,
+                  "startColumn": 28,
+                  "endLine": 129,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -4970,20 +5009,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function atexit." },
+          "message": {
+            "text": "assigns clause in function Frama_C_unsigned_long_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 501,
-                  "startColumn": 11,
-                  "endLine": 501,
-                  "endColumn": 17,
-                  "byteLength": 6
+                  "startLine": 127,
+                  "startColumn": 12,
+                  "endLine": 127,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -4993,20 +5034,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function atexit." },
+          "message": {
+            "text": "from clause of term \\result in function Frama_C_unsigned_long_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 501,
-                  "startColumn": 11,
-                  "endLine": 501,
-                  "endColumn": 17,
-                  "byteLength": 6
+                  "startLine": 127,
+                  "startColumn": 12,
+                  "endLine": 127,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -5017,21 +5060,21 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function atexit."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_long_interval."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 500,
+                  "startLine": 128,
                   "startColumn": 12,
-                  "endLine": 500,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 128,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -5041,20 +5084,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function atof." },
+          "message": {
+            "text": "behavior default! in function Frama_C_unsigned_long_long_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 76,
-                  "startColumn": 14,
-                  "endLine": 76,
-                  "endColumn": 18,
-                  "byteLength": 4
+                  "startLine": 148,
+                  "startColumn": 26,
+                  "endLine": 148,
+                  "endColumn": 61,
+                  "byteLength": 35
                 }
               }
             }
@@ -5064,20 +5109,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_nptr." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 73,
-                  "startColumn": 23,
-                  "endLine": 73,
-                  "endColumn": 40,
-                  "byteLength": 17
+                  "startLine": 143,
+                  "startColumn": 20,
+                  "endLine": 143,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -5087,20 +5132,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function atof." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 76,
-                  "startColumn": 14,
-                  "endLine": 76,
-                  "endColumn": 18,
-                  "byteLength": 4
+                  "startLine": 146,
+                  "startColumn": 28,
+                  "endLine": 146,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -5111,20 +5156,20 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function atof."
+            "text": "assigns clause in function Frama_C_unsigned_long_long_interval."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 74,
-                  "startColumn": 10,
-                  "endLine": 74,
-                  "endColumn": 17,
+                  "startLine": 144,
+                  "startColumn": 12,
+                  "endLine": 144,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -5135,20 +5180,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function atoi." },
+          "message": {
+            "text": "from clause of term \\result in function Frama_C_unsigned_long_long_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 82,
-                  "startColumn": 11,
-                  "endLine": 82,
-                  "endColumn": 15,
-                  "byteLength": 4
+                  "startLine": 144,
+                  "startColumn": 12,
+                  "endLine": 144,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -5158,20 +5205,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_nptr." },
+          "message": {
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_long_long_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 23,
-                  "endLine": 79,
-                  "endColumn": 40,
-                  "byteLength": 17
+                  "startLine": 145,
+                  "startColumn": 12,
+                  "endLine": 145,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -5181,20 +5230,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function atoi." },
+          "message": {
+            "text": "behavior default! in function Frama_C_unsigned_short_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 82,
-                  "startColumn": 11,
-                  "endLine": 82,
-                  "endColumn": 15,
-                  "byteLength": 4
+                  "startLine": 98,
+                  "startColumn": 22,
+                  "endLine": 98,
+                  "endColumn": 53,
+                  "byteLength": 31
                 }
               }
             }
@@ -5204,22 +5255,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function atoi."
-          },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 80,
-                  "startColumn": 10,
-                  "endLine": 80,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 93,
+                  "startColumn": 20,
+                  "endLine": 93,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -5229,20 +5278,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function atol." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 88,
-                  "startColumn": 16,
-                  "endLine": 88,
-                  "endColumn": 20,
-                  "byteLength": 4
+                  "startLine": 96,
+                  "startColumn": 28,
+                  "endLine": 96,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -5252,20 +5301,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_nptr." },
+          "message": {
+            "text": "assigns clause in function Frama_C_unsigned_short_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 85,
-                  "startColumn": 23,
-                  "endLine": 85,
-                  "endColumn": 40,
-                  "byteLength": 17
+                  "startLine": 94,
+                  "startColumn": 12,
+                  "endLine": 94,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -5275,20 +5326,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function atol." },
+          "message": {
+            "text": "from clause of term \\result in function Frama_C_unsigned_short_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 88,
-                  "startColumn": 16,
-                  "endLine": 88,
-                  "endColumn": 20,
-                  "byteLength": 4
+                  "startLine": 94,
+                  "startColumn": 12,
+                  "endLine": 94,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -5299,21 +5352,21 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function atol."
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_unsigned_short_interval."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 86,
-                  "startColumn": 10,
-                  "endLine": 86,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 95,
+                  "startColumn": 12,
+                  "endLine": 95,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -5323,20 +5376,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function atoll." },
+          "message": {
+            "text": "behavior default! in function Frama_C_watch_cardinal."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 94,
-                  "startColumn": 21,
-                  "endLine": 94,
-                  "endColumn": 26,
-                  "byteLength": 5
+                  "startLine": 275,
+                  "startColumn": 12,
+                  "endLine": 275,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -5346,20 +5401,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_nptr." },
+          "message": {
+            "text": "assigns clause in function Frama_C_watch_cardinal."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 91,
-                  "startColumn": 23,
-                  "endLine": 91,
-                  "endColumn": 40,
-                  "byteLength": 17
+                  "startLine": 275,
+                  "startColumn": 12,
+                  "endLine": 275,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -5369,20 +5426,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function atoll." },
+          "message": {
+            "text": "behavior default! in function Frama_C_watch_value."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 94,
-                  "startColumn": 21,
-                  "endLine": 94,
-                  "endColumn": 26,
-                  "byteLength": 5
+                  "startLine": 271,
+                  "startColumn": 12,
+                  "endLine": 271,
+                  "endColumn": 31,
+                  "byteLength": 19
                 }
               }
             }
@@ -5393,21 +5452,21 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function atoll."
+            "text": "assigns clause in function Frama_C_watch_value."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 92,
-                  "startColumn": 10,
-                  "endLine": 92,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 271,
+                  "startColumn": 12,
+                  "endLine": 271,
+                  "endColumn": 31,
+                  "byteLength": 19
                 }
               }
             }
@@ -5417,20 +5476,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function bsearch." },
+          "message": {
+            "text": "behavior default! in function Frama_C_wint_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 583,
-                  "startColumn": 13,
-                  "endLine": 583,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 196,
+                  "startColumn": 14,
+                  "endLine": 196,
+                  "endColumn": 37,
+                  "byteLength": 23
                 }
               }
             }
@@ -5440,20 +5501,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_function_compar." },
+          "message": { "text": "order." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 576,
-                  "startColumn": 34,
-                  "endLine": 576,
-                  "endColumn": 57,
-                  "byteLength": 23
+                  "startLine": 191,
+                  "startColumn": 20,
+                  "endLine": 191,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -5463,20 +5524,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_or_correct_result." },
+          "message": { "text": "result_bounded." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 580,
-                  "startColumn": 34,
-                  "endLine": 581,
-                  "endColumn": 76,
-                  "byteLength": 96
+                  "startLine": 194,
+                  "startColumn": 28,
+                  "endLine": 194,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -5486,19 +5547,21 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function bsearch." },
+          "message": {
+            "text": "assigns clause in function Frama_C_wint_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 583,
-                  "startColumn": 13,
-                  "endLine": 583,
-                  "endColumn": 20,
+                  "startLine": 192,
+                  "startColumn": 12,
+                  "endLine": 192,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -5510,20 +5573,20 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function bsearch."
+            "text": "from clause of term \\result in function Frama_C_wint_t_interval."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 577,
-                  "startColumn": 10,
-                  "endLine": 577,
-                  "endColumn": 17,
+                  "startLine": 192,
+                  "startColumn": 12,
+                  "endLine": 192,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -5534,20 +5597,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function bzero." },
+          "message": {
+            "text": "from clause of term Frama_C_entropy_source in function Frama_C_wint_t_interval."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/strings.h",
+                  "uri": "libc/__fc_builtin.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 40,
+                  "startLine": 193,
                   "startColumn": 12,
-                  "endLine": 40,
-                  "endColumn": 17,
-                  "byteLength": 5
+                  "endLine": 193,
+                  "endColumn": 34,
+                  "byteLength": 22
                 }
               }
             }
@@ -5557,20 +5622,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_memory_area." },
+          "message": { "text": "behavior default! in function _Exit." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/strings.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 36,
-                  "startColumn": 32,
-                  "endLine": 36,
-                  "endColumn": 63,
-                  "byteLength": 31
+                  "startLine": 549,
+                  "startColumn": 12,
+                  "endLine": 549,
+                  "endColumn": 17,
+                  "byteLength": 5
                 }
               }
             }
@@ -5580,20 +5645,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "s_initialized." },
+          "message": { "text": "never_terminates." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/strings.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 38,
-                  "startColumn": 39,
-                  "endLine": 38,
-                  "endColumn": 75,
-                  "byteLength": 36
+                  "startLine": 547,
+                  "startColumn": 28,
+                  "endLine": 547,
+                  "endColumn": 34,
+                  "byteLength": 6
                 }
               }
             }
@@ -5603,20 +5668,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "zero_initialized." },
+          "message": { "text": "assigns clause in function _Exit." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/strings.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 39,
-                  "startColumn": 28,
-                  "endLine": 39,
-                  "endColumn": 63,
-                  "byteLength": 35
+                  "startLine": 549,
+                  "startColumn": 12,
+                  "endLine": 549,
+                  "endColumn": 17,
+                  "byteLength": 5
                 }
               }
             }
@@ -5626,20 +5691,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function bzero." },
+          "message": { "text": "behavior default! in function abort." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/strings.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 37,
-                  "startColumn": 10,
-                  "endLine": 37,
-                  "endColumn": 31,
-                  "byteLength": 21
+                  "startLine": 530,
+                  "startColumn": 12,
+                  "endLine": 530,
+                  "endColumn": 17,
+                  "byteLength": 5
                 }
               }
             }
@@ -5649,22 +5714,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *((char *)s + (0 .. n - 1)) in function bzero."
-          },
+          "message": { "text": "status." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/strings.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 37,
-                  "startColumn": 10,
-                  "endLine": 37,
-                  "endColumn": 31,
-                  "byteLength": 21
+                  "startLine": 527,
+                  "startColumn": 16,
+                  "endLine": 527,
+                  "endColumn": 33,
+                  "byteLength": 17
                 }
               }
             }
@@ -5674,7 +5737,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior allocation in function calloc." },
+          "message": { "text": "never_terminates." },
           "locations": [
             {
               "physicalLocation": {
@@ -5683,10 +5746,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
-                  "startColumn": 13,
-                  "endLine": 386,
-                  "endColumn": 19,
+                  "startLine": 528,
+                  "startColumn": 28,
+                  "endLine": 528,
+                  "endColumn": 34,
                   "byteLength": 6
                 }
               }
@@ -5697,7 +5760,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function calloc." },
+          "message": { "text": "assigns clause in function abort." },
           "locations": [
             {
               "physicalLocation": {
@@ -5706,11 +5769,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
-                  "startColumn": 13,
-                  "endLine": 386,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 526,
+                  "startColumn": 10,
+                  "endLine": 526,
+                  "endColumn": 22,
+                  "byteLength": 12
                 }
               }
             }
@@ -5720,7 +5783,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior no_allocation in function calloc." },
+          "message": {
+            "text": "from clause of term \\exit_status in function abort."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -5729,11 +5794,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
-                  "startColumn": 13,
-                  "endLine": 386,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 526,
+                  "startColumn": 10,
+                  "endLine": 526,
+                  "endColumn": 22,
+                  "byteLength": 12
                 }
               }
             }
@@ -5743,7 +5808,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "can_allocate." },
+          "message": { "text": "behavior default! in function abs." },
           "locations": [
             {
               "physicalLocation": {
@@ -5752,11 +5817,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 373,
-                  "startColumn": 26,
-                  "endLine": 373,
-                  "endColumn": 52,
-                  "byteLength": 26
+                  "startLine": 680,
+                  "startColumn": 11,
+                  "endLine": 680,
+                  "endColumn": 14,
+                  "byteLength": 3
                 }
               }
             }
@@ -5766,7 +5831,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "cannot_allocate." },
+          "message": { "text": "behavior negative in function abs." },
           "locations": [
             {
               "physicalLocation": {
@@ -5775,11 +5840,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 379,
-                  "startColumn": 29,
-                  "endLine": 379,
-                  "endColumn": 56,
-                  "byteLength": 27
+                  "startLine": 680,
+                  "startColumn": 11,
+                  "endLine": 680,
+                  "endColumn": 14,
+                  "byteLength": 3
                 }
               }
             }
@@ -5789,7 +5854,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocation." },
+          "message": { "text": "behavior nonnegative in function abs." },
           "locations": [
             {
               "physicalLocation": {
@@ -5798,11 +5863,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 374,
-                  "startColumn": 24,
-                  "endLine": 374,
-                  "endColumn": 53,
-                  "byteLength": 29
+                  "startLine": 680,
+                  "startColumn": 11,
+                  "endLine": 680,
+                  "endColumn": 14,
+                  "byteLength": 3
                 }
               }
             }
@@ -5812,7 +5877,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "abs_representable." },
           "locations": [
             {
               "physicalLocation": {
@@ -5821,11 +5886,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 375,
-                  "startColumn": 28,
-                  "endLine": 375,
-                  "endColumn": 77,
-                  "byteLength": 49
+                  "startLine": 669,
+                  "startColumn": 30,
+                  "endLine": 669,
+                  "endColumn": 51,
+                  "byteLength": 21
                 }
               }
             }
@@ -5835,7 +5900,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "zero_initialization." },
+          "message": { "text": "negative." },
           "locations": [
             {
               "physicalLocation": {
@@ -5844,11 +5909,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 376,
-                  "startColumn": 33,
-                  "endLine": 376,
-                  "endColumn": 81,
-                  "byteLength": 48
+                  "startLine": 672,
+                  "startColumn": 22,
+                  "endLine": 672,
+                  "endColumn": 27,
+                  "byteLength": 5
                 }
               }
             }
@@ -5858,7 +5923,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_result." },
+          "message": { "text": "nonnegative." },
           "locations": [
             {
               "physicalLocation": {
@@ -5867,11 +5932,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 382,
+                  "startLine": 675,
                   "startColumn": 25,
-                  "endLine": 382,
-                  "endColumn": 41,
-                  "byteLength": 16
+                  "endLine": 675,
+                  "endColumn": 31,
+                  "byteLength": 6
                 }
               }
             }
@@ -5881,7 +5946,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function calloc." },
+          "message": { "text": "opposite_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -5890,11 +5955,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 368,
-                  "startColumn": 10,
-                  "endLine": 368,
-                  "endColumn": 26,
-                  "byteLength": 16
+                  "startLine": 673,
+                  "startColumn": 29,
+                  "endLine": 673,
+                  "endColumn": 42,
+                  "byteLength": 13
                 }
               }
             }
@@ -5904,7 +5969,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function calloc." },
+          "message": { "text": "same_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -5913,11 +5978,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
-                  "startColumn": 13,
-                  "endLine": 386,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 676,
+                  "startColumn": 25,
+                  "endLine": 676,
+                  "endColumn": 37,
+                  "byteLength": 12
                 }
               }
             }
@@ -5927,9 +5992,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_heap_status in function calloc."
-          },
+          "message": { "text": "assigns clause in function abs." },
           "locations": [
             {
               "physicalLocation": {
@@ -5938,11 +6001,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 368,
-                  "startColumn": 10,
-                  "endLine": 368,
-                  "endColumn": 26,
-                  "byteLength": 16
+                  "startLine": 680,
+                  "startColumn": 11,
+                  "endLine": 680,
+                  "endColumn": 14,
+                  "byteLength": 3
                 }
               }
             }
@@ -5953,7 +6016,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function calloc."
+            "text": "from clause of term \\result in function abs."
           },
           "locations": [
             {
@@ -5963,9 +6026,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 369,
+                  "startLine": 670,
                   "startColumn": 10,
-                  "endLine": 369,
+                  "endLine": 670,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -5977,9 +6040,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function calloc."
-          },
+          "message": { "text": "complete clause in function abs." },
           "locations": [
             {
               "physicalLocation": {
@@ -5988,11 +6049,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 380,
-                  "startColumn": 12,
-                  "endLine": 380,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 680,
+                  "startColumn": 11,
+                  "endLine": 680,
+                  "endColumn": 14,
+                  "byteLength": 3
                 }
               }
             }
@@ -6002,7 +6063,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocates/frees clause in function calloc." },
+          "message": { "text": "disjoint clause in function abs." },
           "locations": [
             {
               "physicalLocation": {
@@ -6011,11 +6072,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 367,
-                  "startColumn": 12,
-                  "endLine": 367,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 680,
+                  "startColumn": 11,
+                  "endLine": 680,
+                  "endColumn": 14,
+                  "byteLength": 3
                 }
               }
             }
@@ -6025,7 +6086,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocates/frees clause in function calloc." },
+          "message": {
+            "text": "behavior default! in function arc4random_buf."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6034,11 +6097,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
-                  "startColumn": 13,
-                  "endLine": 386,
+                  "startLine": 912,
+                  "startColumn": 5,
+                  "endLine": 912,
                   "endColumn": 19,
-                  "byteLength": 6
+                  "byteLength": 14
                 }
               }
             }
@@ -6048,7 +6111,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function calloc." },
+          "message": { "text": "valid_p." },
           "locations": [
             {
               "physicalLocation": {
@@ -6057,11 +6120,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
-                  "startColumn": 13,
-                  "endLine": 386,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 907,
+                  "startColumn": 20,
+                  "endLine": 907,
+                  "endColumn": 53,
+                  "byteLength": 33
                 }
               }
             }
@@ -6071,7 +6134,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function calloc." },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
@@ -6080,11 +6143,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
-                  "startColumn": 13,
-                  "endLine": 386,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 910,
+                  "startColumn": 26,
+                  "endLine": 910,
+                  "endColumn": 65,
+                  "byteLength": 39
                 }
               }
             }
@@ -6094,7 +6157,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function div." },
+          "message": { "text": "assigns clause in function arc4random_buf." },
           "locations": [
             {
               "physicalLocation": {
@@ -6103,11 +6166,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 642,
-                  "startColumn": 13,
-                  "endLine": 642,
-                  "endColumn": 16,
-                  "byteLength": 3
+                  "startLine": 908,
+                  "startColumn": 10,
+                  "endLine": 908,
+                  "endColumn": 32,
+                  "byteLength": 22
                 }
               }
             }
@@ -6117,7 +6180,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function div." },
+          "message": {
+            "text": "from clause of term *((char *)buf + (0 .. n - 1)) in function arc4random_buf."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6126,11 +6191,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 642,
-                  "startColumn": 13,
-                  "endLine": 642,
-                  "endColumn": 16,
-                  "byteLength": 3
+                  "startLine": 908,
+                  "startColumn": 10,
+                  "endLine": 908,
+                  "endColumn": 32,
+                  "byteLength": 22
                 }
               }
             }
@@ -6141,7 +6206,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function div."
+            "text": "from clause of term Frama_C_entropy_source in function arc4random_buf."
           },
           "locations": [
             {
@@ -6151,11 +6216,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 641,
-                  "startColumn": 12,
-                  "endLine": 641,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 909,
+                  "startColumn": 10,
+                  "endLine": 909,
+                  "endColumn": 32,
+                  "byteLength": 22
                 }
               }
             }
@@ -6165,7 +6230,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function drand48." },
+          "message": {
+            "text": "behavior default! in function at_quick_exit."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6174,11 +6241,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 323,
-                  "startColumn": 14,
-                  "endLine": 323,
-                  "endColumn": 21,
-                  "byteLength": 7
+                  "startLine": 536,
+                  "startColumn": 11,
+                  "endLine": 536,
+                  "endColumn": 24,
+                  "byteLength": 13
                 }
               }
             }
@@ -6188,7 +6255,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "random48_initialized." },
+          "message": { "text": "assigns clause in function at_quick_exit." },
           "locations": [
             {
               "physicalLocation": {
@@ -6197,11 +6264,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 318,
-                  "startColumn": 33,
-                  "endLine": 318,
-                  "endColumn": 56,
-                  "byteLength": 23
+                  "startLine": 536,
+                  "startColumn": 11,
+                  "endLine": 536,
+                  "endColumn": 24,
+                  "byteLength": 13
                 }
               }
             }
@@ -6211,7 +6278,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_range." },
+          "message": {
+            "text": "from clause of term \\result in function at_quick_exit."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6220,11 +6289,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 321,
-                  "startColumn": 24,
-                  "endLine": 321,
-                  "endColumn": 67,
-                  "byteLength": 43
+                  "startLine": 535,
+                  "startColumn": 12,
+                  "endLine": 535,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -6234,7 +6303,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function drand48." },
+          "message": { "text": "behavior default! in function atexit." },
           "locations": [
             {
               "physicalLocation": {
@@ -6243,11 +6312,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 319,
-                  "startColumn": 10,
-                  "endLine": 319,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 533,
+                  "startColumn": 11,
+                  "endLine": 533,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -6257,9 +6326,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function drand48."
-          },
+          "message": { "text": "assigns clause in function atexit." },
           "locations": [
             {
               "physicalLocation": {
@@ -6268,11 +6335,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 319,
-                  "startColumn": 10,
-                  "endLine": 319,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 533,
+                  "startColumn": 11,
+                  "endLine": 533,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -6283,7 +6350,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function drand48."
+            "text": "from clause of term \\result in function atexit."
           },
           "locations": [
             {
@@ -6293,10 +6360,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 320,
-                  "startColumn": 10,
-                  "endLine": 320,
-                  "endColumn": 17,
+                  "startLine": 532,
+                  "startColumn": 12,
+                  "endLine": 532,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -6307,7 +6374,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function erand48." },
+          "message": { "text": "behavior default! in function atof." },
           "locations": [
             {
               "physicalLocation": {
@@ -6316,11 +6383,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 331,
+                  "startLine": 76,
                   "startColumn": 14,
-                  "endLine": 331,
-                  "endColumn": 21,
-                  "byteLength": 7
+                  "endLine": 76,
+                  "endColumn": 18,
+                  "byteLength": 4
                 }
               }
             }
@@ -6330,7 +6397,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "valid_nptr." },
           "locations": [
             {
               "physicalLocation": {
@@ -6339,11 +6406,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 326,
-                  "startColumn": 45,
-                  "endLine": 326,
-                  "endColumn": 71,
-                  "byteLength": 26
+                  "startLine": 73,
+                  "startColumn": 23,
+                  "endLine": 73,
+                  "endColumn": 46,
+                  "byteLength": 23
                 }
               }
             }
@@ -6353,7 +6420,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_range." },
+          "message": { "text": "assigns clause in function atof." },
           "locations": [
             {
               "physicalLocation": {
@@ -6362,11 +6429,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
-                  "startColumn": 24,
-                  "endLine": 329,
-                  "endColumn": 67,
-                  "byteLength": 43
+                  "startLine": 76,
+                  "startColumn": 14,
+                  "endLine": 76,
+                  "endColumn": 18,
+                  "byteLength": 4
                 }
               }
             }
@@ -6376,7 +6443,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function erand48." },
+          "message": {
+            "text": "from clause of term \\result in function atof."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6385,11 +6454,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 327,
+                  "startLine": 74,
                   "startColumn": 10,
-                  "endLine": 327,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "endLine": 74,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -6399,9 +6468,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function erand48."
-          },
+          "message": { "text": "behavior default! in function atoi." },
           "locations": [
             {
               "physicalLocation": {
@@ -6410,11 +6477,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 327,
-                  "startColumn": 10,
-                  "endLine": 327,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 82,
+                  "startColumn": 11,
+                  "endLine": 82,
+                  "endColumn": 15,
+                  "byteLength": 4
                 }
               }
             }
@@ -6424,9 +6491,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function erand48."
-          },
+          "message": { "text": "valid_nptr." },
           "locations": [
             {
               "physicalLocation": {
@@ -6435,11 +6500,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 328,
-                  "startColumn": 10,
-                  "endLine": 328,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 79,
+                  "startColumn": 23,
+                  "endLine": 79,
+                  "endColumn": 46,
+                  "byteLength": 23
                 }
               }
             }
@@ -6449,7 +6514,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function exit." },
+          "message": { "text": "assigns clause in function atoi." },
           "locations": [
             {
               "physicalLocation": {
@@ -6458,10 +6523,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 511,
-                  "startColumn": 12,
-                  "endLine": 511,
-                  "endColumn": 16,
+                  "startLine": 82,
+                  "startColumn": 11,
+                  "endLine": 82,
+                  "endColumn": 15,
                   "byteLength": 4
                 }
               }
@@ -6472,7 +6537,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "status." },
+          "message": {
+            "text": "from clause of term \\result in function atoi."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6481,11 +6548,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 508,
-                  "startColumn": 16,
-                  "endLine": 508,
-                  "endColumn": 38,
-                  "byteLength": 22
+                  "startLine": 80,
+                  "startColumn": 10,
+                  "endLine": 80,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -6495,7 +6562,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "never_terminates." },
+          "message": { "text": "behavior default! in function atol." },
           "locations": [
             {
               "physicalLocation": {
@@ -6504,11 +6571,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 509,
-                  "startColumn": 28,
-                  "endLine": 509,
-                  "endColumn": 34,
-                  "byteLength": 6
+                  "startLine": 88,
+                  "startColumn": 16,
+                  "endLine": 88,
+                  "endColumn": 20,
+                  "byteLength": 4
                 }
               }
             }
@@ -6518,7 +6585,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function exit." },
+          "message": { "text": "valid_nptr." },
           "locations": [
             {
               "physicalLocation": {
@@ -6527,11 +6594,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 507,
-                  "startColumn": 10,
-                  "endLine": 507,
-                  "endColumn": 22,
-                  "byteLength": 12
+                  "startLine": 85,
+                  "startColumn": 23,
+                  "endLine": 85,
+                  "endColumn": 46,
+                  "byteLength": 23
                 }
               }
             }
@@ -6541,9 +6608,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\exit_status in function exit."
-          },
+          "message": { "text": "assigns clause in function atol." },
           "locations": [
             {
               "physicalLocation": {
@@ -6552,11 +6617,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 507,
-                  "startColumn": 10,
-                  "endLine": 507,
-                  "endColumn": 22,
-                  "byteLength": 12
+                  "startLine": 88,
+                  "startColumn": 16,
+                  "endLine": 88,
+                  "endColumn": 20,
+                  "byteLength": 4
                 }
               }
             }
@@ -6566,7 +6631,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior deallocation in function free." },
+          "message": {
+            "text": "from clause of term \\result in function atol."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6575,11 +6642,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 420,
-                  "startColumn": 12,
-                  "endLine": 420,
-                  "endColumn": 16,
-                  "byteLength": 4
+                  "startLine": 86,
+                  "startColumn": 10,
+                  "endLine": 86,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -6589,7 +6656,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function free." },
+          "message": { "text": "behavior default! in function atoll." },
           "locations": [
             {
               "physicalLocation": {
@@ -6598,11 +6665,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 420,
-                  "startColumn": 12,
-                  "endLine": 420,
-                  "endColumn": 16,
-                  "byteLength": 4
+                  "startLine": 94,
+                  "startColumn": 21,
+                  "endLine": 94,
+                  "endColumn": 26,
+                  "byteLength": 5
                 }
               }
             }
@@ -6612,7 +6679,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior no_deallocation in function free." },
+          "message": { "text": "valid_nptr." },
           "locations": [
             {
               "physicalLocation": {
@@ -6621,11 +6688,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 420,
-                  "startColumn": 12,
-                  "endLine": 420,
-                  "endColumn": 16,
-                  "byteLength": 4
+                  "startLine": 91,
+                  "startColumn": 23,
+                  "endLine": 91,
+                  "endColumn": 46,
+                  "byteLength": 23
                 }
               }
             }
@@ -6635,7 +6702,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "freeable." },
+          "message": { "text": "assigns clause in function atoll." },
           "locations": [
             {
               "physicalLocation": {
@@ -6644,11 +6711,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 406,
-                  "startColumn": 23,
-                  "endLine": 406,
-                  "endColumn": 47,
-                  "byteLength": 24
+                  "startLine": 94,
+                  "startColumn": 21,
+                  "endLine": 94,
+                  "endColumn": 26,
+                  "byteLength": 5
                 }
               }
             }
@@ -6658,7 +6725,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "nonnull_p." },
+          "message": {
+            "text": "from clause of term \\result in function atoll."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6667,11 +6736,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 410,
-                  "startColumn": 23,
-                  "endLine": 410,
-                  "endColumn": 31,
-                  "byteLength": 8
+                  "startLine": 92,
+                  "startColumn": 10,
+                  "endLine": 92,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -6681,7 +6750,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_p." },
+          "message": { "text": "behavior default! in function bsearch." },
           "locations": [
             {
               "physicalLocation": {
@@ -6690,11 +6759,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 414,
-                  "startColumn": 20,
-                  "endLine": 414,
-                  "endColumn": 28,
-                  "byteLength": 8
+                  "startLine": 652,
+                  "startColumn": 13,
+                  "endLine": 652,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -6704,7 +6773,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "freed." },
+          "message": { "text": "valid_function_compar." },
           "locations": [
             {
               "physicalLocation": {
@@ -6713,11 +6782,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 412,
-                  "startColumn": 19,
-                  "endLine": 412,
-                  "endColumn": 32,
-                  "byteLength": 13
+                  "startLine": 645,
+                  "startColumn": 34,
+                  "endLine": 645,
+                  "endColumn": 57,
+                  "byteLength": 23
                 }
               }
             }
@@ -6727,7 +6796,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function free." },
+          "message": { "text": "null_or_correct_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -6736,11 +6805,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 411,
-                  "startColumn": 12,
-                  "endLine": 411,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "startLine": 649,
+                  "startColumn": 34,
+                  "endLine": 650,
+                  "endColumn": 76,
+                  "byteLength": 96
                 }
               }
             }
@@ -6750,7 +6819,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function free." },
+          "message": { "text": "assigns clause in function bsearch." },
           "locations": [
             {
               "physicalLocation": {
@@ -6759,11 +6828,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 408,
-                  "startColumn": 12,
-                  "endLine": 408,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "startLine": 652,
+                  "startColumn": 13,
+                  "endLine": 652,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -6773,7 +6842,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function free." },
+          "message": {
+            "text": "from clause of term \\result in function bsearch."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -6782,11 +6853,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 420,
-                  "startColumn": 12,
-                  "endLine": 420,
-                  "endColumn": 16,
-                  "byteLength": 4
+                  "startLine": 646,
+                  "startColumn": 10,
+                  "endLine": 646,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -6796,22 +6867,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_heap_status in function free."
-          },
+          "message": { "text": "behavior default! in function bzero." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/strings.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 411,
+                  "startLine": 40,
                   "startColumn": 12,
-                  "endLine": 411,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "endLine": 40,
+                  "endColumn": 17,
+                  "byteLength": 5
                 }
               }
             }
@@ -6821,22 +6890,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_heap_status in function free."
-          },
+          "message": { "text": "valid_memory_area." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/strings.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 408,
-                  "startColumn": 12,
-                  "endLine": 408,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "startLine": 36,
+                  "startColumn": 32,
+                  "endLine": 36,
+                  "endColumn": 63,
+                  "byteLength": 31
                 }
               }
             }
@@ -6846,20 +6913,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocates/frees clause in function free." },
+          "message": { "text": "s_initialized." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/strings.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 407,
-                  "startColumn": 10,
-                  "endLine": 407,
-                  "endColumn": 11,
-                  "byteLength": 1
+                  "startLine": 38,
+                  "startColumn": 39,
+                  "endLine": 38,
+                  "endColumn": 75,
+                  "byteLength": 36
                 }
               }
             }
@@ -6869,20 +6936,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocates/frees clause in function free." },
+          "message": { "text": "zero_initialized." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/strings.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 420,
-                  "startColumn": 12,
-                  "endLine": 420,
-                  "endColumn": 16,
-                  "byteLength": 4
+                  "startLine": 39,
+                  "startColumn": 28,
+                  "endLine": 39,
+                  "endColumn": 63,
+                  "byteLength": 35
                 }
               }
             }
@@ -6892,20 +6959,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function free." },
+          "message": { "text": "assigns clause in function bzero." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/strings.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 420,
-                  "startColumn": 12,
-                  "endLine": 420,
-                  "endColumn": 16,
-                  "byteLength": 4
+                  "startLine": 37,
+                  "startColumn": 10,
+                  "endLine": 37,
+                  "endColumn": 31,
+                  "byteLength": 21
                 }
               }
             }
@@ -6915,20 +6982,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function free." },
+          "message": {
+            "text": "from clause of term *((char *)s + (0 .. n - 1)) in function bzero."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/strings.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 420,
-                  "startColumn": 12,
-                  "endLine": 420,
-                  "endColumn": 16,
-                  "byteLength": 4
+                  "startLine": 37,
+                  "startColumn": 10,
+                  "endLine": 37,
+                  "endColumn": 31,
+                  "byteLength": 21
                 }
               }
             }
@@ -6938,7 +7007,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function getenv." },
+          "message": { "text": "behavior allocation in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -6947,9 +7016,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 526,
+                  "startLine": 418,
                   "startColumn": 13,
-                  "endLine": 526,
+                  "endLine": 418,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -6961,7 +7030,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_name." },
+          "message": { "text": "behavior default! in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -6970,11 +7039,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 522,
-                  "startColumn": 23,
-                  "endLine": 522,
-                  "endColumn": 46,
-                  "byteLength": 23
+                  "startLine": 418,
+                  "startColumn": 13,
+                  "endLine": 418,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -6984,7 +7053,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_or_valid_result." },
+          "message": { "text": "behavior no_allocation in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -6993,11 +7062,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 524,
-                  "startColumn": 32,
-                  "endLine": 524,
-                  "endColumn": 67,
-                  "byteLength": 35
+                  "startLine": 418,
+                  "startColumn": 13,
+                  "endLine": 418,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -7007,7 +7076,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function getenv." },
+          "message": { "text": "can_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -7016,11 +7085,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 526,
-                  "startColumn": 13,
-                  "endLine": 526,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 405,
+                  "startColumn": 26,
+                  "endLine": 405,
+                  "endColumn": 52,
+                  "byteLength": 26
                 }
               }
             }
@@ -7030,9 +7099,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function getenv."
-          },
+          "message": { "text": "cannot_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -7041,11 +7108,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 523,
-                  "startColumn": 10,
-                  "endLine": 523,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 411,
+                  "startColumn": 29,
+                  "endLine": 411,
+                  "endColumn": 56,
+                  "byteLength": 27
                 }
               }
             }
@@ -7055,7 +7122,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function jrand48." },
+          "message": { "text": "allocation." },
           "locations": [
             {
               "physicalLocation": {
@@ -7064,11 +7131,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 363,
-                  "startColumn": 16,
-                  "endLine": 363,
-                  "endColumn": 23,
-                  "byteLength": 7
+                  "startLine": 406,
+                  "startColumn": 24,
+                  "endLine": 406,
+                  "endColumn": 53,
+                  "byteLength": 29
                 }
               }
             }
@@ -7087,11 +7154,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 358,
-                  "startColumn": 45,
-                  "endLine": 358,
-                  "endColumn": 71,
-                  "byteLength": 26
+                  "startLine": 407,
+                  "startColumn": 28,
+                  "endLine": 407,
+                  "endColumn": 77,
+                  "byteLength": 49
                 }
               }
             }
@@ -7101,7 +7168,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_range." },
+          "message": { "text": "zero_initialization." },
           "locations": [
             {
               "physicalLocation": {
@@ -7110,11 +7177,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 361,
-                  "startColumn": 24,
-                  "endLine": 361,
-                  "endColumn": 59,
-                  "byteLength": 35
+                  "startLine": 408,
+                  "startColumn": 33,
+                  "endLine": 408,
+                  "endColumn": 81,
+                  "byteLength": 48
                 }
               }
             }
@@ -7124,7 +7191,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function jrand48." },
+          "message": { "text": "null_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -7133,11 +7200,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 359,
-                  "startColumn": 10,
-                  "endLine": 359,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 414,
+                  "startColumn": 25,
+                  "endLine": 414,
+                  "endColumn": 41,
+                  "byteLength": 16
                 }
               }
             }
@@ -7147,9 +7214,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function jrand48."
-          },
+          "message": { "text": "assigns clause in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -7158,11 +7223,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 359,
+                  "startLine": 400,
                   "startColumn": 10,
-                  "endLine": 359,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "endLine": 400,
+                  "endColumn": 26,
+                  "byteLength": 16
                 }
               }
             }
@@ -7172,9 +7237,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function jrand48."
-          },
+          "message": { "text": "assigns clause in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -7183,11 +7246,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 360,
-                  "startColumn": 10,
-                  "endLine": 360,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 418,
+                  "startColumn": 13,
+                  "endLine": 418,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -7197,7 +7260,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function labs." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function calloc."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7206,11 +7271,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 625,
-                  "startColumn": 16,
-                  "endLine": 625,
-                  "endColumn": 20,
-                  "byteLength": 4
+                  "startLine": 400,
+                  "startColumn": 10,
+                  "endLine": 400,
+                  "endColumn": 26,
+                  "byteLength": 16
                 }
               }
             }
@@ -7220,20 +7285,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior negative in function labs." },
-          "locations": [
-            {
+          "message": {
+            "text": "from clause of term \\result in function calloc."
+          },
+          "locations": [
+            {
               "physicalLocation": {
                 "artifactLocation": {
                   "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 625,
-                  "startColumn": 16,
-                  "endLine": 625,
-                  "endColumn": 20,
-                  "byteLength": 4
+                  "startLine": 401,
+                  "startColumn": 10,
+                  "endLine": 401,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -7243,7 +7310,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior nonnegative in function labs." },
+          "message": {
+            "text": "from clause of term \\result in function calloc."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7252,11 +7321,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 625,
-                  "startColumn": 16,
-                  "endLine": 625,
-                  "endColumn": 20,
-                  "byteLength": 4
+                  "startLine": 413,
+                  "startColumn": 12,
+                  "endLine": 413,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -7266,7 +7335,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "abs_representable." },
+          "message": { "text": "allocates/frees clause in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -7275,11 +7344,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 614,
-                  "startColumn": 30,
-                  "endLine": 614,
-                  "endColumn": 62,
-                  "byteLength": 32
+                  "startLine": 399,
+                  "startColumn": 12,
+                  "endLine": 399,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -7289,7 +7358,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "negative." },
+          "message": { "text": "allocates/frees clause in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -7298,11 +7367,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 617,
-                  "startColumn": 22,
-                  "endLine": 617,
-                  "endColumn": 27,
-                  "byteLength": 5
+                  "startLine": 418,
+                  "startColumn": 13,
+                  "endLine": 418,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -7312,7 +7381,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "nonnegative." },
+          "message": { "text": "complete clause in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -7321,10 +7390,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 620,
-                  "startColumn": 25,
-                  "endLine": 620,
-                  "endColumn": 31,
+                  "startLine": 418,
+                  "startColumn": 13,
+                  "endLine": 418,
+                  "endColumn": 19,
                   "byteLength": 6
                 }
               }
@@ -7335,7 +7404,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "opposite_result." },
+          "message": { "text": "disjoint clause in function calloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -7344,11 +7413,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 618,
-                  "startColumn": 29,
-                  "endLine": 618,
-                  "endColumn": 42,
-                  "byteLength": 13
+                  "startLine": 418,
+                  "startColumn": 13,
+                  "endLine": 418,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -7358,7 +7427,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "same_result." },
+          "message": {
+            "text": "behavior default! in function canonicalize_file_name."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7367,11 +7438,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 621,
-                  "startColumn": 25,
-                  "endLine": 621,
-                  "endColumn": 37,
-                  "byteLength": 12
+                  "startLine": 901,
+                  "startColumn": 13,
+                  "endLine": 901,
+                  "endColumn": 35,
+                  "byteLength": 22
                 }
               }
             }
@@ -7381,7 +7452,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function labs." },
+          "message": {
+            "text": "assigns clause in function canonicalize_file_name."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7390,11 +7463,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 625,
-                  "startColumn": 16,
-                  "endLine": 625,
-                  "endColumn": 20,
-                  "byteLength": 4
+                  "startLine": 901,
+                  "startColumn": 13,
+                  "endLine": 901,
+                  "endColumn": 35,
+                  "byteLength": 22
                 }
               }
             }
@@ -7405,7 +7478,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function labs."
+            "text": "from clause of term \\result in function canonicalize_file_name."
           },
           "locations": [
             {
@@ -7415,9 +7488,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 615,
+                  "startLine": 899,
                   "startColumn": 10,
-                  "endLine": 615,
+                  "endLine": 899,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -7429,7 +7502,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function labs." },
+          "message": {
+            "text": "allocates/frees clause in function canonicalize_file_name."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7438,11 +7513,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 625,
-                  "startColumn": 16,
-                  "endLine": 625,
-                  "endColumn": 20,
-                  "byteLength": 4
+                  "startLine": 898,
+                  "startColumn": 12,
+                  "endLine": 898,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -7452,20 +7527,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function labs." },
+          "message": {
+            "text": "behavior default! in function char_equal_ignore_case."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 625,
-                  "startColumn": 16,
-                  "endLine": 625,
-                  "endColumn": 20,
-                  "byteLength": 4
+                  "startLine": 178,
+                  "startColumn": 11,
+                  "endLine": 184,
+                  "endColumn": 1,
+                  "byteLength": 229
                 }
               }
             }
@@ -7475,20 +7552,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function lcong48." },
+          "message": {
+            "text": "assigns clause in function char_equal_ignore_case."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 315,
-                  "startColumn": 12,
-                  "endLine": 315,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 178,
+                  "startColumn": 11,
+                  "endLine": 184,
+                  "endColumn": 1,
+                  "byteLength": 229
                 }
               }
             }
@@ -7498,20 +7577,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "random48_initialized." },
+          "message": {
+            "text": "from clause of term \\result in function char_equal_ignore_case."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 313,
-                  "startColumn": 32,
-                  "endLine": 313,
-                  "endColumn": 55,
-                  "byteLength": 23
+                  "startLine": 176,
+                  "startColumn": 10,
+                  "endLine": 176,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -7521,7 +7602,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function lcong48." },
+          "message": { "text": "behavior default! in function div." },
           "locations": [
             {
               "physicalLocation": {
@@ -7530,11 +7611,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 311,
-                  "startColumn": 10,
-                  "endLine": 311,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 715,
+                  "startColumn": 13,
+                  "endLine": 715,
+                  "endColumn": 16,
+                  "byteLength": 3
                 }
               }
             }
@@ -7544,9 +7625,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function lcong48."
-          },
+          "message": { "text": "denom_nonzero." },
           "locations": [
             {
               "physicalLocation": {
@@ -7555,11 +7634,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 311,
-                  "startColumn": 10,
-                  "endLine": 311,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 711,
+                  "startColumn": 26,
+                  "endLine": 711,
+                  "endColumn": 36,
+                  "byteLength": 10
                 }
               }
             }
@@ -7569,9 +7648,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_init in function lcong48."
-          },
+          "message": { "text": "no_overflow." },
           "locations": [
             {
               "physicalLocation": {
@@ -7580,11 +7657,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 312,
-                  "startColumn": 10,
-                  "endLine": 312,
-                  "endColumn": 28,
-                  "byteLength": 18
+                  "startLine": 712,
+                  "startColumn": 24,
+                  "endLine": 712,
+                  "endColumn": 68,
+                  "byteLength": 44
                 }
               }
             }
@@ -7594,7 +7671,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function ldiv." },
+          "message": { "text": "assigns clause in function div." },
           "locations": [
             {
               "physicalLocation": {
@@ -7603,11 +7680,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 644,
-                  "startColumn": 14,
-                  "endLine": 644,
-                  "endColumn": 18,
-                  "byteLength": 4
+                  "startLine": 715,
+                  "startColumn": 13,
+                  "endLine": 715,
+                  "endColumn": 16,
+                  "byteLength": 3
                 }
               }
             }
@@ -7617,7 +7694,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function ldiv." },
+          "message": {
+            "text": "from clause of term \\result in function div."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7626,11 +7705,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 644,
-                  "startColumn": 14,
-                  "endLine": 644,
-                  "endColumn": 18,
-                  "byteLength": 4
+                  "startLine": 713,
+                  "startColumn": 10,
+                  "endLine": 713,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -7640,9 +7719,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function ldiv."
-          },
+          "message": { "text": "behavior default! in function drand48." },
           "locations": [
             {
               "physicalLocation": {
@@ -7651,10 +7728,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 643,
-                  "startColumn": 12,
-                  "endLine": 643,
-                  "endColumn": 19,
+                  "startLine": 352,
+                  "startColumn": 14,
+                  "endLine": 352,
+                  "endColumn": 21,
                   "byteLength": 7
                 }
               }
@@ -7665,7 +7742,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function llabs." },
+          "message": { "text": "random48_initialized." },
           "locations": [
             {
               "physicalLocation": {
@@ -7674,11 +7751,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 639,
-                  "startColumn": 21,
-                  "endLine": 639,
-                  "endColumn": 26,
-                  "byteLength": 5
+                  "startLine": 347,
+                  "startColumn": 33,
+                  "endLine": 347,
+                  "endColumn": 56,
+                  "byteLength": 23
                 }
               }
             }
@@ -7688,7 +7765,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior negative in function llabs." },
+          "message": { "text": "result_range." },
           "locations": [
             {
               "physicalLocation": {
@@ -7697,11 +7774,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 639,
-                  "startColumn": 21,
-                  "endLine": 639,
-                  "endColumn": 26,
-                  "byteLength": 5
+                  "startLine": 350,
+                  "startColumn": 24,
+                  "endLine": 350,
+                  "endColumn": 67,
+                  "byteLength": 43
                 }
               }
             }
@@ -7711,7 +7788,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior nonnegative in function llabs." },
+          "message": { "text": "assigns clause in function drand48." },
           "locations": [
             {
               "physicalLocation": {
@@ -7720,11 +7797,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 639,
-                  "startColumn": 21,
-                  "endLine": 639,
-                  "endColumn": 26,
-                  "byteLength": 5
+                  "startLine": 348,
+                  "startColumn": 10,
+                  "endLine": 348,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -7734,8 +7811,10 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "abs_representable." },
-          "locations": [
+          "message": {
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function drand48."
+          },
+          "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
@@ -7743,11 +7822,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 628,
-                  "startColumn": 30,
-                  "endLine": 628,
-                  "endColumn": 64,
-                  "byteLength": 34
+                  "startLine": 348,
+                  "startColumn": 10,
+                  "endLine": 348,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -7757,7 +7836,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "negative." },
+          "message": {
+            "text": "from clause of term \\result in function drand48."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7766,11 +7847,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 631,
-                  "startColumn": 22,
-                  "endLine": 631,
-                  "endColumn": 27,
-                  "byteLength": 5
+                  "startLine": 349,
+                  "startColumn": 10,
+                  "endLine": 349,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -7780,7 +7861,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "nonnegative." },
+          "message": { "text": "behavior default! in function erand48." },
           "locations": [
             {
               "physicalLocation": {
@@ -7789,11 +7870,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 634,
-                  "startColumn": 25,
-                  "endLine": 634,
-                  "endColumn": 31,
-                  "byteLength": 6
+                  "startLine": 361,
+                  "startColumn": 14,
+                  "endLine": 361,
+                  "endColumn": 21,
+                  "byteLength": 7
                 }
               }
             }
@@ -7803,7 +7884,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "opposite_result." },
+          "message": { "text": "valid_xsubi." },
           "locations": [
             {
               "physicalLocation": {
@@ -7812,11 +7893,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 632,
-                  "startColumn": 29,
-                  "endLine": 632,
-                  "endColumn": 42,
-                  "byteLength": 13
+                  "startLine": 355,
+                  "startColumn": 24,
+                  "endLine": 355,
+                  "endColumn": 44,
+                  "byteLength": 20
                 }
               }
             }
@@ -7826,7 +7907,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "same_result." },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
@@ -7835,11 +7916,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 635,
-                  "startColumn": 25,
-                  "endLine": 635,
-                  "endColumn": 37,
-                  "byteLength": 12
+                  "startLine": 356,
+                  "startColumn": 45,
+                  "endLine": 356,
+                  "endColumn": 71,
+                  "byteLength": 26
                 }
               }
             }
@@ -7849,7 +7930,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function llabs." },
+          "message": { "text": "result_range." },
           "locations": [
             {
               "physicalLocation": {
@@ -7858,11 +7939,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 639,
-                  "startColumn": 21,
-                  "endLine": 639,
-                  "endColumn": 26,
-                  "byteLength": 5
+                  "startLine": 359,
+                  "startColumn": 24,
+                  "endLine": 359,
+                  "endColumn": 67,
+                  "byteLength": 43
                 }
               }
             }
@@ -7872,9 +7953,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function llabs."
-          },
+          "message": { "text": "assigns clause in function erand48." },
           "locations": [
             {
               "physicalLocation": {
@@ -7883,11 +7962,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 629,
+                  "startLine": 357,
                   "startColumn": 10,
-                  "endLine": 629,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "endLine": 357,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -7897,7 +7976,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function llabs." },
+          "message": {
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function erand48."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7906,11 +7987,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 639,
-                  "startColumn": 21,
-                  "endLine": 639,
-                  "endColumn": 26,
-                  "byteLength": 5
+                  "startLine": 357,
+                  "startColumn": 10,
+                  "endLine": 357,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -7920,7 +8001,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function llabs." },
+          "message": {
+            "text": "from clause of term \\result in function erand48."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7929,11 +8012,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 639,
-                  "startColumn": 21,
-                  "endLine": 639,
-                  "endColumn": 26,
-                  "byteLength": 5
+                  "startLine": 358,
+                  "startColumn": 10,
+                  "endLine": 358,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -7943,7 +8026,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function lldiv." },
+          "message": { "text": "behavior default! in function exit." },
           "locations": [
             {
               "physicalLocation": {
@@ -7952,11 +8035,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 646,
-                  "startColumn": 15,
-                  "endLine": 646,
-                  "endColumn": 20,
-                  "byteLength": 5
+                  "startLine": 543,
+                  "startColumn": 12,
+                  "endLine": 543,
+                  "endColumn": 16,
+                  "byteLength": 4
                 }
               }
             }
@@ -7966,7 +8049,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function lldiv." },
+          "message": { "text": "status." },
           "locations": [
             {
               "physicalLocation": {
@@ -7975,11 +8058,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 646,
-                  "startColumn": 15,
-                  "endLine": 646,
-                  "endColumn": 20,
-                  "byteLength": 5
+                  "startLine": 540,
+                  "startColumn": 16,
+                  "endLine": 540,
+                  "endColumn": 38,
+                  "byteLength": 22
                 }
               }
             }
@@ -7989,9 +8072,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function lldiv."
-          },
+          "message": { "text": "never_terminates." },
           "locations": [
             {
               "physicalLocation": {
@@ -8000,11 +8081,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 645,
-                  "startColumn": 12,
-                  "endLine": 645,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 541,
+                  "startColumn": 28,
+                  "endLine": 541,
+                  "endColumn": 34,
+                  "byteLength": 6
                 }
               }
             }
@@ -8014,7 +8095,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function lrand48." },
+          "message": { "text": "assigns clause in function exit." },
           "locations": [
             {
               "physicalLocation": {
@@ -8023,11 +8104,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 339,
-                  "startColumn": 16,
-                  "endLine": 339,
-                  "endColumn": 23,
-                  "byteLength": 7
+                  "startLine": 539,
+                  "startColumn": 10,
+                  "endLine": 539,
+                  "endColumn": 22,
+                  "byteLength": 12
                 }
               }
             }
@@ -8037,7 +8118,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "random48_initialized." },
+          "message": {
+            "text": "from clause of term \\exit_status in function exit."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -8046,11 +8129,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 334,
-                  "startColumn": 33,
-                  "endLine": 334,
-                  "endColumn": 56,
-                  "byteLength": 23
+                  "startLine": 539,
+                  "startColumn": 10,
+                  "endLine": 539,
+                  "endColumn": 22,
+                  "byteLength": 12
                 }
               }
             }
@@ -8060,7 +8143,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_range." },
+          "message": { "text": "behavior deallocation in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8069,11 +8152,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 337,
-                  "startColumn": 24,
-                  "endLine": 337,
-                  "endColumn": 49,
-                  "byteLength": 25
+                  "startLine": 452,
+                  "startColumn": 12,
+                  "endLine": 452,
+                  "endColumn": 16,
+                  "byteLength": 4
                 }
               }
             }
@@ -8083,7 +8166,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function lrand48." },
+          "message": { "text": "behavior default! in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8092,11 +8175,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 335,
-                  "startColumn": 10,
-                  "endLine": 335,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 452,
+                  "startColumn": 12,
+                  "endLine": 452,
+                  "endColumn": 16,
+                  "byteLength": 4
                 }
               }
             }
@@ -8106,9 +8189,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function lrand48."
-          },
+          "message": { "text": "behavior no_deallocation in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8117,11 +8198,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 335,
-                  "startColumn": 10,
-                  "endLine": 335,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 452,
+                  "startColumn": 12,
+                  "endLine": 452,
+                  "endColumn": 16,
+                  "byteLength": 4
                 }
               }
             }
@@ -8131,9 +8212,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function lrand48."
-          },
+          "message": { "text": "freeable." },
           "locations": [
             {
               "physicalLocation": {
@@ -8142,11 +8221,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 336,
-                  "startColumn": 10,
-                  "endLine": 336,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 438,
+                  "startColumn": 23,
+                  "endLine": 438,
+                  "endColumn": 47,
+                  "byteLength": 24
                 }
               }
             }
@@ -8156,7 +8235,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior allocation in function malloc." },
+          "message": { "text": "nonnull_p." },
           "locations": [
             {
               "physicalLocation": {
@@ -8165,11 +8244,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
-                  "startColumn": 13,
-                  "endLine": 404,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 442,
+                  "startColumn": 23,
+                  "endLine": 442,
+                  "endColumn": 31,
+                  "byteLength": 8
                 }
               }
             }
@@ -8179,7 +8258,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function malloc." },
+          "message": { "text": "null_p." },
           "locations": [
             {
               "physicalLocation": {
@@ -8188,11 +8267,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
-                  "startColumn": 13,
-                  "endLine": 404,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 446,
+                  "startColumn": 20,
+                  "endLine": 446,
+                  "endColumn": 28,
+                  "byteLength": 8
                 }
               }
             }
@@ -8202,7 +8281,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior no_allocation in function malloc." },
+          "message": { "text": "freed." },
           "locations": [
             {
               "physicalLocation": {
@@ -8211,11 +8290,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
-                  "startColumn": 13,
-                  "endLine": 404,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 444,
+                  "startColumn": 19,
+                  "endLine": 444,
+                  "endColumn": 32,
+                  "byteLength": 13
                 }
               }
             }
@@ -8225,7 +8304,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "can_allocate." },
+          "message": { "text": "assigns clause in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8234,11 +8313,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 392,
-                  "startColumn": 26,
-                  "endLine": 392,
-                  "endColumn": 44,
-                  "byteLength": 18
+                  "startLine": 443,
+                  "startColumn": 12,
+                  "endLine": 443,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -8248,7 +8327,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "cannot_allocate." },
+          "message": { "text": "assigns clause in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8257,11 +8336,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 397,
-                  "startColumn": 29,
-                  "endLine": 397,
-                  "endColumn": 48,
-                  "byteLength": 19
+                  "startLine": 440,
+                  "startColumn": 12,
+                  "endLine": 440,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -8271,7 +8350,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocation." },
+          "message": { "text": "assigns clause in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8280,13 +8359,13 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 395,
-                  "startColumn": 24,
-                  "endLine": 395,
-                  "endColumn": 44,
-                  "byteLength": 20
-                }
-              }
+                  "startLine": 452,
+                  "startColumn": 12,
+                  "endLine": 452,
+                  "endColumn": 16,
+                  "byteLength": 4
+                }
+              }
             }
           ]
         },
@@ -8294,7 +8373,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_result." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function free."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -8303,11 +8384,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 400,
-                  "startColumn": 25,
-                  "endLine": 400,
-                  "endColumn": 39,
-                  "byteLength": 14
+                  "startLine": 443,
+                  "startColumn": 12,
+                  "endLine": 443,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -8317,7 +8398,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function malloc." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function free."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -8326,9 +8409,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 393,
+                  "startLine": 440,
                   "startColumn": 12,
-                  "endLine": 393,
+                  "endLine": 440,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -8340,7 +8423,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function malloc." },
+          "message": { "text": "allocates/frees clause in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8349,11 +8432,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 389,
-                  "startColumn": 12,
-                  "endLine": 389,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "startLine": 439,
+                  "startColumn": 10,
+                  "endLine": 439,
+                  "endColumn": 11,
+                  "byteLength": 1
                 }
               }
             }
@@ -8363,7 +8446,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function malloc." },
+          "message": { "text": "allocates/frees clause in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8372,11 +8455,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
-                  "startColumn": 13,
-                  "endLine": 404,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 452,
+                  "startColumn": 12,
+                  "endLine": 452,
+                  "endColumn": 16,
+                  "byteLength": 4
                 }
               }
             }
@@ -8386,9 +8469,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_heap_status in function malloc."
-          },
+          "message": { "text": "complete clause in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8397,11 +8478,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 393,
+                  "startLine": 452,
                   "startColumn": 12,
-                  "endLine": 393,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "endLine": 452,
+                  "endColumn": 16,
+                  "byteLength": 4
                 }
               }
             }
@@ -8411,9 +8492,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function malloc."
-          },
+          "message": { "text": "disjoint clause in function free." },
           "locations": [
             {
               "physicalLocation": {
@@ -8422,11 +8501,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 394,
+                  "startLine": 452,
                   "startColumn": 12,
-                  "endLine": 394,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 452,
+                  "endColumn": 16,
+                  "byteLength": 4
                 }
               }
             }
@@ -8436,9 +8515,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_heap_status in function malloc."
-          },
+          "message": { "text": "behavior default! in function getenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -8447,11 +8524,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 389,
-                  "startColumn": 12,
-                  "endLine": 389,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "startLine": 560,
+                  "startColumn": 13,
+                  "endLine": 560,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -8461,9 +8538,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function malloc."
-          },
+          "message": { "text": "valid_name." },
           "locations": [
             {
               "physicalLocation": {
@@ -8472,11 +8547,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 390,
-                  "startColumn": 12,
-                  "endLine": 390,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 554,
+                  "startColumn": 23,
+                  "endLine": 554,
+                  "endColumn": 46,
+                  "byteLength": 23
                 }
               }
             }
@@ -8486,9 +8561,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function malloc."
-          },
+          "message": { "text": "null_or_valid_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -8497,11 +8570,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 398,
-                  "startColumn": 12,
-                  "endLine": 398,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 558,
+                  "startColumn": 4,
+                  "endLine": 558,
+                  "endColumn": 71,
+                  "byteLength": 67
                 }
               }
             }
@@ -8511,7 +8584,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocates/frees clause in function malloc." },
+          "message": { "text": "assigns clause in function getenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -8520,11 +8593,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 388,
-                  "startColumn": 14,
-                  "endLine": 388,
-                  "endColumn": 21,
-                  "byteLength": 7
+                  "startLine": 560,
+                  "startColumn": 13,
+                  "endLine": 560,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -8534,7 +8607,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocates/frees clause in function malloc." },
+          "message": {
+            "text": "from clause of term \\result in function getenv."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -8543,11 +8618,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
-                  "startColumn": 13,
-                  "endLine": 404,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 555,
+                  "startColumn": 10,
+                  "endLine": 555,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -8557,7 +8632,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function malloc." },
+          "message": { "text": "behavior default! in function jrand48." },
           "locations": [
             {
               "physicalLocation": {
@@ -8566,11 +8641,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
-                  "startColumn": 13,
-                  "endLine": 404,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 395,
+                  "startColumn": 16,
+                  "endLine": 395,
+                  "endColumn": 23,
+                  "byteLength": 7
                 }
               }
             }
@@ -8580,7 +8655,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function malloc." },
+          "message": { "text": "valid_xsubi." },
           "locations": [
             {
               "physicalLocation": {
@@ -8589,11 +8664,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
-                  "startColumn": 13,
-                  "endLine": 404,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 389,
+                  "startColumn": 24,
+                  "endLine": 389,
+                  "endColumn": 44,
+                  "byteLength": 20
                 }
               }
             }
@@ -8603,7 +8678,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function mblen." },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
@@ -8612,11 +8687,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 654,
-                  "startColumn": 11,
-                  "endLine": 654,
-                  "endColumn": 16,
-                  "byteLength": 5
+                  "startLine": 390,
+                  "startColumn": 45,
+                  "endLine": 390,
+                  "endColumn": 71,
+                  "byteLength": 26
                 }
               }
             }
@@ -8626,7 +8701,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mblen." },
+          "message": { "text": "result_range." },
           "locations": [
             {
               "physicalLocation": {
@@ -8635,11 +8710,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 652,
-                  "startColumn": 12,
-                  "endLine": 652,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 393,
+                  "startColumn": 24,
+                  "endLine": 393,
+                  "endColumn": 59,
+                  "byteLength": 35
                 }
               }
             }
@@ -8649,9 +8724,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function mblen."
-          },
+          "message": { "text": "assigns clause in function jrand48." },
           "locations": [
             {
               "physicalLocation": {
@@ -8660,11 +8733,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 652,
-                  "startColumn": 12,
-                  "endLine": 652,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 391,
+                  "startColumn": 10,
+                  "endLine": 391,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -8675,7 +8748,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_mblen_state in function mblen."
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function jrand48."
           },
           "locations": [
             {
@@ -8685,11 +8758,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 652,
-                  "startColumn": 21,
-                  "endLine": 652,
+                  "startLine": 391,
+                  "startColumn": 10,
+                  "endLine": 391,
                   "endColumn": 37,
-                  "byteLength": 16
+                  "byteLength": 27
                 }
               }
             }
@@ -8699,7 +8772,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function mbstowcs." },
+          "message": {
+            "text": "from clause of term \\result in function jrand48."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -8708,11 +8783,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 686,
-                  "startColumn": 14,
-                  "endLine": 686,
-                  "endColumn": 22,
-                  "byteLength": 8
+                  "startLine": 392,
+                  "startColumn": 10,
+                  "endLine": 392,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -8722,7 +8797,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": { "text": "behavior default! in function labs." },
           "locations": [
             {
               "physicalLocation": {
@@ -8731,11 +8806,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 682,
-                  "startColumn": 23,
-                  "endLine": 682,
-                  "endColumn": 42,
-                  "byteLength": 19
+                  "startLine": 694,
+                  "startColumn": 16,
+                  "endLine": 694,
+                  "endColumn": 20,
+                  "byteLength": 4
                 }
               }
             }
@@ -8745,7 +8820,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mbstowcs." },
+          "message": { "text": "behavior negative in function labs." },
           "locations": [
             {
               "physicalLocation": {
@@ -8754,11 +8829,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 683,
-                  "startColumn": 10,
-                  "endLine": 683,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 694,
+                  "startColumn": 16,
+                  "endLine": 694,
+                  "endColumn": 20,
+                  "byteLength": 4
                 }
               }
             }
@@ -8768,9 +8843,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function mbstowcs."
-          },
+          "message": { "text": "behavior nonnegative in function labs." },
           "locations": [
             {
               "physicalLocation": {
@@ -8779,11 +8852,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 683,
-                  "startColumn": 10,
-                  "endLine": 683,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 694,
+                  "startColumn": 16,
+                  "endLine": 694,
+                  "endColumn": 20,
+                  "byteLength": 4
                 }
               }
             }
@@ -8793,9 +8866,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *(pwcs + (0 .. n - 1)) in function mbstowcs."
-          },
+          "message": { "text": "abs_representable." },
           "locations": [
             {
               "physicalLocation": {
@@ -8804,11 +8875,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 684,
-                  "startColumn": 10,
-                  "endLine": 684,
-                  "endColumn": 24,
-                  "byteLength": 14
+                  "startLine": 683,
+                  "startColumn": 30,
+                  "endLine": 683,
+                  "endColumn": 62,
+                  "byteLength": 32
                 }
               }
             }
@@ -8818,7 +8889,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function mbtowc." },
+          "message": { "text": "negative." },
           "locations": [
             {
               "physicalLocation": {
@@ -8827,11 +8898,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 666,
-                  "startColumn": 11,
-                  "endLine": 666,
-                  "endColumn": 17,
-                  "byteLength": 6
+                  "startLine": 686,
+                  "startColumn": 22,
+                  "endLine": 686,
+                  "endColumn": 27,
+                  "byteLength": 5
                 }
               }
             }
@@ -8841,7 +8912,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": { "text": "nonnegative." },
           "locations": [
             {
               "physicalLocation": {
@@ -8850,11 +8921,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 659,
-                  "startColumn": 23,
-                  "endLine": 659,
-                  "endColumn": 41,
-                  "byteLength": 18
+                  "startLine": 689,
+                  "startColumn": 25,
+                  "endLine": 689,
+                  "endColumn": 31,
+                  "byteLength": 6
                 }
               }
             }
@@ -8864,7 +8935,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "consumed_range." },
+          "message": { "text": "opposite_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -8873,11 +8944,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 664,
-                  "startColumn": 26,
-                  "endLine": 664,
-                  "endColumn": 38,
-                  "byteLength": 12
+                  "startLine": 687,
+                  "startColumn": 29,
+                  "endLine": 687,
+                  "endColumn": 42,
+                  "byteLength": 13
                 }
               }
             }
@@ -8887,7 +8958,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mbtowc." },
+          "message": { "text": "same_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -8896,11 +8967,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 660,
-                  "startColumn": 10,
-                  "endLine": 660,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 690,
+                  "startColumn": 25,
+                  "endLine": 690,
+                  "endColumn": 37,
+                  "byteLength": 12
                 }
               }
             }
@@ -8910,9 +8981,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function mbtowc."
-          },
+          "message": { "text": "assigns clause in function labs." },
           "locations": [
             {
               "physicalLocation": {
@@ -8921,11 +8990,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 660,
-                  "startColumn": 10,
-                  "endLine": 660,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 694,
+                  "startColumn": 16,
+                  "endLine": 694,
+                  "endColumn": 20,
+                  "byteLength": 4
                 }
               }
             }
@@ -8936,7 +9005,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(pwc + (0 .. \\result - 1)) in function mbtowc."
+            "text": "from clause of term \\result in function labs."
           },
           "locations": [
             {
@@ -8946,11 +9015,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 662,
+                  "startLine": 684,
                   "startColumn": 10,
-                  "endLine": 662,
-                  "endColumn": 29,
-                  "byteLength": 19
+                  "endLine": 684,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -8960,9 +9029,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_mbtowc_state in function mbtowc."
-          },
+          "message": { "text": "complete clause in function labs." },
           "locations": [
             {
               "physicalLocation": {
@@ -8971,11 +9038,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 662,
-                  "startColumn": 31,
-                  "endLine": 662,
-                  "endColumn": 48,
-                  "byteLength": 17
+                  "startLine": 694,
+                  "startColumn": 16,
+                  "endLine": 694,
+                  "endColumn": 20,
+                  "byteLength": 4
                 }
               }
             }
@@ -8985,20 +9052,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function memchr." },
+          "message": { "text": "disjoint clause in function labs." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 268,
-                  "startColumn": 6,
-                  "endLine": 275,
-                  "endColumn": 1,
-                  "byteLength": 224
+                  "startLine": 694,
+                  "startColumn": 16,
+                  "endLine": 694,
+                  "endColumn": 20,
+                  "byteLength": 4
                 }
               }
             }
@@ -9008,20 +9075,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior found in function memchr." },
+          "message": { "text": "behavior default! in function lcong48." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 268,
-                  "startColumn": 6,
-                  "endLine": 275,
-                  "endColumn": 1,
-                  "byteLength": 224
+                  "startLine": 344,
+                  "startColumn": 12,
+                  "endLine": 344,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -9031,20 +9098,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior not_found in function memchr." },
+          "message": { "text": "valid_param." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 268,
-                  "startColumn": 6,
-                  "endLine": 275,
-                  "endColumn": 1,
-                  "byteLength": 224
+                  "startLine": 338,
+                  "startColumn": 24,
+                  "endLine": 338,
+                  "endColumn": 44,
+                  "byteLength": 20
                 }
               }
             }
@@ -9054,20 +9121,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid." },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 68,
-                  "startColumn": 9,
-                  "endLine": 69,
-                  "endColumn": 74,
-                  "byteLength": 100
+                  "startLine": 339,
+                  "startColumn": 45,
+                  "endLine": 339,
+                  "endColumn": 71,
+                  "byteLength": 26
                 }
               }
             }
@@ -9077,20 +9144,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "random48_initialized." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 71,
-                  "startColumn": 8,
-                  "endLine": 72,
-                  "endColumn": 71,
-                  "byteLength": 116
+                  "startLine": 342,
+                  "startColumn": 32,
+                  "endLine": 342,
+                  "endColumn": 55,
+                  "byteLength": 23
                 }
               }
             }
@@ -9100,20 +9167,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "danglingness." },
+          "message": { "text": "assigns clause in function lcong48." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 74,
-                  "startColumn": 8,
-                  "endLine": 75,
-                  "endColumn": 61,
-                  "byteLength": 80
+                  "startLine": 340,
+                  "startColumn": 10,
+                  "endLine": 340,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -9123,20 +9190,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "char_found." },
+          "message": {
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function lcong48."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 78,
-                  "startColumn": 24,
-                  "endLine": 78,
-                  "endColumn": 44,
-                  "byteLength": 20
+                  "startLine": 340,
+                  "startColumn": 10,
+                  "endLine": 340,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -9146,20 +9215,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "char_not_found." },
+          "message": {
+            "text": "from clause of term __fc_random48_init in function lcong48."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 85,
-                  "startColumn": 28,
-                  "endLine": 85,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 341,
+                  "startColumn": 10,
+                  "endLine": 341,
+                  "endColumn": 28,
+                  "byteLength": 18
                 }
               }
             }
@@ -9169,20 +9240,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_same_base." },
+          "message": { "text": "behavior default! in function ldiv." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 30,
-                  "endLine": 79,
-                  "endColumn": 66,
-                  "byteLength": 36
+                  "startLine": 722,
+                  "startColumn": 14,
+                  "endLine": 722,
+                  "endColumn": 18,
+                  "byteLength": 4
                 }
               }
             }
@@ -9192,20 +9263,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_char." },
+          "message": { "text": "denom_nonzero." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 80,
-                  "startColumn": 25,
-                  "endLine": 80,
-                  "endColumn": 45,
-                  "byteLength": 20
+                  "startLine": 718,
+                  "startColumn": 26,
+                  "endLine": 718,
+                  "endColumn": 36,
+                  "byteLength": 10
                 }
               }
             }
@@ -9215,20 +9286,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_in_str." },
+          "message": { "text": "no_overflow." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 81,
-                  "startColumn": 27,
-                  "endLine": 83,
-                  "endColumn": 54,
-                  "byteLength": 120
+                  "startLine": 719,
+                  "startColumn": 24,
+                  "endLine": 719,
+                  "endColumn": 79,
+                  "byteLength": 55
                 }
               }
             }
@@ -9238,20 +9309,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null." },
+          "message": { "text": "assigns clause in function ldiv." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 86,
-                  "startColumn": 25,
-                  "endLine": 86,
-                  "endColumn": 41,
-                  "byteLength": 16
+                  "startLine": 722,
+                  "startColumn": 14,
+                  "endLine": 722,
+                  "endColumn": 18,
+                  "byteLength": 4
                 }
               }
             }
@@ -9261,20 +9332,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memchr." },
+          "message": {
+            "text": "from clause of term \\result in function ldiv."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 268,
-                  "startColumn": 6,
-                  "endLine": 275,
-                  "endColumn": 1,
-                  "byteLength": 224
+                  "startLine": 720,
+                  "startColumn": 10,
+                  "endLine": 720,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -9284,22 +9357,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function memchr."
-          },
+          "message": { "text": "behavior default! in function llabs." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 76,
-                  "startColumn": 12,
-                  "endLine": 76,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 708,
+                  "startColumn": 21,
+                  "endLine": 708,
+                  "endColumn": 26,
+                  "byteLength": 5
                 }
               }
             }
@@ -9309,20 +9380,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function memcmp." },
+          "message": { "text": "behavior negative in function llabs." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 163,
-                  "startColumn": 4,
-                  "endLine": 171,
-                  "endColumn": 1,
-                  "byteLength": 243
+                  "startLine": 708,
+                  "startColumn": 21,
+                  "endLine": 708,
+                  "endColumn": 26,
+                  "byteLength": 5
                 }
               }
             }
@@ -9332,20 +9403,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_s1." },
+          "message": { "text": "behavior nonnegative in function llabs." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 55,
-                  "startColumn": 23,
-                  "endLine": 55,
-                  "endColumn": 49,
-                  "byteLength": 26
+                  "startLine": 708,
+                  "startColumn": 21,
+                  "endLine": 708,
+                  "endColumn": 26,
+                  "byteLength": 5
                 }
               }
             }
@@ -9355,20 +9426,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_s2." },
+          "message": { "text": "abs_representable." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 56,
-                  "startColumn": 23,
-                  "endLine": 56,
-                  "endColumn": 49,
-                  "byteLength": 26
+                  "startLine": 697,
+                  "startColumn": 30,
+                  "endLine": 697,
+                  "endColumn": 64,
+                  "byteLength": 34
                 }
               }
             }
@@ -9378,20 +9449,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "negative." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 57,
-                  "startColumn": 32,
-                  "endLine": 57,
-                  "endColumn": 68,
-                  "byteLength": 36
+                  "startLine": 700,
+                  "startColumn": 22,
+                  "endLine": 700,
+                  "endColumn": 27,
+                  "byteLength": 5
                 }
               }
             }
@@ -9401,20 +9472,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "nonnegative." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 58,
-                  "startColumn": 32,
-                  "endLine": 58,
-                  "endColumn": 68,
-                  "byteLength": 36
+                  "startLine": 703,
+                  "startColumn": 25,
+                  "endLine": 703,
+                  "endColumn": 31,
+                  "byteLength": 6
                 }
               }
             }
@@ -9424,20 +9495,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "danglingness." },
+          "message": { "text": "opposite_result." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 59,
-                  "startColumn": 30,
-                  "endLine": 59,
-                  "endColumn": 49,
-                  "byteLength": 19
+                  "startLine": 701,
+                  "startColumn": 29,
+                  "endLine": 701,
+                  "endColumn": 42,
+                  "byteLength": 13
                 }
               }
             }
@@ -9447,20 +9518,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "danglingness." },
+          "message": { "text": "same_result." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 60,
-                  "startColumn": 30,
-                  "endLine": 60,
-                  "endColumn": 49,
-                  "byteLength": 19
+                  "startLine": 704,
+                  "startColumn": 25,
+                  "endLine": 704,
+                  "endColumn": 37,
+                  "byteLength": 12
                 }
               }
             }
@@ -9470,20 +9541,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "logic_spec." },
+          "message": { "text": "assigns clause in function llabs." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 63,
-                  "startColumn": 24,
-                  "endLine": 63,
-                  "endColumn": 73,
-                  "byteLength": 49
+                  "startLine": 708,
+                  "startColumn": 21,
+                  "endLine": 708,
+                  "endColumn": 26,
+                  "byteLength": 5
                 }
               }
             }
@@ -9493,20 +9564,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memcmp." },
+          "message": {
+            "text": "from clause of term \\result in function llabs."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 163,
-                  "startColumn": 4,
-                  "endLine": 171,
-                  "endColumn": 1,
-                  "byteLength": 243
+                  "startLine": 698,
+                  "startColumn": 10,
+                  "endLine": 698,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -9516,22 +9589,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function memcmp."
-          },
+          "message": { "text": "complete clause in function llabs." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 61,
-                  "startColumn": 12,
-                  "endLine": 61,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 708,
+                  "startColumn": 21,
+                  "endLine": 708,
+                  "endColumn": 26,
+                  "byteLength": 5
                 }
               }
             }
@@ -9541,20 +9612,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function memcpy." },
+          "message": { "text": "disjoint clause in function llabs." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 30,
-                  "startColumn": 6,
-                  "endLine": 42,
-                  "endColumn": 1,
-                  "byteLength": 377
+                  "startLine": 708,
+                  "startColumn": 21,
+                  "endLine": 708,
+                  "endColumn": 26,
+                  "byteLength": 5
                 }
               }
             }
@@ -9564,20 +9635,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_dest." },
+          "message": { "text": "behavior default! in function lldiv." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 95,
-                  "startColumn": 25,
-                  "endLine": 95,
-                  "endColumn": 48,
-                  "byteLength": 23
+                  "startLine": 729,
+                  "startColumn": 15,
+                  "endLine": 729,
+                  "endColumn": 20,
+                  "byteLength": 5
                 }
               }
             }
@@ -9587,20 +9658,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_src." },
+          "message": { "text": "denom_nonzero." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 96,
-                  "startColumn": 24,
-                  "endLine": 96,
-                  "endColumn": 51,
-                  "byteLength": 27
+                  "startLine": 725,
+                  "startColumn": 26,
+                  "endLine": 725,
+                  "endColumn": 36,
+                  "byteLength": 10
                 }
               }
             }
@@ -9610,20 +9681,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": { "text": "no_overflow." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 98,
-                  "startColumn": 4,
-                  "endLine": 98,
-                  "endColumn": 62,
-                  "byteLength": 58
+                  "startLine": 726,
+                  "startColumn": 24,
+                  "endLine": 726,
+                  "endColumn": 81,
+                  "byteLength": 57
                 }
               }
             }
@@ -9633,20 +9704,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "copied_contents." },
+          "message": { "text": "assigns clause in function lldiv." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 101,
-                  "startColumn": 29,
-                  "endLine": 101,
-                  "endColumn": 76,
-                  "byteLength": 47
+                  "startLine": 729,
+                  "startColumn": 15,
+                  "endLine": 729,
+                  "endColumn": 20,
+                  "byteLength": 5
                 }
               }
             }
@@ -9656,20 +9727,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_ptr." },
+          "message": {
+            "text": "from clause of term \\result in function lldiv."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 102,
-                  "startColumn": 24,
-                  "endLine": 102,
-                  "endColumn": 39,
-                  "byteLength": 15
+                  "startLine": 727,
+                  "startColumn": 10,
+                  "endLine": 727,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -9679,20 +9752,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memcpy." },
+          "message": { "text": "behavior default! in function lrand48." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 99,
-                  "startColumn": 12,
-                  "endLine": 99,
-                  "endColumn": 35,
-                  "byteLength": 23
+                  "startLine": 369,
+                  "startColumn": 16,
+                  "endLine": 369,
+                  "endColumn": 23,
+                  "byteLength": 7
                 }
               }
             }
@@ -9702,21 +9775,19 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function memcpy."
-          },
+          "message": { "text": "random48_initialized." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 99,
-                  "startColumn": 12,
-                  "endLine": 99,
-                  "endColumn": 35,
+                  "startLine": 364,
+                  "startColumn": 33,
+                  "endLine": 364,
+                  "endColumn": 56,
                   "byteLength": 23
                 }
               }
@@ -9727,22 +9798,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function memcpy."
-          },
+          "message": { "text": "result_range." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 100,
-                  "startColumn": 12,
-                  "endLine": 100,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 367,
+                  "startColumn": 24,
+                  "endLine": 367,
+                  "endColumn": 49,
+                  "byteLength": 25
                 }
               }
             }
@@ -9752,20 +9821,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": { "text": "assigns clause in function lrand48." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 33,
-                  "startColumn": 27,
-                  "endLine": 33,
-                  "endColumn": 38,
-                  "byteLength": 11
+                  "startLine": 365,
+                  "startColumn": 10,
+                  "endLine": 365,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -9775,20 +9844,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": {
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function lrand48."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 34,
-                  "startColumn": 27,
-                  "endLine": 34,
-                  "endColumn": 92,
-                  "byteLength": 65
+                  "startLine": 365,
+                  "startColumn": 10,
+                  "endLine": 365,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -9798,20 +9869,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memcpy." },
+          "message": {
+            "text": "from clause of term \\result in function lrand48."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 35,
-                  "startColumn": 17,
-                  "endLine": 35,
-                  "endColumn": 18,
-                  "byteLength": 1
+                  "startLine": 366,
+                  "startColumn": 10,
+                  "endLine": 366,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -9821,20 +9894,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "decrease clause in function memcpy." },
+          "message": { "text": "behavior allocation in function malloc." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 36,
-                  "startColumn": 17,
-                  "endLine": 36,
-                  "endColumn": 22,
-                  "byteLength": 5
+                  "startLine": 436,
+                  "startColumn": 13,
+                  "endLine": 436,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -9843,21 +9916,21 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
-          "message": { "text": "reachability of stmt line 38 in memcpy." },
+          "level": "none",
+          "message": { "text": "behavior default! in function malloc." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 38,
-                  "startColumn": 2,
-                  "endLine": 40,
-                  "endColumn": 3,
-                  "byteLength": 76
+                  "startLine": 436,
+                  "startColumn": 13,
+                  "endLine": 436,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -9866,21 +9939,21 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
-          "message": { "text": "reachability post stmt line 38 in memcpy." },
+          "level": "none",
+          "message": { "text": "behavior no_allocation in function malloc." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 38,
-                  "startColumn": 2,
-                  "endLine": 40,
-                  "endColumn": 3,
-                  "byteLength": 76
+                  "startLine": 436,
+                  "startColumn": 13,
+                  "endLine": 436,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -9890,20 +9963,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function memmove." },
+          "message": { "text": "can_allocate." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 88,
-                  "startColumn": 6,
-                  "endLine": 118,
-                  "endColumn": 1,
-                  "byteLength": 1221
+                  "startLine": 424,
+                  "startColumn": 26,
+                  "endLine": 424,
+                  "endColumn": 44,
+                  "byteLength": 18
                 }
               }
             }
@@ -9913,20 +9986,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_dest." },
+          "message": { "text": "cannot_allocate." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 120,
-                  "startColumn": 25,
-                  "endLine": 120,
+                  "startLine": 429,
+                  "startColumn": 29,
+                  "endLine": 429,
                   "endColumn": 48,
-                  "byteLength": 23
+                  "byteLength": 19
                 }
               }
             }
@@ -9936,20 +10009,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_src." },
+          "message": { "text": "allocation." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 121,
+                  "startLine": 427,
                   "startColumn": 24,
-                  "endLine": 121,
-                  "endColumn": 51,
-                  "byteLength": 27
+                  "endLine": 427,
+                  "endColumn": 44,
+                  "byteLength": 20
                 }
               }
             }
@@ -9959,20 +10032,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "copied_contents." },
+          "message": { "text": "null_result." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 124,
-                  "startColumn": 29,
-                  "endLine": 124,
-                  "endColumn": 76,
-                  "byteLength": 47
+                  "startLine": 432,
+                  "startColumn": 25,
+                  "endLine": 432,
+                  "endColumn": 39,
+                  "byteLength": 14
                 }
               }
             }
@@ -9982,20 +10055,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_ptr." },
+          "message": { "text": "assigns clause in function malloc." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 125,
-                  "startColumn": 24,
-                  "endLine": 125,
-                  "endColumn": 39,
-                  "byteLength": 15
+                  "startLine": 425,
+                  "startColumn": 12,
+                  "endLine": 425,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -10005,20 +10078,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memmove." },
+          "message": { "text": "assigns clause in function malloc." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 122,
+                  "startLine": 421,
                   "startColumn": 12,
-                  "endLine": 122,
-                  "endColumn": 35,
-                  "byteLength": 23
+                  "endLine": 421,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -10028,22 +10101,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function memmove."
-          },
+          "message": { "text": "assigns clause in function malloc." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 122,
-                  "startColumn": 12,
-                  "endLine": 122,
-                  "endColumn": 35,
-                  "byteLength": 23
+                  "startLine": 436,
+                  "startColumn": 13,
+                  "endLine": 436,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -10054,21 +10125,21 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function memmove."
+            "text": "from clause of term __fc_heap_status in function malloc."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 123,
+                  "startLine": 425,
                   "startColumn": 12,
-                  "endLine": 123,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 425,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -10078,20 +10149,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": {
+            "text": "from clause of term \\result in function malloc."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 95,
-                  "startColumn": 29,
-                  "endLine": 95,
-                  "endColumn": 40,
-                  "byteLength": 11
+                  "startLine": 426,
+                  "startColumn": 12,
+                  "endLine": 426,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -10101,20 +10174,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function malloc."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 96,
-                  "startColumn": 29,
-                  "endLine": 96,
-                  "endColumn": 109,
-                  "byteLength": 80
+                  "startLine": 421,
+                  "startColumn": 12,
+                  "endLine": 421,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -10124,20 +10199,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": {
+            "text": "from clause of term \\result in function malloc."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 97,
-                  "startColumn": 29,
-                  "endLine": 97,
-                  "endColumn": 108,
-                  "byteLength": 79
+                  "startLine": 422,
+                  "startColumn": 12,
+                  "endLine": 422,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -10147,20 +10224,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memmove." },
+          "message": {
+            "text": "from clause of term \\result in function malloc."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 98,
-                  "startColumn": 19,
-                  "endLine": 98,
-                  "endColumn": 20,
-                  "byteLength": 1
+                  "startLine": 431,
+                  "startColumn": 12,
+                  "endLine": 431,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -10170,20 +10249,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "decrease clause in function memmove." },
+          "message": { "text": "allocates/frees clause in function malloc." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 99,
-                  "startColumn": 19,
-                  "endLine": 99,
-                  "endColumn": 24,
-                  "byteLength": 5
+                  "startLine": 420,
+                  "startColumn": 14,
+                  "endLine": 420,
+                  "endColumn": 21,
+                  "byteLength": 7
                 }
               }
             }
@@ -10192,46 +10271,3264 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
-          "message": { "text": "reachability of stmt line 101 in memmove." },
+          "level": "none",
+          "message": { "text": "allocates/frees clause in function malloc." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 101,
-                  "startColumn": 4,
-                  "endLine": 102,
-                  "endColumn": 18,
-                  "byteLength": 49
-                }
-              }
+                  "startLine": 436,
+                  "startColumn": 13,
+                  "endLine": 436,
+                  "endColumn": 19,
+                  "byteLength": 6
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "complete clause in function malloc." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 436,
+                  "startColumn": 13,
+                  "endLine": 436,
+                  "endColumn": 19,
+                  "byteLength": 6
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "disjoint clause in function malloc." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 436,
+                  "startColumn": 13,
+                  "endLine": 436,
+                  "endColumn": 19,
+                  "byteLength": 6
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function mblen." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 737,
+                  "startColumn": 11,
+                  "endLine": 737,
+                  "endColumn": 16,
+                  "byteLength": 5
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function mblen." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 735,
+                  "startColumn": 12,
+                  "endLine": 735,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function mblen."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 735,
+                  "startColumn": 12,
+                  "endLine": 735,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term __fc_mblen_state in function mblen."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 735,
+                  "startColumn": 21,
+                  "endLine": 735,
+                  "endColumn": 37,
+                  "byteLength": 16
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function mbstowcs." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 769,
+                  "startColumn": 14,
+                  "endLine": 769,
+                  "endColumn": 22,
+                  "byteLength": 8
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 765,
+                  "startColumn": 23,
+                  "endLine": 765,
+                  "endColumn": 42,
+                  "byteLength": 19
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function mbstowcs." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 766,
+                  "startColumn": 10,
+                  "endLine": 766,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function mbstowcs."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 766,
+                  "startColumn": 10,
+                  "endLine": 766,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term *(pwcs + (0 .. n - 1)) in function mbstowcs."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 767,
+                  "startColumn": 10,
+                  "endLine": 767,
+                  "endColumn": 24,
+                  "byteLength": 14
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function mbtowc." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 749,
+                  "startColumn": 11,
+                  "endLine": 749,
+                  "endColumn": 17,
+                  "byteLength": 6
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 742,
+                  "startColumn": 23,
+                  "endLine": 742,
+                  "endColumn": 41,
+                  "byteLength": 18
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "consumed_range." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 747,
+                  "startColumn": 26,
+                  "endLine": 747,
+                  "endColumn": 38,
+                  "byteLength": 12
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function mbtowc." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 743,
+                  "startColumn": 10,
+                  "endLine": 743,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function mbtowc."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 743,
+                  "startColumn": 10,
+                  "endLine": 743,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term *(pwc + (0 .. \\result - 1)) in function mbtowc."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 745,
+                  "startColumn": 10,
+                  "endLine": 745,
+                  "endColumn": 29,
+                  "byteLength": 19
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term __fc_mbtowc_state in function mbtowc."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 745,
+                  "startColumn": 31,
+                  "endLine": 745,
+                  "endColumn": 48,
+                  "byteLength": 17
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 271,
+                  "startColumn": 6,
+                  "endLine": 278,
+                  "endColumn": 1,
+                  "byteLength": 224
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior found in function memchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 271,
+                  "startColumn": 6,
+                  "endLine": 278,
+                  "endColumn": 1,
+                  "byteLength": 224
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior not_found in function memchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 271,
+                  "startColumn": 6,
+                  "endLine": 278,
+                  "endColumn": 1,
+                  "byteLength": 224
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 68,
+                  "startColumn": 9,
+                  "endLine": 69,
+                  "endColumn": 74,
+                  "byteLength": 100
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "initialization." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 71,
+                  "startColumn": 8,
+                  "endLine": 72,
+                  "endColumn": 71,
+                  "byteLength": 116
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "danglingness." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 74,
+                  "startColumn": 8,
+                  "endLine": 75,
+                  "endColumn": 61,
+                  "byteLength": 80
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "char_found." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 78,
+                  "startColumn": 24,
+                  "endLine": 78,
+                  "endColumn": 44,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "char_not_found." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 86,
+                  "startColumn": 28,
+                  "endLine": 86,
+                  "endColumn": 49,
+                  "byteLength": 21
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_valid_read." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 79,
+                  "startColumn": 31,
+                  "endLine": 79,
+                  "endColumn": 58,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_same_base." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 80,
+                  "startColumn": 30,
+                  "endLine": 80,
+                  "endColumn": 66,
+                  "byteLength": 36
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_char." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 81,
+                  "startColumn": 25,
+                  "endLine": 81,
+                  "endColumn": 45,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_in_str." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 82,
+                  "startColumn": 27,
+                  "endLine": 84,
+                  "endColumn": 54,
+                  "byteLength": 120
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_null." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 87,
+                  "startColumn": 25,
+                  "endLine": 87,
+                  "endColumn": 41,
+                  "byteLength": 16
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 271,
+                  "startColumn": 6,
+                  "endLine": 278,
+                  "endColumn": 1,
+                  "byteLength": 224
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memchr."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 76,
+                  "startColumn": 12,
+                  "endLine": 76,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memcmp." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 163,
+                  "startColumn": 4,
+                  "endLine": 171,
+                  "endColumn": 1,
+                  "byteLength": 243
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_s1." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 55,
+                  "startColumn": 23,
+                  "endLine": 55,
+                  "endColumn": 49,
+                  "byteLength": 26
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_s2." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 56,
+                  "startColumn": 23,
+                  "endLine": 56,
+                  "endColumn": 49,
+                  "byteLength": 26
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "initialization." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 57,
+                  "startColumn": 32,
+                  "endLine": 57,
+                  "endColumn": 68,
+                  "byteLength": 36
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "initialization." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 58,
+                  "startColumn": 32,
+                  "endLine": 58,
+                  "endColumn": 68,
+                  "byteLength": 36
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "danglingness." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 59,
+                  "startColumn": 30,
+                  "endLine": 59,
+                  "endColumn": 49,
+                  "byteLength": 19
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "danglingness." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 60,
+                  "startColumn": 30,
+                  "endLine": 60,
+                  "endColumn": 49,
+                  "byteLength": 19
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "logic_spec." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 63,
+                  "startColumn": 24,
+                  "endLine": 63,
+                  "endColumn": 73,
+                  "byteLength": 49
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memcmp." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 163,
+                  "startColumn": 4,
+                  "endLine": 171,
+                  "endColumn": 1,
+                  "byteLength": 243
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memcmp."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 61,
+                  "startColumn": 12,
+                  "endLine": 61,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 30,
+                  "startColumn": 6,
+                  "endLine": 42,
+                  "endColumn": 1,
+                  "byteLength": 377
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_dest." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 112,
+                  "startColumn": 25,
+                  "endLine": 112,
+                  "endColumn": 48,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_src." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 113,
+                  "startColumn": 24,
+                  "endLine": 113,
+                  "endColumn": 51,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 115,
+                  "startColumn": 4,
+                  "endLine": 115,
+                  "endColumn": 62,
+                  "byteLength": 58
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "copied_contents." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 118,
+                  "startColumn": 29,
+                  "endLine": 118,
+                  "endColumn": 76,
+                  "byteLength": 47
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_ptr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 119,
+                  "startColumn": 24,
+                  "endLine": 119,
+                  "endColumn": 39,
+                  "byteLength": 15
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 116,
+                  "startColumn": 12,
+                  "endLine": 116,
+                  "endColumn": 35,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function memcpy."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 116,
+                  "startColumn": 12,
+                  "endLine": 116,
+                  "endColumn": 35,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memcpy."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 117,
+                  "startColumn": 12,
+                  "endLine": 117,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 33,
+                  "startColumn": 27,
+                  "endLine": 33,
+                  "endColumn": 38,
+                  "byteLength": 11
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 34,
+                  "startColumn": 27,
+                  "endLine": 34,
+                  "endColumn": 92,
+                  "byteLength": 65
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 35,
+                  "startColumn": 17,
+                  "endLine": 35,
+                  "endColumn": 18,
+                  "byteLength": 1
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "decrease clause in function memcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 36,
+                  "startColumn": 17,
+                  "endLine": 36,
+                  "endColumn": 22,
+                  "byteLength": 5
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "error",
+          "message": { "text": "reachability of stmt line 38 in memcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 38,
+                  "startColumn": 2,
+                  "endLine": 40,
+                  "endColumn": 3,
+                  "byteLength": 76
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "error",
+          "message": { "text": "reachability post stmt line 38 in memcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 38,
+                  "startColumn": 2,
+                  "endLine": 40,
+                  "endColumn": 3,
+                  "byteLength": 76
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memmem." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 559,
+                  "startColumn": 13,
+                  "endLine": 559,
+                  "endColumn": 19,
+                  "byteLength": 6
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_haystack." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 549,
+                  "startColumn": 27,
+                  "endLine": 549,
+                  "endColumn": 78,
+                  "byteLength": 51
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_needle." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 550,
+                  "startColumn": 25,
+                  "endLine": 550,
+                  "endColumn": 72,
+                  "byteLength": 47
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_null_or_valid." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 555,
+                  "startColumn": 4,
+                  "endLine": 555,
+                  "endColumn": 51,
+                  "byteLength": 47
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_null_or_same_base." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 557,
+                  "startColumn": 4,
+                  "endLine": 557,
+                  "endColumn": 67,
+                  "byteLength": 63
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memmem." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 559,
+                  "startColumn": 13,
+                  "endLine": 559,
+                  "endColumn": 19,
+                  "byteLength": 6
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memmem."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 551,
+                  "startColumn": 10,
+                  "endLine": 551,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memmove." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 88,
+                  "startColumn": 6,
+                  "endLine": 118,
+                  "endColumn": 1,
+                  "byteLength": 1221
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_dest." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 137,
+                  "startColumn": 25,
+                  "endLine": 137,
+                  "endColumn": 48,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_src." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 138,
+                  "startColumn": 24,
+                  "endLine": 138,
+                  "endColumn": 51,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "copied_contents." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 141,
+                  "startColumn": 29,
+                  "endLine": 141,
+                  "endColumn": 76,
+                  "byteLength": 47
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_ptr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 142,
+                  "startColumn": 24,
+                  "endLine": 142,
+                  "endColumn": 39,
+                  "byteLength": 15
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memmove." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 139,
+                  "startColumn": 12,
+                  "endLine": 139,
+                  "endColumn": 35,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function memmove."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 139,
+                  "startColumn": 12,
+                  "endLine": 139,
+                  "endColumn": 35,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memmove."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 140,
+                  "startColumn": 12,
+                  "endLine": 140,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 95,
+                  "startColumn": 29,
+                  "endLine": 95,
+                  "endColumn": 40,
+                  "byteLength": 11
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 96,
+                  "startColumn": 29,
+                  "endLine": 96,
+                  "endColumn": 109,
+                  "byteLength": 80
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 97,
+                  "startColumn": 29,
+                  "endLine": 97,
+                  "endColumn": 108,
+                  "byteLength": 79
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memmove." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 98,
+                  "startColumn": 19,
+                  "endLine": 98,
+                  "endColumn": 20,
+                  "byteLength": 1
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "decrease clause in function memmove." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 99,
+                  "startColumn": 19,
+                  "endLine": 99,
+                  "endColumn": 24,
+                  "byteLength": 5
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "error",
+          "message": { "text": "reachability of stmt line 101 in memmove." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 101,
+                  "startColumn": 4,
+                  "endLine": 102,
+                  "endColumn": 18,
+                  "byteLength": 49
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "error",
+          "message": {
+            "text": "reachability post stmt line 101 in memmove."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 101,
+                  "startColumn": 4,
+                  "endLine": 102,
+                  "endColumn": 18,
+                  "byteLength": 49
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 107,
+                  "startColumn": 29,
+                  "endLine": 107,
+                  "endColumn": 39,
+                  "byteLength": 10
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 108,
+                  "startColumn": 29,
+                  "endLine": 108,
+                  "endColumn": 108,
+                  "byteLength": 79
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 109,
+                  "startColumn": 29,
+                  "endLine": 109,
+                  "endColumn": 109,
+                  "byteLength": 80
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memmove." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 110,
+                  "startColumn": 19,
+                  "endLine": 110,
+                  "endColumn": 20,
+                  "byteLength": 1
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "decrease clause in function memmove." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 111,
+                  "startColumn": 19,
+                  "endLine": 111,
+                  "endColumn": 20,
+                  "byteLength": 1
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "error",
+          "message": { "text": "reachability of stmt line 113 in memmove." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 113,
+                  "startColumn": 4,
+                  "endLine": 114,
+                  "endColumn": 18,
+                  "byteLength": 51
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "error",
+          "message": {
+            "text": "reachability post stmt line 113 in memmove."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 113,
+                  "startColumn": 4,
+                  "endLine": 114,
+                  "endColumn": 18,
+                  "byteLength": 51
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memoverlap." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 79,
+                  "startColumn": 11,
+                  "endLine": 86,
+                  "endColumn": 1,
+                  "byteLength": 255
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "behavior not_separated_gt in function memoverlap."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 79,
+                  "startColumn": 11,
+                  "endLine": 86,
+                  "endColumn": 1,
+                  "byteLength": 255
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "behavior not_separated_lt in function memoverlap."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 79,
+                  "startColumn": 11,
+                  "endLine": 86,
+                  "endColumn": 1,
+                  "byteLength": 255
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior separated in function memoverlap." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 79,
+                  "startColumn": 11,
+                  "endLine": 86,
+                  "endColumn": 1,
+                  "byteLength": 255
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 66,
+                  "startColumn": 35,
+                  "endLine": 66,
+                  "endColumn": 77,
+                  "byteLength": 42
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 69,
+                  "startColumn": 32,
+                  "endLine": 69,
+                  "endColumn": 75,
+                  "byteLength": 43
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "p_before_q." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 70,
+                  "startColumn": 24,
+                  "endLine": 70,
+                  "endColumn": 38,
+                  "byteLength": 14
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 73,
+                  "startColumn": 32,
+                  "endLine": 73,
+                  "endColumn": 75,
+                  "byteLength": 43
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "p_after_q." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 74,
+                  "startColumn": 23,
+                  "endLine": 74,
+                  "endColumn": 37,
+                  "byteLength": 14
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_no_overlap." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 67,
+                  "startColumn": 31,
+                  "endLine": 67,
+                  "endColumn": 43,
+                  "byteLength": 12
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_p_before_q." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 71,
+                  "startColumn": 31,
+                  "endLine": 71,
+                  "endColumn": 44,
+                  "byteLength": 13
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_p_after_q." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 75,
+                  "startColumn": 30,
+                  "endLine": 75,
+                  "endColumn": 42,
+                  "byteLength": 12
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memoverlap." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 79,
+                  "startColumn": 11,
+                  "endLine": 86,
+                  "endColumn": 1,
+                  "byteLength": 255
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memoverlap."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 64,
+                  "startColumn": 10,
+                  "endLine": 64,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "complete clause in function memoverlap." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 79,
+                  "startColumn": 11,
+                  "endLine": 86,
+                  "endColumn": 1,
+                  "byteLength": 255
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "disjoint clause in function memoverlap." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 79,
+                  "startColumn": 11,
+                  "endLine": 86,
+                  "endColumn": 1,
+                  "byteLength": 255
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function mempcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 45,
+                  "startColumn": 6,
+                  "endLine": 58,
+                  "endColumn": 1,
+                  "byteLength": 394
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_dest." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 125,
+                  "startColumn": 25,
+                  "endLine": 125,
+                  "endColumn": 48,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_src." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 126,
+                  "startColumn": 24,
+                  "endLine": 126,
+                  "endColumn": 51,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 128,
+                  "startColumn": 4,
+                  "endLine": 128,
+                  "endColumn": 62,
+                  "byteLength": 58
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "copied_contents." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 131,
+                  "startColumn": 29,
+                  "endLine": 131,
+                  "endColumn": 76,
+                  "byteLength": 47
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_next_byte." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 132,
+                  "startColumn": 30,
+                  "endLine": 132,
+                  "endColumn": 49,
+                  "byteLength": 19
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function mempcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 129,
+                  "startColumn": 12,
+                  "endLine": 129,
+                  "endColumn": 35,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function mempcpy."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 129,
+                  "startColumn": 12,
+                  "endLine": 129,
+                  "endColumn": 35,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function mempcpy."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 130,
+                  "startColumn": 12,
+                  "endLine": 130,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 49,
+                  "startColumn": 27,
+                  "endLine": 49,
+                  "endColumn": 38,
+                  "byteLength": 11
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "no_eva." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 50,
+                  "startColumn": 27,
+                  "endLine": 50,
+                  "endColumn": 92,
+                  "byteLength": 65
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function mempcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 51,
+                  "startColumn": 17,
+                  "endLine": 51,
+                  "endColumn": 18,
+                  "byteLength": 1
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "decrease clause in function mempcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 52,
+                  "startColumn": 17,
+                  "endLine": 52,
+                  "endColumn": 22,
+                  "byteLength": 5
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "error",
+          "message": { "text": "reachability of stmt line 54 in mempcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 54,
+                  "startColumn": 2,
+                  "endLine": 56,
+                  "endColumn": 3,
+                  "byteLength": 69
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "error",
+          "message": { "text": "reachability post stmt line 54 in mempcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 54,
+                  "startColumn": 2,
+                  "endLine": 56,
+                  "endColumn": 3,
+                  "byteLength": 69
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 280,
+                  "startColumn": 6,
+                  "endLine": 287,
+                  "endColumn": 1,
+                  "byteLength": 229
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior found in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 280,
+                  "startColumn": 6,
+                  "endLine": 287,
+                  "endColumn": 1,
+                  "byteLength": 229
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior not_found in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 280,
+                  "startColumn": 6,
+                  "endLine": 287,
+                  "endColumn": 1,
+                  "byteLength": 229
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 94,
+                  "startColumn": 18,
+                  "endLine": 94,
+                  "endColumn": 43,
+                  "byteLength": 25
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "initialization." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 95,
+                  "startColumn": 27,
+                  "endLine": 95,
+                  "endColumn": 73,
+                  "byteLength": 46
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "danglingness." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 96,
+                  "startColumn": 25,
+                  "endLine": 96,
+                  "endColumn": 43,
+                  "byteLength": 18
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "char_found." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 99,
+                  "startColumn": 24,
+                  "endLine": 99,
+                  "endColumn": 44,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "char_not_found." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 103,
+                  "startColumn": 28,
+                  "endLine": 103,
+                  "endColumn": 49,
+                  "byteLength": 21
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_valid_read." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 100,
+                  "startColumn": 31,
+                  "endLine": 100,
+                  "endColumn": 58,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_same_base." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 101,
+                  "startColumn": 30,
+                  "endLine": 101,
+                  "endColumn": 66,
+                  "byteLength": 36
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_null." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 104,
+                  "startColumn": 25,
+                  "endLine": 104,
+                  "endColumn": 41,
+                  "byteLength": 16
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 280,
+                  "startColumn": 6,
+                  "endLine": 287,
+                  "endColumn": 1,
+                  "byteLength": 229
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memrchr."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 97,
+                  "startColumn": 10,
+                  "endLine": 97,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "complete clause in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 280,
+                  "startColumn": 6,
+                  "endLine": 287,
+                  "endColumn": 1,
+                  "byteLength": 229
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "disjoint clause in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 280,
+                  "startColumn": 6,
+                  "endLine": 287,
+                  "endColumn": 1,
+                  "byteLength": 229
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memset." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 134,
+                  "startColumn": 6,
+                  "endLine": 141,
+                  "endColumn": 1,
+                  "byteLength": 142
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_s." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 148,
+                  "startColumn": 22,
+                  "endLine": 148,
+                  "endColumn": 42,
+                  "byteLength": 20
+                }
+              }
             }
           ]
         },
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
+          "level": "none",
+          "message": { "text": "acsl_c_equiv." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 151,
+                  "startColumn": 26,
+                  "endLine": 151,
+                  "endColumn": 46,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_ptr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 152,
+                  "startColumn": 24,
+                  "endLine": 152,
+                  "endColumn": 36,
+                  "byteLength": 12
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memset." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 149,
+                  "startColumn": 12,
+                  "endLine": 149,
+                  "endColumn": 32,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
           "message": {
-            "text": "reachability post stmt line 101 in memmove."
+            "text": "from clause of term *((char *)s + (0 .. n - 1)) in function memset."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 101,
-                  "startColumn": 4,
-                  "endLine": 102,
-                  "endColumn": 18,
-                  "byteLength": 49
+                  "startLine": 149,
+                  "startColumn": 12,
+                  "endLine": 149,
+                  "endColumn": 32,
+                  "byteLength": 20
                 }
               }
             }
@@ -10241,20 +13538,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": {
+            "text": "from clause of term \\result in function memset."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 107,
-                  "startColumn": 29,
-                  "endLine": 107,
-                  "endColumn": 39,
-                  "byteLength": 10
+                  "startLine": 150,
+                  "startColumn": 12,
+                  "endLine": 150,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -10264,20 +13563,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": { "text": "behavior default! in function mkstemp." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 108,
-                  "startColumn": 29,
-                  "endLine": 108,
-                  "endColumn": 108,
-                  "byteLength": 79
+                  "startLine": 820,
+                  "startColumn": 11,
+                  "endLine": 820,
+                  "endColumn": 18,
+                  "byteLength": 7
                 }
               }
             }
@@ -10287,20 +13586,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": { "text": "valid_template." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 109,
-                  "startColumn": 29,
-                  "endLine": 109,
-                  "endColumn": 109,
-                  "byteLength": 80
+                  "startLine": 813,
+                  "startColumn": 27,
+                  "endLine": 813,
+                  "endColumn": 48,
+                  "byteLength": 21
                 }
               }
             }
@@ -10310,20 +13609,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memmove." },
+          "message": { "text": "template_len." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 110,
-                  "startColumn": 19,
-                  "endLine": 110,
-                  "endColumn": 20,
-                  "byteLength": 1
+                  "startLine": 814,
+                  "startColumn": 25,
+                  "endLine": 814,
+                  "endColumn": 45,
+                  "byteLength": 20
                 }
               }
             }
@@ -10333,20 +13632,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "decrease clause in function memmove." },
+          "message": { "text": "result_error_or_valid_fd." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 111,
-                  "startColumn": 19,
-                  "endLine": 111,
-                  "endColumn": 20,
-                  "byteLength": 1
+                  "startLine": 817,
+                  "startColumn": 36,
+                  "endLine": 818,
+                  "endColumn": 53,
+                  "byteLength": 70
                 }
               }
             }
@@ -10355,21 +13654,21 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
-          "message": { "text": "reachability of stmt line 113 in memmove." },
+          "level": "none",
+          "message": { "text": "assigns clause in function mkstemp." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 113,
-                  "startColumn": 4,
-                  "endLine": 114,
-                  "endColumn": 18,
-                  "byteLength": 51
+                  "startLine": 815,
+                  "startColumn": 10,
+                  "endLine": 815,
+                  "endColumn": 22,
+                  "byteLength": 12
                 }
               }
             }
@@ -10378,23 +13677,94 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
+          "level": "none",
           "message": {
-            "text": "reachability post stmt line 113 in memmove."
+            "text": "from clause of term *(templat + (0 ..)) in function mkstemp."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 113,
-                  "startColumn": 4,
-                  "endLine": 114,
-                  "endColumn": 18,
-                  "byteLength": 51
+                  "startLine": 815,
+                  "startColumn": 10,
+                  "endLine": 815,
+                  "endColumn": 22,
+                  "byteLength": 12
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function mkstemp."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 816,
+                  "startColumn": 10,
+                  "endLine": 816,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function mkstemps." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 833,
+                  "startColumn": 11,
+                  "endLine": 833,
+                  "endColumn": 19,
+                  "byteLength": 8
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_template." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 825,
+                  "startColumn": 27,
+                  "endLine": 825,
+                  "endColumn": 48,
+                  "byteLength": 21
                 }
               }
             }
@@ -10404,20 +13774,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function memoverlap." },
+          "message": { "text": "template_len." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 11,
-                  "endLine": 86,
-                  "endColumn": 1,
-                  "byteLength": 255
+                  "startLine": 826,
+                  "startColumn": 25,
+                  "endLine": 826,
+                  "endColumn": 57,
+                  "byteLength": 32
                 }
               }
             }
@@ -10427,22 +13797,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior not_separated_gt in function memoverlap."
-          },
+          "message": { "text": "non_negative_suffixlen." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 11,
-                  "endLine": 86,
-                  "endColumn": 1,
-                  "byteLength": 255
+                  "startLine": 827,
+                  "startColumn": 35,
+                  "endLine": 827,
+                  "endColumn": 49,
+                  "byteLength": 14
                 }
               }
             }
@@ -10452,22 +13820,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior not_separated_lt in function memoverlap."
-          },
+          "message": { "text": "result_error_or_valid_fd." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 11,
-                  "endLine": 86,
-                  "endColumn": 1,
-                  "byteLength": 255
+                  "startLine": 830,
+                  "startColumn": 36,
+                  "endLine": 831,
+                  "endColumn": 53,
+                  "byteLength": 70
                 }
               }
             }
@@ -10477,20 +13843,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior separated in function memoverlap." },
+          "message": { "text": "assigns clause in function mkstemps." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 11,
-                  "endLine": 86,
-                  "endColumn": 1,
-                  "byteLength": 255
+                  "startLine": 828,
+                  "startColumn": 10,
+                  "endLine": 828,
+                  "endColumn": 22,
+                  "byteLength": 12
                 }
               }
             }
@@ -10500,20 +13866,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": {
+            "text": "from clause of term *(templat + (0 ..)) in function mkstemps."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 66,
-                  "startColumn": 35,
-                  "endLine": 66,
-                  "endColumn": 77,
-                  "byteLength": 42
+                  "startLine": 828,
+                  "startColumn": 10,
+                  "endLine": 828,
+                  "endColumn": 22,
+                  "byteLength": 12
                 }
               }
             }
@@ -10523,20 +13891,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": {
+            "text": "from clause of term \\result in function mkstemps."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 69,
-                  "startColumn": 32,
-                  "endLine": 69,
-                  "endColumn": 75,
-                  "byteLength": 43
+                  "startLine": 829,
+                  "startColumn": 10,
+                  "endLine": 829,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -10546,20 +13916,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "p_before_q." },
+          "message": { "text": "behavior default! in function mrand48." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 70,
-                  "startColumn": 24,
-                  "endLine": 70,
-                  "endColumn": 38,
-                  "byteLength": 14
+                  "startLine": 386,
+                  "startColumn": 16,
+                  "endLine": 386,
+                  "endColumn": 23,
+                  "byteLength": 7
                 }
               }
             }
@@ -10569,20 +13939,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": { "text": "random48_initialized." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 73,
-                  "startColumn": 32,
-                  "endLine": 73,
-                  "endColumn": 75,
-                  "byteLength": 43
+                  "startLine": 381,
+                  "startColumn": 33,
+                  "endLine": 381,
+                  "endColumn": 56,
+                  "byteLength": 23
                 }
               }
             }
@@ -10592,20 +13962,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "p_after_q." },
+          "message": { "text": "result_range." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 74,
-                  "startColumn": 23,
-                  "endLine": 74,
-                  "endColumn": 37,
-                  "byteLength": 14
+                  "startLine": 384,
+                  "startColumn": 24,
+                  "endLine": 384,
+                  "endColumn": 59,
+                  "byteLength": 35
                 }
               }
             }
@@ -10615,20 +13985,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_no_overlap." },
+          "message": { "text": "assigns clause in function mrand48." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 67,
-                  "startColumn": 31,
-                  "endLine": 67,
-                  "endColumn": 43,
-                  "byteLength": 12
+                  "startLine": 382,
+                  "startColumn": 10,
+                  "endLine": 382,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -10638,20 +14008,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_p_before_q." },
+          "message": {
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function mrand48."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 71,
-                  "startColumn": 31,
-                  "endLine": 71,
-                  "endColumn": 44,
-                  "byteLength": 13
+                  "startLine": 382,
+                  "startColumn": 10,
+                  "endLine": 382,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -10661,20 +14033,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_p_after_q." },
+          "message": {
+            "text": "from clause of term \\result in function mrand48."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 75,
-                  "startColumn": 30,
-                  "endLine": 75,
-                  "endColumn": 42,
-                  "byteLength": 12
+                  "startLine": 383,
+                  "startColumn": 10,
+                  "endLine": 383,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -10684,20 +14058,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memoverlap." },
+          "message": { "text": "behavior default! in function nrand48." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 11,
-                  "endLine": 86,
-                  "endColumn": 1,
-                  "byteLength": 255
+                  "startLine": 378,
+                  "startColumn": 16,
+                  "endLine": 378,
+                  "endColumn": 23,
+                  "byteLength": 7
                 }
               }
             }
@@ -10707,22 +14081,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function memoverlap."
-          },
+          "message": { "text": "valid_xsubi." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 64,
-                  "startColumn": 10,
-                  "endLine": 64,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 372,
+                  "startColumn": 24,
+                  "endLine": 372,
+                  "endColumn": 44,
+                  "byteLength": 20
                 }
               }
             }
@@ -10732,20 +14104,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function memoverlap." },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 11,
-                  "endLine": 86,
-                  "endColumn": 1,
-                  "byteLength": 255
+                  "startLine": 373,
+                  "startColumn": 45,
+                  "endLine": 373,
+                  "endColumn": 71,
+                  "byteLength": 26
                 }
               }
             }
@@ -10755,20 +14127,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function memoverlap." },
+          "message": { "text": "result_range." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 79,
-                  "startColumn": 11,
-                  "endLine": 86,
-                  "endColumn": 1,
-                  "byteLength": 255
+                  "startLine": 376,
+                  "startColumn": 24,
+                  "endLine": 376,
+                  "endColumn": 49,
+                  "byteLength": 25
                 }
               }
             }
@@ -10778,20 +14150,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function mempcpy." },
+          "message": { "text": "assigns clause in function nrand48." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 45,
-                  "startColumn": 6,
-                  "endLine": 58,
-                  "endColumn": 1,
-                  "byteLength": 394
+                  "startLine": 374,
+                  "startColumn": 10,
+                  "endLine": 374,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -10801,20 +14173,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_dest." },
+          "message": {
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function nrand48."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 108,
-                  "startColumn": 25,
-                  "endLine": 108,
-                  "endColumn": 48,
-                  "byteLength": 23
+                  "startLine": 374,
+                  "startColumn": 10,
+                  "endLine": 374,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -10824,20 +14198,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_src." },
+          "message": {
+            "text": "from clause of term \\result in function nrand48."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 109,
-                  "startColumn": 24,
-                  "endLine": 109,
-                  "endColumn": 51,
-                  "byteLength": 27
+                  "startLine": 375,
+                  "startColumn": 10,
+                  "endLine": 375,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -10847,20 +14223,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": {
+            "text": "behavior allocation in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 111,
-                  "startColumn": 4,
-                  "endLine": 111,
-                  "endColumn": 62,
-                  "byteLength": 58
+                  "startLine": 808,
+                  "startColumn": 11,
+                  "endLine": 808,
+                  "endColumn": 25,
+                  "byteLength": 14
                 }
               }
             }
@@ -10870,20 +14248,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "copied_contents." },
+          "message": {
+            "text": "behavior default! in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 114,
-                  "startColumn": 29,
-                  "endLine": 114,
-                  "endColumn": 76,
-                  "byteLength": 47
+                  "startLine": 808,
+                  "startColumn": 11,
+                  "endLine": 808,
+                  "endColumn": 25,
+                  "byteLength": 14
                 }
               }
             }
@@ -10893,20 +14273,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_next_byte." },
+          "message": {
+            "text": "behavior no_allocation in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 115,
-                  "startColumn": 30,
-                  "endLine": 115,
-                  "endColumn": 49,
-                  "byteLength": 19
+                  "startLine": 808,
+                  "startColumn": 11,
+                  "endLine": 808,
+                  "endColumn": 25,
+                  "byteLength": 14
                 }
               }
             }
@@ -10916,20 +14298,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mempcpy." },
+          "message": { "text": "valid_memptr." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 112,
-                  "startColumn": 12,
-                  "endLine": 112,
-                  "endColumn": 35,
-                  "byteLength": 23
+                  "startLine": 785,
+                  "startColumn": 25,
+                  "endLine": 785,
+                  "endColumn": 39,
+                  "byteLength": 14
                 }
               }
             }
@@ -10939,22 +14321,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function mempcpy."
-          },
+          "message": { "text": "alignment_is_a_suitable_power_of_two." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 112,
-                  "startColumn": 12,
-                  "endLine": 112,
-                  "endColumn": 35,
-                  "byteLength": 23
+                  "startLine": 787,
+                  "startColumn": 4,
+                  "endLine": 788,
+                  "endColumn": 54,
+                  "byteLength": 84
                 }
               }
             }
@@ -10964,22 +14344,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function mempcpy."
-          },
+          "message": { "text": "can_allocate." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 113,
-                  "startColumn": 12,
-                  "endLine": 113,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 794,
+                  "startColumn": 26,
+                  "endLine": 794,
+                  "endColumn": 44,
+                  "byteLength": 18
                 }
               }
             }
@@ -10989,20 +14367,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": { "text": "cannot_allocate." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 49,
-                  "startColumn": 27,
-                  "endLine": 49,
-                  "endColumn": 38,
-                  "byteLength": 11
+                  "startLine": 801,
+                  "startColumn": 29,
+                  "endLine": 801,
+                  "endColumn": 48,
+                  "byteLength": 19
                 }
               }
             }
@@ -11012,20 +14390,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "no_eva." },
+          "message": { "text": "allocation." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 50,
-                  "startColumn": 27,
-                  "endLine": 50,
-                  "endColumn": 92,
-                  "byteLength": 65
+                  "startLine": 798,
+                  "startColumn": 24,
+                  "endLine": 798,
+                  "endColumn": 44,
+                  "byteLength": 20
                 }
               }
             }
@@ -11035,20 +14413,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mempcpy." },
+          "message": { "text": "result_zero." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 51,
-                  "startColumn": 17,
-                  "endLine": 51,
-                  "endColumn": 18,
-                  "byteLength": 1
+                  "startLine": 799,
+                  "startColumn": 25,
+                  "endLine": 799,
+                  "endColumn": 37,
+                  "byteLength": 12
                 }
               }
             }
@@ -11058,20 +14436,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "decrease clause in function mempcpy." },
+          "message": { "text": "result_non_zero." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 52,
-                  "startColumn": 17,
-                  "endLine": 52,
-                  "endColumn": 22,
-                  "byteLength": 5
+                  "startLine": 804,
+                  "startColumn": 29,
+                  "endLine": 804,
+                  "endColumn": 55,
+                  "byteLength": 26
                 }
               }
             }
@@ -11080,21 +14458,21 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
-          "message": { "text": "reachability of stmt line 54 in mempcpy." },
+          "level": "none",
+          "message": { "text": "assigns clause in function posix_memalign." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 54,
-                  "startColumn": 2,
-                  "endLine": 56,
-                  "endColumn": 3,
-                  "byteLength": 69
+                  "startLine": 795,
+                  "startColumn": 12,
+                  "endLine": 795,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -11103,21 +14481,21 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
-          "message": { "text": "reachability post stmt line 54 in mempcpy." },
+          "level": "none",
+          "message": { "text": "assigns clause in function posix_memalign." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 54,
-                  "startColumn": 2,
-                  "endLine": 56,
-                  "endColumn": 3,
-                  "byteLength": 69
+                  "startLine": 790,
+                  "startColumn": 10,
+                  "endLine": 790,
+                  "endColumn": 26,
+                  "byteLength": 16
                 }
               }
             }
@@ -11127,20 +14505,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function memset." },
+          "message": { "text": "assigns clause in function posix_memalign." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 134,
-                  "startColumn": 6,
-                  "endLine": 141,
-                  "endColumn": 1,
-                  "byteLength": 142
+                  "startLine": 808,
+                  "startColumn": 11,
+                  "endLine": 808,
+                  "endColumn": 25,
+                  "byteLength": 14
                 }
               }
             }
@@ -11150,20 +14528,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_s." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 131,
-                  "startColumn": 22,
-                  "endLine": 131,
-                  "endColumn": 42,
-                  "byteLength": 20
+                  "startLine": 795,
+                  "startColumn": 12,
+                  "endLine": 795,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -11173,20 +14553,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "acsl_c_equiv." },
+          "message": {
+            "text": "from clause of term \\result in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 134,
-                  "startColumn": 26,
-                  "endLine": 134,
-                  "endColumn": 46,
-                  "byteLength": 20
+                  "startLine": 796,
+                  "startColumn": 12,
+                  "endLine": 796,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -11196,20 +14578,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_ptr." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 135,
-                  "startColumn": 24,
-                  "endLine": 135,
-                  "endColumn": 36,
-                  "byteLength": 12
+                  "startLine": 790,
+                  "startColumn": 10,
+                  "endLine": 790,
+                  "endColumn": 26,
+                  "byteLength": 16
                 }
               }
             }
@@ -11219,20 +14603,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memset." },
+          "message": {
+            "text": "from clause of term \\result in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 132,
-                  "startColumn": 12,
-                  "endLine": 132,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "startLine": 791,
+                  "startColumn": 10,
+                  "endLine": 791,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -11243,21 +14629,21 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *((char *)s + (0 .. n - 1)) in function memset."
+            "text": "from clause of term \\result in function posix_memalign."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 132,
+                  "startLine": 803,
                   "startColumn": 12,
-                  "endLine": 132,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "endLine": 803,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -11268,19 +14654,19 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function memset."
+            "text": "allocates/frees clause in function posix_memalign."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 133,
+                  "startLine": 789,
                   "startColumn": 12,
-                  "endLine": 133,
+                  "endLine": 789,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -11292,7 +14678,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function mkstemp." },
+          "message": {
+            "text": "allocates/frees clause in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -11301,11 +14689,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 737,
+                  "startLine": 808,
                   "startColumn": 11,
-                  "endLine": 737,
-                  "endColumn": 18,
-                  "byteLength": 7
+                  "endLine": 808,
+                  "endColumn": 25,
+                  "byteLength": 14
                 }
               }
             }
@@ -11315,7 +14703,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_template." },
+          "message": {
+            "text": "complete clause in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -11324,11 +14714,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 730,
-                  "startColumn": 27,
-                  "endLine": 730,
-                  "endColumn": 48,
-                  "byteLength": 21
+                  "startLine": 808,
+                  "startColumn": 11,
+                  "endLine": 808,
+                  "endColumn": 25,
+                  "byteLength": 14
                 }
               }
             }
@@ -11338,7 +14728,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "template_len." },
+          "message": {
+            "text": "disjoint clause in function posix_memalign."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -11347,11 +14739,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 731,
-                  "startColumn": 25,
-                  "endLine": 731,
-                  "endColumn": 45,
-                  "byteLength": 20
+                  "startLine": 808,
+                  "startColumn": 11,
+                  "endLine": 808,
+                  "endColumn": 25,
+                  "byteLength": 14
                 }
               }
             }
@@ -11361,7 +14753,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_error_or_valid_fd." },
+          "message": { "text": "behavior default! in function putenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -11370,11 +14762,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 734,
-                  "startColumn": 36,
-                  "endLine": 735,
-                  "endColumn": 53,
-                  "byteLength": 70
+                  "startLine": 567,
+                  "startColumn": 11,
+                  "endLine": 567,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -11384,7 +14776,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mkstemp." },
+          "message": { "text": "valid_string." },
           "locations": [
             {
               "physicalLocation": {
@@ -11393,11 +14785,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 732,
-                  "startColumn": 10,
-                  "endLine": 732,
-                  "endColumn": 22,
-                  "byteLength": 12
+                  "startLine": 563,
+                  "startColumn": 25,
+                  "endLine": 563,
+                  "endColumn": 50,
+                  "byteLength": 25
                 }
               }
             }
@@ -11407,9 +14799,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *(templat + (0 ..)) in function mkstemp."
-          },
+          "message": { "text": "assigns clause in function putenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -11418,11 +14808,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 732,
+                  "startLine": 564,
                   "startColumn": 10,
-                  "endLine": 732,
-                  "endColumn": 22,
-                  "byteLength": 12
+                  "endLine": 564,
+                  "endColumn": 23,
+                  "byteLength": 13
                 }
               }
             }
@@ -11433,7 +14823,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function mkstemp."
+            "text": "from clause of term __fc_env[0 ..] in function putenv."
           },
           "locations": [
             {
@@ -11443,11 +14833,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 733,
+                  "startLine": 564,
                   "startColumn": 10,
-                  "endLine": 733,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "endLine": 564,
+                  "endColumn": 23,
+                  "byteLength": 13
                 }
               }
             }
@@ -11457,7 +14847,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function mkstemps." },
+          "message": {
+            "text": "from clause of term \\result in function putenv."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -11466,11 +14858,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 750,
-                  "startColumn": 11,
-                  "endLine": 750,
-                  "endColumn": 19,
-                  "byteLength": 8
+                  "startLine": 565,
+                  "startColumn": 10,
+                  "endLine": 565,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -11480,7 +14872,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_template." },
+          "message": { "text": "behavior default! in function qsort." },
           "locations": [
             {
               "physicalLocation": {
@@ -11489,11 +14881,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 742,
-                  "startColumn": 27,
-                  "endLine": 742,
-                  "endColumn": 48,
-                  "byteLength": 21
+                  "startLine": 663,
+                  "startColumn": 12,
+                  "endLine": 663,
+                  "endColumn": 17,
+                  "byteLength": 5
                 }
               }
             }
@@ -11503,7 +14895,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "template_len." },
+          "message": { "text": "valid_function_compar." },
           "locations": [
             {
               "physicalLocation": {
@@ -11512,11 +14904,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 743,
-                  "startColumn": 25,
-                  "endLine": 743,
+                  "startLine": 658,
+                  "startColumn": 34,
+                  "endLine": 658,
                   "endColumn": 57,
-                  "byteLength": 32
+                  "byteLength": 23
                 }
               }
             }
@@ -11526,7 +14918,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "non_negative_suffixlen." },
+          "message": { "text": "assigns clause in function qsort." },
           "locations": [
             {
               "physicalLocation": {
@@ -11535,11 +14927,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 744,
-                  "startColumn": 35,
-                  "endLine": 744,
-                  "endColumn": 49,
-                  "byteLength": 14
+                  "startLine": 659,
+                  "startColumn": 10,
+                  "endLine": 659,
+                  "endColumn": 29,
+                  "byteLength": 19
                 }
               }
             }
@@ -11549,7 +14941,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_error_or_valid_fd." },
+          "message": {
+            "text": "from clause of term *((char *)base + (0 ..)) in function qsort."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -11558,11 +14952,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 747,
-                  "startColumn": 36,
-                  "endLine": 748,
-                  "endColumn": 53,
-                  "byteLength": 70
+                  "startLine": 659,
+                  "startColumn": 10,
+                  "endLine": 659,
+                  "endColumn": 29,
+                  "byteLength": 19
                 }
               }
             }
@@ -11572,7 +14966,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mkstemps." },
+          "message": { "text": "behavior default! in function quick_exit." },
           "locations": [
             {
               "physicalLocation": {
@@ -11581,11 +14975,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 745,
-                  "startColumn": 10,
-                  "endLine": 745,
+                  "startLine": 625,
+                  "startColumn": 12,
+                  "endLine": 625,
                   "endColumn": 22,
-                  "byteLength": 12
+                  "byteLength": 10
                 }
               }
             }
@@ -11595,9 +14989,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *(templat + (0 ..)) in function mkstemps."
-          },
+          "message": { "text": "never_terminates." },
           "locations": [
             {
               "physicalLocation": {
@@ -11606,11 +14998,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 745,
-                  "startColumn": 10,
-                  "endLine": 745,
-                  "endColumn": 22,
-                  "byteLength": 12
+                  "startLine": 623,
+                  "startColumn": 28,
+                  "endLine": 623,
+                  "endColumn": 34,
+                  "byteLength": 6
                 }
               }
             }
@@ -11620,9 +15012,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function mkstemps."
-          },
+          "message": { "text": "assigns clause in function quick_exit." },
           "locations": [
             {
               "physicalLocation": {
@@ -11631,11 +15021,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 746,
-                  "startColumn": 10,
-                  "endLine": 746,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 625,
+                  "startColumn": 12,
+                  "endLine": 625,
+                  "endColumn": 22,
+                  "byteLength": 10
                 }
               }
             }
@@ -11645,7 +15035,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function mrand48." },
+          "message": { "text": "behavior default! in function rand." },
           "locations": [
             {
               "physicalLocation": {
@@ -11654,11 +15044,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 355,
-                  "startColumn": 16,
-                  "endLine": 355,
-                  "endColumn": 23,
-                  "byteLength": 7
+                  "startLine": 299,
+                  "startColumn": 11,
+                  "endLine": 299,
+                  "endColumn": 15,
+                  "byteLength": 4
                 }
               }
             }
@@ -11668,7 +15058,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "random48_initialized." },
+          "message": { "text": "result_range." },
           "locations": [
             {
               "physicalLocation": {
@@ -11677,11 +15067,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 350,
-                  "startColumn": 33,
-                  "endLine": 350,
-                  "endColumn": 56,
-                  "byteLength": 23
+                  "startLine": 297,
+                  "startColumn": 24,
+                  "endLine": 297,
+                  "endColumn": 53,
+                  "byteLength": 29
                 }
               }
             }
@@ -11691,7 +15081,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_range." },
+          "message": { "text": "assigns clause in function rand." },
           "locations": [
             {
               "physicalLocation": {
@@ -11700,11 +15090,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 353,
-                  "startColumn": 24,
-                  "endLine": 353,
-                  "endColumn": 59,
-                  "byteLength": 35
+                  "startLine": 295,
+                  "startColumn": 10,
+                  "endLine": 295,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -11714,7 +15104,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mrand48." },
+          "message": {
+            "text": "from clause of term \\result in function rand."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -11723,11 +15115,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 351,
+                  "startLine": 295,
                   "startColumn": 10,
-                  "endLine": 351,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "endLine": 295,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -11738,7 +15130,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function mrand48."
+            "text": "from clause of term __fc_random_counter in function rand."
           },
           "locations": [
             {
@@ -11748,11 +15140,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 351,
+                  "startLine": 296,
                   "startColumn": 10,
-                  "endLine": 351,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "endLine": 296,
+                  "endColumn": 29,
+                  "byteLength": 19
                 }
               }
             }
@@ -11762,9 +15154,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function mrand48."
-          },
+          "message": { "text": "behavior default! in function random." },
           "locations": [
             {
               "physicalLocation": {
@@ -11773,11 +15163,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 352,
-                  "startColumn": 10,
-                  "endLine": 352,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 308,
+                  "startColumn": 16,
+                  "endLine": 308,
+                  "endColumn": 22,
+                  "byteLength": 6
                 }
               }
             }
@@ -11787,7 +15177,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function nrand48." },
+          "message": { "text": "result_range." },
           "locations": [
             {
               "physicalLocation": {
@@ -11796,11 +15186,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 347,
-                  "startColumn": 16,
-                  "endLine": 347,
-                  "endColumn": 23,
-                  "byteLength": 7
+                  "startLine": 306,
+                  "startColumn": 24,
+                  "endLine": 306,
+                  "endColumn": 53,
+                  "byteLength": 29
                 }
               }
             }
@@ -11810,7 +15200,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "assigns clause in function random." },
           "locations": [
             {
               "physicalLocation": {
@@ -11819,11 +15209,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 342,
-                  "startColumn": 45,
-                  "endLine": 342,
-                  "endColumn": 71,
-                  "byteLength": 26
+                  "startLine": 308,
+                  "startColumn": 16,
+                  "endLine": 308,
+                  "endColumn": 22,
+                  "byteLength": 6
                 }
               }
             }
@@ -11833,7 +15223,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_range." },
+          "message": {
+            "text": "from clause of term \\result in function random."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -11842,11 +15234,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 345,
-                  "startColumn": 24,
-                  "endLine": 345,
-                  "endColumn": 49,
-                  "byteLength": 25
+                  "startLine": 305,
+                  "startColumn": 10,
+                  "endLine": 305,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -11856,7 +15248,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function nrand48." },
+          "message": { "text": "behavior allocation in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -11865,11 +15257,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
-                  "startColumn": 10,
-                  "endLine": 343,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -11879,9 +15271,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function nrand48."
-          },
+          "message": { "text": "behavior deallocation in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -11890,11 +15280,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
-                  "startColumn": 10,
-                  "endLine": 343,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -11904,9 +15294,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function nrand48."
-          },
+          "message": { "text": "behavior default! in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -11915,10 +15303,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 344,
-                  "startColumn": 10,
-                  "endLine": 344,
-                  "endColumn": 17,
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
                   "byteLength": 7
                 }
               }
@@ -11929,9 +15317,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior allocation in function posix_memalign."
-          },
+          "message": { "text": "behavior fail in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -11940,11 +15326,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 725,
-                  "startColumn": 11,
-                  "endLine": 725,
-                  "endColumn": 25,
-                  "byteLength": 14
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -11954,9 +15340,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function posix_memalign."
-          },
+          "message": { "text": "freeable." },
           "locations": [
             {
               "physicalLocation": {
@@ -11965,11 +15349,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 725,
-                  "startColumn": 11,
-                  "endLine": 725,
-                  "endColumn": 25,
-                  "byteLength": 14
+                  "startLine": 455,
+                  "startColumn": 22,
+                  "endLine": 455,
+                  "endColumn": 52,
+                  "byteLength": 30
                 }
               }
             }
@@ -11979,9 +15363,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior no_allocation in function posix_memalign."
-          },
+          "message": { "text": "can_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -11990,11 +15372,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 725,
-                  "startColumn": 11,
-                  "endLine": 725,
-                  "endColumn": 25,
-                  "byteLength": 14
+                  "startLine": 462,
+                  "startColumn": 27,
+                  "endLine": 462,
+                  "endColumn": 45,
+                  "byteLength": 18
                 }
               }
             }
@@ -12004,7 +15386,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_memptr." },
+          "message": { "text": "nonnull_ptr." },
           "locations": [
             {
               "physicalLocation": {
@@ -12013,11 +15395,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 702,
-                  "startColumn": 25,
-                  "endLine": 702,
-                  "endColumn": 39,
-                  "byteLength": 14
+                  "startLine": 468,
+                  "startColumn": 26,
+                  "endLine": 468,
+                  "endColumn": 38,
+                  "byteLength": 12
                 }
               }
             }
@@ -12027,7 +15409,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "alignment_is_a_suitable_power_of_two." },
+          "message": { "text": "can_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -12036,11 +15418,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 704,
-                  "startColumn": 4,
-                  "endLine": 705,
-                  "endColumn": 54,
-                  "byteLength": 84
+                  "startLine": 469,
+                  "startColumn": 27,
+                  "endLine": 469,
+                  "endColumn": 45,
+                  "byteLength": 18
                 }
               }
             }
@@ -12050,7 +15432,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "can_allocate." },
+          "message": { "text": "cannot_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -12059,11 +15441,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 711,
-                  "startColumn": 26,
-                  "endLine": 711,
-                  "endColumn": 44,
-                  "byteLength": 18
+                  "startLine": 475,
+                  "startColumn": 30,
+                  "endLine": 475,
+                  "endColumn": 49,
+                  "byteLength": 19
                 }
               }
             }
@@ -12073,7 +15455,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "cannot_allocate." },
+          "message": { "text": "allocation." },
           "locations": [
             {
               "physicalLocation": {
@@ -12082,11 +15464,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 718,
-                  "startColumn": 29,
-                  "endLine": 718,
-                  "endColumn": 48,
-                  "byteLength": 19
+                  "startLine": 465,
+                  "startColumn": 25,
+                  "endLine": 465,
+                  "endColumn": 45,
+                  "byteLength": 20
                 }
               }
             }
@@ -12096,7 +15478,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocation." },
+          "message": { "text": "freed." },
           "locations": [
             {
               "physicalLocation": {
@@ -12105,11 +15487,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 715,
-                  "startColumn": 24,
-                  "endLine": 715,
-                  "endColumn": 44,
-                  "byteLength": 20
+                  "startLine": 471,
+                  "startColumn": 20,
+                  "endLine": 471,
+                  "endColumn": 35,
+                  "byteLength": 15
                 }
               }
             }
@@ -12119,7 +15501,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_zero." },
+          "message": { "text": "freeable." },
           "locations": [
             {
               "physicalLocation": {
@@ -12128,11 +15510,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 716,
-                  "startColumn": 25,
-                  "endLine": 716,
-                  "endColumn": 37,
-                  "byteLength": 12
+                  "startLine": 472,
+                  "startColumn": 23,
+                  "endLine": 472,
+                  "endColumn": 61,
+                  "byteLength": 38
                 }
               }
             }
@@ -12142,7 +15524,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_non_zero." },
+          "message": { "text": "null_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -12151,11 +15533,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 721,
-                  "startColumn": 29,
-                  "endLine": 721,
-                  "endColumn": 55,
-                  "byteLength": 26
+                  "startLine": 479,
+                  "startColumn": 26,
+                  "endLine": 479,
+                  "endColumn": 42,
+                  "byteLength": 16
                 }
               }
             }
@@ -12165,7 +15547,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function posix_memalign." },
+          "message": { "text": "assigns clause in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -12174,11 +15556,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 712,
-                  "startColumn": 12,
-                  "endLine": 712,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -12188,7 +15570,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function posix_memalign." },
+          "message": { "text": "assigns clause in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -12197,10 +15579,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 707,
-                  "startColumn": 10,
-                  "endLine": 707,
-                  "endColumn": 26,
+                  "startLine": 458,
+                  "startColumn": 11,
+                  "endLine": 458,
+                  "endColumn": 27,
                   "byteLength": 16
                 }
               }
@@ -12211,7 +15593,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function posix_memalign." },
+          "message": { "text": "assigns clause in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -12220,11 +15602,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 725,
-                  "startColumn": 11,
-                  "endLine": 725,
-                  "endColumn": 25,
-                  "byteLength": 14
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -12235,7 +15617,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_heap_status in function posix_memalign."
+            "text": "from clause of term \\result in function realloc."
           },
           "locations": [
             {
@@ -12245,11 +15627,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 712,
-                  "startColumn": 12,
-                  "endLine": 712,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "startLine": 464,
+                  "startColumn": 13,
+                  "endLine": 464,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -12260,7 +15642,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function posix_memalign."
+            "text": "from clause of term __fc_heap_status in function realloc."
           },
           "locations": [
             {
@@ -12270,11 +15652,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 713,
-                  "startColumn": 12,
-                  "endLine": 713,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 458,
+                  "startColumn": 11,
+                  "endLine": 458,
+                  "endColumn": 27,
+                  "byteLength": 16
                 }
               }
             }
@@ -12285,7 +15667,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_heap_status in function posix_memalign."
+            "text": "from clause of term \\result in function realloc."
           },
           "locations": [
             {
@@ -12295,11 +15677,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 707,
-                  "startColumn": 10,
-                  "endLine": 707,
-                  "endColumn": 26,
-                  "byteLength": 16
+                  "startLine": 459,
+                  "startColumn": 11,
+                  "endLine": 459,
+                  "endColumn": 18,
+                  "byteLength": 7
                 }
               }
             }
@@ -12310,7 +15692,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function posix_memalign."
+            "text": "from clause of term \\result in function realloc."
           },
           "locations": [
             {
@@ -12320,10 +15702,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 708,
-                  "startColumn": 10,
-                  "endLine": 708,
-                  "endColumn": 17,
+                  "startLine": 478,
+                  "startColumn": 13,
+                  "endLine": 478,
+                  "endColumn": 20,
                   "byteLength": 7
                 }
               }
@@ -12335,7 +15717,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function posix_memalign."
+            "text": "allocates/frees clause in function realloc."
           },
           "locations": [
             {
@@ -12344,11 +15726,11 @@
                   "uri": "libc/stdlib.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
-                "region": {
-                  "startLine": 719,
-                  "startColumn": 12,
-                  "endLine": 719,
-                  "endColumn": 19,
+                "region": {
+                  "startLine": 463,
+                  "startColumn": 15,
+                  "endLine": 463,
+                  "endColumn": 22,
                   "byteLength": 7
                 }
               }
@@ -12360,7 +15742,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "allocates/frees clause in function posix_memalign."
+            "text": "allocates/frees clause in function realloc."
           },
           "locations": [
             {
@@ -12370,11 +15752,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 706,
-                  "startColumn": 12,
-                  "endLine": 706,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 470,
+                  "startColumn": 11,
+                  "endLine": 470,
+                  "endColumn": 14,
+                  "byteLength": 3
                 }
               }
             }
@@ -12385,7 +15767,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "allocates/frees clause in function posix_memalign."
+            "text": "allocates/frees clause in function realloc."
           },
           "locations": [
             {
@@ -12395,11 +15777,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 725,
-                  "startColumn": 11,
-                  "endLine": 725,
-                  "endColumn": 25,
-                  "byteLength": 14
+                  "startLine": 457,
+                  "startColumn": 9,
+                  "endLine": 457,
+                  "endColumn": 12,
+                  "byteLength": 3
                 }
               }
             }
@@ -12410,7 +15792,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "complete clause in function posix_memalign."
+            "text": "allocates/frees clause in function realloc."
           },
           "locations": [
             {
@@ -12420,11 +15802,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 725,
-                  "startColumn": 11,
-                  "endLine": 725,
-                  "endColumn": 25,
-                  "byteLength": 14
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -12434,9 +15816,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "disjoint clause in function posix_memalign."
-          },
+          "message": { "text": "complete clause in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -12445,11 +15825,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 725,
-                  "startColumn": 11,
-                  "endLine": 725,
-                  "endColumn": 25,
-                  "byteLength": 14
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -12459,7 +15839,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function putenv." },
+          "message": { "text": "disjoint clause in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -12468,11 +15848,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 533,
-                  "startColumn": 11,
-                  "endLine": 533,
-                  "endColumn": 17,
-                  "byteLength": 6
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -12482,7 +15862,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string." },
+          "message": { "text": "disjoint clause in function realloc." },
           "locations": [
             {
               "physicalLocation": {
@@ -12491,11 +15871,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 529,
-                  "startColumn": 25,
-                  "endLine": 529,
-                  "endColumn": 50,
-                  "byteLength": 25
+                  "startLine": 485,
+                  "startColumn": 13,
+                  "endLine": 485,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -12505,7 +15885,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function putenv." },
+          "message": {
+            "text": "behavior allocation in function reallocarray."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -12514,11 +15896,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 530,
-                  "startColumn": 10,
-                  "endLine": 530,
-                  "endColumn": 23,
-                  "byteLength": 13
+                  "startLine": 521,
+                  "startColumn": 13,
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -12529,7 +15911,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_env[0 ..] in function putenv."
+            "text": "behavior deallocation in function reallocarray."
           },
           "locations": [
             {
@@ -12539,11 +15921,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 530,
-                  "startColumn": 10,
-                  "endLine": 530,
-                  "endColumn": 23,
-                  "byteLength": 13
+                  "startLine": 521,
+                  "startColumn": 13,
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -12554,7 +15936,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function putenv."
+            "text": "behavior default! in function reallocarray."
           },
           "locations": [
             {
@@ -12564,11 +15946,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 531,
-                  "startColumn": 10,
-                  "endLine": 531,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 521,
+                  "startColumn": 13,
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -12578,7 +15960,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function qsort." },
+          "message": { "text": "behavior fail in function reallocarray." },
           "locations": [
             {
               "physicalLocation": {
@@ -12587,11 +15969,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 594,
-                  "startColumn": 12,
-                  "endLine": 594,
-                  "endColumn": 17,
-                  "byteLength": 5
+                  "startLine": 521,
+                  "startColumn": 13,
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -12601,7 +15983,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_function_compar." },
+          "message": { "text": "freeable." },
           "locations": [
             {
               "physicalLocation": {
@@ -12610,11 +15992,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 589,
-                  "startColumn": 34,
-                  "endLine": 589,
-                  "endColumn": 57,
-                  "byteLength": 23
+                  "startLine": 489,
+                  "startColumn": 22,
+                  "endLine": 489,
+                  "endColumn": 52,
+                  "byteLength": 30
                 }
               }
             }
@@ -12624,7 +16006,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function qsort." },
+          "message": { "text": "can_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -12633,11 +16015,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 590,
-                  "startColumn": 10,
-                  "endLine": 590,
-                  "endColumn": 29,
-                  "byteLength": 19
+                  "startLine": 498,
+                  "startColumn": 27,
+                  "endLine": 498,
+                  "endColumn": 53,
+                  "byteLength": 26
                 }
               }
             }
@@ -12647,9 +16029,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *((char *)base + (0 ..)) in function qsort."
-          },
+          "message": { "text": "nonnull_ptr." },
           "locations": [
             {
               "physicalLocation": {
@@ -12658,11 +16038,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 590,
-                  "startColumn": 10,
-                  "endLine": 590,
-                  "endColumn": 29,
-                  "byteLength": 19
+                  "startLine": 503,
+                  "startColumn": 26,
+                  "endLine": 503,
+                  "endColumn": 38,
+                  "byteLength": 12
                 }
               }
             }
@@ -12672,7 +16052,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function quick_exit." },
+          "message": { "text": "can_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -12681,11 +16061,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 557,
-                  "startColumn": 12,
-                  "endLine": 557,
-                  "endColumn": 22,
-                  "byteLength": 10
+                  "startLine": 504,
+                  "startColumn": 27,
+                  "endLine": 504,
+                  "endColumn": 53,
+                  "byteLength": 26
                 }
               }
             }
@@ -12695,7 +16075,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "never_terminates." },
+          "message": { "text": "cannot_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -12704,11 +16084,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 555,
-                  "startColumn": 28,
-                  "endLine": 555,
-                  "endColumn": 34,
-                  "byteLength": 6
+                  "startLine": 510,
+                  "startColumn": 30,
+                  "endLine": 510,
+                  "endColumn": 57,
+                  "byteLength": 27
                 }
               }
             }
@@ -12718,7 +16098,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function quick_exit." },
+          "message": { "text": "allocation." },
           "locations": [
             {
               "physicalLocation": {
@@ -12727,11 +16107,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 557,
-                  "startColumn": 12,
-                  "endLine": 557,
-                  "endColumn": 22,
-                  "byteLength": 10
+                  "startLine": 500,
+                  "startColumn": 25,
+                  "endLine": 500,
+                  "endColumn": 54,
+                  "byteLength": 29
                 }
               }
             }
@@ -12741,7 +16121,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function rand." },
+          "message": { "text": "freed." },
           "locations": [
             {
               "physicalLocation": {
@@ -12750,11 +16130,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 273,
-                  "startColumn": 11,
-                  "endLine": 273,
-                  "endColumn": 15,
-                  "byteLength": 4
+                  "startLine": 506,
+                  "startColumn": 20,
+                  "endLine": 506,
+                  "endColumn": 35,
+                  "byteLength": 15
                 }
               }
             }
@@ -12764,7 +16144,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_range." },
+          "message": { "text": "freeable." },
           "locations": [
             {
               "physicalLocation": {
@@ -12773,11 +16153,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 271,
-                  "startColumn": 26,
-                  "endLine": 271,
-                  "endColumn": 55,
-                  "byteLength": 29
+                  "startLine": 507,
+                  "startColumn": 23,
+                  "endLine": 507,
+                  "endColumn": 61,
+                  "byteLength": 38
                 }
               }
             }
@@ -12787,7 +16167,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function rand." },
+          "message": { "text": "null_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -12796,11 +16176,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 269,
-                  "startColumn": 12,
-                  "endLine": 269,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 515,
+                  "startColumn": 26,
+                  "endLine": 515,
+                  "endColumn": 42,
+                  "byteLength": 16
                 }
               }
             }
@@ -12810,9 +16190,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function rand."
-          },
+          "message": { "text": "assigns clause in function reallocarray." },
           "locations": [
             {
               "physicalLocation": {
@@ -12821,11 +16199,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 269,
-                  "startColumn": 12,
-                  "endLine": 269,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 492,
+                  "startColumn": 11,
+                  "endLine": 492,
+                  "endColumn": 27,
+                  "byteLength": 16
                 }
               }
             }
@@ -12835,9 +16213,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random_counter in function rand."
-          },
+          "message": { "text": "assigns clause in function reallocarray." },
           "locations": [
             {
               "physicalLocation": {
@@ -12846,11 +16222,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 270,
-                  "startColumn": 12,
-                  "endLine": 270,
-                  "endColumn": 31,
-                  "byteLength": 19
+                  "startLine": 521,
+                  "startColumn": 13,
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -12860,7 +16236,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function random." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function reallocarray."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -12869,11 +16247,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 282,
-                  "startColumn": 16,
-                  "endLine": 282,
-                  "endColumn": 22,
-                  "byteLength": 6
+                  "startLine": 492,
+                  "startColumn": 11,
+                  "endLine": 492,
+                  "endColumn": 27,
+                  "byteLength": 16
                 }
               }
             }
@@ -12883,7 +16261,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_range." },
+          "message": {
+            "text": "from clause of term \\result in function reallocarray."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -12892,11 +16272,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 280,
-                  "startColumn": 24,
-                  "endLine": 280,
-                  "endColumn": 53,
-                  "byteLength": 29
+                  "startLine": 494,
+                  "startColumn": 11,
+                  "endLine": 494,
+                  "endColumn": 18,
+                  "byteLength": 7
                 }
               }
             }
@@ -12906,7 +16286,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function random." },
+          "message": {
+            "text": "from clause of term \\result in function reallocarray."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -12915,11 +16297,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 282,
-                  "startColumn": 16,
-                  "endLine": 282,
-                  "endColumn": 22,
-                  "byteLength": 6
+                  "startLine": 513,
+                  "startColumn": 13,
+                  "endLine": 513,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -12930,7 +16312,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function random."
+            "text": "allocates/frees clause in function reallocarray."
           },
           "locations": [
             {
@@ -12940,10 +16322,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 279,
-                  "startColumn": 10,
-                  "endLine": 279,
-                  "endColumn": 17,
+                  "startLine": 499,
+                  "startColumn": 15,
+                  "endLine": 499,
+                  "endColumn": 22,
                   "byteLength": 7
                 }
               }
@@ -12954,7 +16336,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior allocation in function realloc." },
+          "message": {
+            "text": "allocates/frees clause in function reallocarray."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -12963,11 +16347,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 505,
+                  "startColumn": 11,
+                  "endLine": 505,
+                  "endColumn": 14,
+                  "byteLength": 3
                 }
               }
             }
@@ -12977,7 +16361,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior deallocation in function realloc." },
+          "message": {
+            "text": "allocates/frees clause in function reallocarray."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -12986,11 +16372,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 491,
+                  "startColumn": 9,
+                  "endLine": 491,
+                  "endColumn": 12,
+                  "byteLength": 3
                 }
               }
             }
@@ -13000,7 +16386,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function realloc." },
+          "message": {
+            "text": "allocates/frees clause in function reallocarray."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13009,11 +16397,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
+                  "startLine": 521,
                   "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -13023,7 +16411,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior fail in function realloc." },
+          "message": { "text": "complete clause in function reallocarray." },
           "locations": [
             {
               "physicalLocation": {
@@ -13032,11 +16420,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
+                  "startLine": 521,
                   "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -13046,7 +16434,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "freeable." },
+          "message": { "text": "disjoint clause in function reallocarray." },
           "locations": [
             {
               "physicalLocation": {
@@ -13055,11 +16443,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 423,
-                  "startColumn": 22,
-                  "endLine": 423,
-                  "endColumn": 52,
-                  "byteLength": 30
+                  "startLine": 521,
+                  "startColumn": 13,
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -13069,7 +16457,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "can_allocate." },
+          "message": { "text": "disjoint clause in function reallocarray." },
           "locations": [
             {
               "physicalLocation": {
@@ -13078,11 +16466,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 430,
-                  "startColumn": 27,
-                  "endLine": 430,
-                  "endColumn": 45,
-                  "byteLength": 18
+                  "startLine": 521,
+                  "startColumn": 13,
+                  "endLine": 521,
+                  "endColumn": 25,
+                  "byteLength": 12
                 }
               }
             }
@@ -13092,7 +16480,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "nonnull_ptr." },
+          "message": {
+            "text": "behavior allocate_resolved_name in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13101,11 +16491,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 436,
-                  "startColumn": 26,
-                  "endLine": 436,
-                  "endColumn": 38,
-                  "byteLength": 12
+                  "startLine": 890,
+                  "startColumn": 13,
+                  "endLine": 890,
+                  "endColumn": 21,
+                  "byteLength": 8
                 }
               }
             }
@@ -13115,7 +16505,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "can_allocate." },
+          "message": { "text": "behavior default! in function realpath." },
           "locations": [
             {
               "physicalLocation": {
@@ -13124,11 +16514,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 437,
-                  "startColumn": 27,
-                  "endLine": 437,
-                  "endColumn": 45,
-                  "byteLength": 18
+                  "startLine": 890,
+                  "startColumn": 13,
+                  "endLine": 890,
+                  "endColumn": 21,
+                  "byteLength": 8
                 }
               }
             }
@@ -13138,7 +16528,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "cannot_allocate." },
+          "message": {
+            "text": "behavior filesystem_error in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13147,11 +16539,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 443,
-                  "startColumn": 30,
-                  "endLine": 443,
-                  "endColumn": 49,
-                  "byteLength": 19
+                  "startLine": 890,
+                  "startColumn": 13,
+                  "endLine": 890,
+                  "endColumn": 21,
+                  "byteLength": 8
                 }
               }
             }
@@ -13161,7 +16553,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocation." },
+          "message": {
+            "text": "behavior not_enough_memory in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13170,11 +16564,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 433,
-                  "startColumn": 25,
-                  "endLine": 433,
-                  "endColumn": 45,
-                  "byteLength": 20
+                  "startLine": 890,
+                  "startColumn": 13,
+                  "endLine": 890,
+                  "endColumn": 21,
+                  "byteLength": 8
                 }
               }
             }
@@ -13184,7 +16578,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "freed." },
+          "message": {
+            "text": "behavior null_file_name in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13193,11 +16589,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 439,
-                  "startColumn": 20,
-                  "endLine": 439,
-                  "endColumn": 35,
-                  "byteLength": 15
+                  "startLine": 890,
+                  "startColumn": 13,
+                  "endLine": 890,
+                  "endColumn": 21,
+                  "byteLength": 8
                 }
               }
             }
@@ -13207,7 +16603,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "freeable." },
+          "message": {
+            "text": "behavior resolved_name_buffer in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13216,11 +16614,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 440,
-                  "startColumn": 23,
-                  "endLine": 440,
-                  "endColumn": 61,
-                  "byteLength": 38
+                  "startLine": 890,
+                  "startColumn": 13,
+                  "endLine": 890,
+                  "endColumn": 21,
+                  "byteLength": 8
                 }
               }
             }
@@ -13230,7 +16628,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_result." },
+          "message": { "text": "valid_file_name_or_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -13239,11 +16637,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 447,
-                  "startColumn": 26,
-                  "endLine": 447,
-                  "endColumn": 42,
-                  "byteLength": 16
+                  "startLine": 840,
+                  "startColumn": 4,
+                  "endLine": 840,
+                  "endColumn": 54,
+                  "byteLength": 50
                 }
               }
             }
@@ -13253,7 +16651,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realloc." },
+          "message": { "text": "resolved_name_null_or_allocated." },
           "locations": [
             {
               "physicalLocation": {
@@ -13262,11 +16660,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 842,
+                  "startColumn": 4,
+                  "endLine": 842,
+                  "endColumn": 66,
+                  "byteLength": 62
                 }
               }
             }
@@ -13276,7 +16674,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realloc." },
+          "message": { "text": "null_file_name." },
           "locations": [
             {
               "physicalLocation": {
@@ -13285,11 +16683,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 426,
-                  "startColumn": 11,
-                  "endLine": 426,
-                  "endColumn": 27,
-                  "byteLength": 16
+                  "startLine": 850,
+                  "startColumn": 28,
+                  "endLine": 850,
+                  "endColumn": 46,
+                  "byteLength": 18
                 }
               }
             }
@@ -13299,7 +16697,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realloc." },
+          "message": { "text": "valid_file_name." },
           "locations": [
             {
               "physicalLocation": {
@@ -13308,11 +16706,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 855,
+                  "startColumn": 29,
+                  "endLine": 855,
+                  "endColumn": 57,
+                  "byteLength": 28
                 }
               }
             }
@@ -13322,9 +16720,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function realloc."
-          },
+          "message": { "text": "resolved_name_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -13333,11 +16729,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 432,
-                  "startColumn": 13,
-                  "endLine": 432,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 856,
+                  "startColumn": 32,
+                  "endLine": 856,
+                  "endColumn": 54,
+                  "byteLength": 22
                 }
               }
             }
@@ -13347,9 +16743,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_heap_status in function realloc."
-          },
+          "message": { "text": "can_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -13358,11 +16752,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 426,
-                  "startColumn": 11,
-                  "endLine": 426,
-                  "endColumn": 27,
-                  "byteLength": 16
+                  "startLine": 857,
+                  "startColumn": 26,
+                  "endLine": 857,
+                  "endColumn": 44,
+                  "byteLength": 18
                 }
               }
             }
@@ -13372,9 +16766,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function realloc."
-          },
+          "message": { "text": "valid_file_name." },
           "locations": [
             {
               "physicalLocation": {
@@ -13383,11 +16775,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 427,
-                  "startColumn": 11,
-                  "endLine": 427,
-                  "endColumn": 18,
-                  "byteLength": 7
+                  "startLine": 862,
+                  "startColumn": 29,
+                  "endLine": 862,
+                  "endColumn": 57,
+                  "byteLength": 28
                 }
               }
             }
@@ -13397,9 +16789,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function realloc."
-          },
+          "message": { "text": "resolved_name_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -13408,11 +16798,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 446,
-                  "startColumn": 13,
-                  "endLine": 446,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 863,
+                  "startColumn": 32,
+                  "endLine": 863,
+                  "endColumn": 54,
+                  "byteLength": 22
                 }
               }
             }
@@ -13422,9 +16812,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "allocates/frees clause in function realloc."
-          },
+          "message": { "text": "cannot_allocate." },
           "locations": [
             {
               "physicalLocation": {
@@ -13433,11 +16821,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 431,
-                  "startColumn": 15,
-                  "endLine": 431,
-                  "endColumn": 22,
-                  "byteLength": 7
+                  "startLine": 864,
+                  "startColumn": 29,
+                  "endLine": 864,
+                  "endColumn": 48,
+                  "byteLength": 19
                 }
               }
             }
@@ -13447,9 +16835,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "allocates/frees clause in function realloc."
-          },
+          "message": { "text": "valid_file_name." },
           "locations": [
             {
               "physicalLocation": {
@@ -13458,11 +16844,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 438,
-                  "startColumn": 11,
-                  "endLine": 438,
-                  "endColumn": 14,
-                  "byteLength": 3
+                  "startLine": 870,
+                  "startColumn": 29,
+                  "endLine": 870,
+                  "endColumn": 57,
+                  "byteLength": 28
                 }
               }
             }
@@ -13472,9 +16858,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "allocates/frees clause in function realloc."
-          },
+          "message": { "text": "allocated_resolved_name_or_fail." },
           "locations": [
             {
               "physicalLocation": {
@@ -13483,11 +16867,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 425,
-                  "startColumn": 9,
-                  "endLine": 425,
-                  "endColumn": 12,
-                  "byteLength": 3
+                  "startLine": 872,
+                  "startColumn": 6,
+                  "endLine": 872,
+                  "endColumn": 42,
+                  "byteLength": 36
                 }
               }
             }
@@ -13497,9 +16881,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "allocates/frees clause in function realloc."
-          },
+          "message": { "text": "valid_file_name." },
           "locations": [
             {
               "physicalLocation": {
@@ -13508,11 +16890,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 882,
+                  "startColumn": 29,
+                  "endLine": 882,
+                  "endColumn": 57,
+                  "byteLength": 28
                 }
               }
             }
@@ -13522,7 +16904,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function realloc." },
+          "message": { "text": "null_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -13531,11 +16913,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 852,
+                  "startColumn": 25,
+                  "endLine": 852,
+                  "endColumn": 41,
+                  "byteLength": 16
                 }
               }
             }
@@ -13545,7 +16927,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function realloc." },
+          "message": { "text": "errno_set." },
           "locations": [
             {
               "physicalLocation": {
@@ -13554,11 +16936,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 853,
+                  "startColumn": 23,
+                  "endLine": 853,
+                  "endColumn": 39,
+                  "byteLength": 16
                 }
               }
             }
@@ -13568,7 +16950,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function realloc." },
+          "message": { "text": "allocation." },
           "locations": [
             {
               "physicalLocation": {
@@ -13577,11 +16959,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 13,
-                  "endLine": 453,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 860,
+                  "startColumn": 24,
+                  "endLine": 860,
+                  "endColumn": 44,
+                  "byteLength": 20
                 }
               }
             }
@@ -13591,9 +16973,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior allocation in function reallocarray."
-          },
+          "message": { "text": "null_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -13602,11 +16982,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 867,
+                  "startColumn": 25,
+                  "endLine": 867,
+                  "endColumn": 41,
+                  "byteLength": 16
                 }
               }
             }
@@ -13616,9 +16996,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior deallocation in function reallocarray."
-          },
+          "message": { "text": "errno_set." },
           "locations": [
             {
               "physicalLocation": {
@@ -13627,11 +17005,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 868,
+                  "startColumn": 23,
+                  "endLine": 868,
+                  "endColumn": 39,
+                  "byteLength": 16
                 }
               }
             }
@@ -13641,9 +17019,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior default! in function reallocarray."
-          },
+          "message": { "text": "valid_string_resolved_name." },
           "locations": [
             {
               "physicalLocation": {
@@ -13652,11 +17028,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 876,
+                  "startColumn": 40,
+                  "endLine": 877,
+                  "endColumn": 71,
+                  "byteLength": 99
                 }
               }
             }
@@ -13666,7 +17042,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior fail in function reallocarray." },
+          "message": { "text": "resolved_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -13675,11 +17051,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 880,
+                  "startColumn": 29,
+                  "endLine": 880,
+                  "endColumn": 53,
+                  "byteLength": 24
                 }
               }
             }
@@ -13689,7 +17065,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "freeable." },
+          "message": { "text": "null_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -13698,11 +17074,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 457,
-                  "startColumn": 22,
-                  "endLine": 457,
-                  "endColumn": 52,
-                  "byteLength": 30
+                  "startLine": 886,
+                  "startColumn": 25,
+                  "endLine": 886,
+                  "endColumn": 41,
+                  "byteLength": 16
                 }
               }
             }
@@ -13712,7 +17088,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "can_allocate." },
+          "message": { "text": "errno_set." },
           "locations": [
             {
               "physicalLocation": {
@@ -13721,11 +17097,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 466,
-                  "startColumn": 27,
-                  "endLine": 466,
-                  "endColumn": 53,
-                  "byteLength": 26
+                  "startLine": 888,
+                  "startColumn": 6,
+                  "endLine": 888,
+                  "endColumn": 43,
+                  "byteLength": 37
                 }
               }
             }
@@ -13735,7 +17111,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "nonnull_ptr." },
+          "message": { "text": "assigns clause in function realpath." },
           "locations": [
             {
               "physicalLocation": {
@@ -13744,11 +17120,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 471,
-                  "startColumn": 26,
-                  "endLine": 471,
-                  "endColumn": 38,
-                  "byteLength": 12
+                  "startLine": 858,
+                  "startColumn": 12,
+                  "endLine": 858,
+                  "endColumn": 28,
+                  "byteLength": 16
                 }
               }
             }
@@ -13758,7 +17134,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "can_allocate." },
+          "message": { "text": "assigns clause in function realpath." },
           "locations": [
             {
               "physicalLocation": {
@@ -13767,11 +17143,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 472,
-                  "startColumn": 27,
-                  "endLine": 472,
-                  "endColumn": 53,
-                  "byteLength": 26
+                  "startLine": 843,
+                  "startColumn": 10,
+                  "endLine": 843,
+                  "endColumn": 26,
+                  "byteLength": 16
                 }
               }
             }
@@ -13781,7 +17157,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "cannot_allocate." },
+          "message": { "text": "assigns clause in function realpath." },
           "locations": [
             {
               "physicalLocation": {
@@ -13790,11 +17166,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 478,
-                  "startColumn": 30,
-                  "endLine": 478,
-                  "endColumn": 57,
-                  "byteLength": 27
+                  "startLine": 884,
+                  "startColumn": 12,
+                  "endLine": 884,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -13804,7 +17180,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocation." },
+          "message": { "text": "assigns clause in function realpath." },
           "locations": [
             {
               "physicalLocation": {
@@ -13813,11 +17189,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 468,
-                  "startColumn": 25,
-                  "endLine": 468,
-                  "endColumn": 54,
-                  "byteLength": 29
+                  "startLine": 890,
+                  "startColumn": 13,
+                  "endLine": 890,
+                  "endColumn": 21,
+                  "byteLength": 8
                 }
               }
             }
@@ -13827,7 +17203,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "freed." },
+          "message": { "text": "assigns clause in function realpath." },
           "locations": [
             {
               "physicalLocation": {
@@ -13836,11 +17212,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 474,
-                  "startColumn": 20,
-                  "endLine": 474,
-                  "endColumn": 35,
-                  "byteLength": 15
+                  "startLine": 851,
+                  "startColumn": 12,
+                  "endLine": 851,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -13850,7 +17226,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "freeable." },
+          "message": { "text": "assigns clause in function realpath." },
           "locations": [
             {
               "physicalLocation": {
@@ -13859,11 +17235,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 475,
-                  "startColumn": 23,
-                  "endLine": 475,
-                  "endColumn": 61,
-                  "byteLength": 38
+                  "startLine": 874,
+                  "startColumn": 12,
+                  "endLine": 874,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -13873,7 +17249,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_result." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13882,10 +17260,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 483,
-                  "startColumn": 26,
-                  "endLine": 483,
-                  "endColumn": 42,
+                  "startLine": 858,
+                  "startColumn": 12,
+                  "endLine": 858,
+                  "endColumn": 28,
                   "byteLength": 16
                 }
               }
@@ -13896,7 +17274,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function reallocarray." },
+          "message": {
+            "text": "from clause of term \\result in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13905,11 +17285,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 460,
-                  "startColumn": 11,
-                  "endLine": 460,
-                  "endColumn": 27,
-                  "byteLength": 16
+                  "startLine": 859,
+                  "startColumn": 12,
+                  "endLine": 859,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -13919,7 +17299,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function reallocarray." },
+          "message": {
+            "text": "from clause of term __fc_heap_status in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -13928,11 +17310,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 843,
+                  "startColumn": 10,
+                  "endLine": 843,
+                  "endColumn": 26,
+                  "byteLength": 16
                 }
               }
             }
@@ -13943,7 +17325,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_heap_status in function reallocarray."
+            "text": "from clause of term *(\\result + (0 .. 4096 - 1)) in function realpath."
           },
           "locations": [
             {
@@ -13953,11 +17335,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 460,
-                  "startColumn": 11,
-                  "endLine": 460,
-                  "endColumn": 27,
-                  "byteLength": 16
+                  "startLine": 844,
+                  "startColumn": 10,
+                  "endLine": 844,
+                  "endColumn": 31,
+                  "byteLength": 21
                 }
               }
             }
@@ -13968,7 +17350,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function reallocarray."
+            "text": "from clause of term *(resolved_name + (0 .. 4096 - 1)) in function realpath."
           },
           "locations": [
             {
@@ -13978,11 +17360,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 462,
-                  "startColumn": 11,
-                  "endLine": 462,
-                  "endColumn": 18,
-                  "byteLength": 7
+                  "startLine": 844,
+                  "startColumn": 33,
+                  "endLine": 844,
+                  "endColumn": 60,
+                  "byteLength": 27
                 }
               }
             }
@@ -13993,7 +17375,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function reallocarray."
+            "text": "from clause of term __fc_errno in function realpath."
           },
           "locations": [
             {
@@ -14003,11 +17385,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 481,
-                  "startColumn": 13,
-                  "endLine": 481,
+                  "startLine": 846,
+                  "startColumn": 10,
+                  "endLine": 846,
                   "endColumn": 20,
-                  "byteLength": 7
+                  "byteLength": 10
                 }
               }
             }
@@ -14018,7 +17400,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "allocates/frees clause in function reallocarray."
+            "text": "from clause of term \\result in function realpath."
           },
           "locations": [
             {
@@ -14028,10 +17410,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 467,
-                  "startColumn": 15,
-                  "endLine": 467,
-                  "endColumn": 22,
+                  "startLine": 884,
+                  "startColumn": 12,
+                  "endLine": 884,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -14043,7 +17425,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "allocates/frees clause in function reallocarray."
+            "text": "from clause of term __fc_errno in function realpath."
           },
           "locations": [
             {
@@ -14053,11 +17435,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 473,
-                  "startColumn": 11,
-                  "endLine": 473,
-                  "endColumn": 14,
-                  "byteLength": 3
+                  "startLine": 884,
+                  "startColumn": 21,
+                  "endLine": 884,
+                  "endColumn": 31,
+                  "byteLength": 10
                 }
               }
             }
@@ -14068,7 +17450,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "allocates/frees clause in function reallocarray."
+            "text": "from clause of term \\result in function realpath."
           },
           "locations": [
             {
@@ -14078,11 +17460,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 459,
-                  "startColumn": 9,
-                  "endLine": 459,
-                  "endColumn": 12,
-                  "byteLength": 3
+                  "startLine": 866,
+                  "startColumn": 12,
+                  "endLine": 866,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -14093,7 +17475,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "allocates/frees clause in function reallocarray."
+            "text": "from clause of term \\result in function realpath."
           },
           "locations": [
             {
@@ -14103,11 +17485,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 851,
+                  "startColumn": 12,
+                  "endLine": 851,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -14117,7 +17499,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "complete clause in function reallocarray." },
+          "message": {
+            "text": "from clause of term __fc_errno in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -14126,11 +17510,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 851,
+                  "startColumn": 21,
+                  "endLine": 851,
+                  "endColumn": 31,
+                  "byteLength": 10
                 }
               }
             }
@@ -14140,7 +17524,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function reallocarray." },
+          "message": {
+            "text": "from clause of term \\result in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -14149,11 +17535,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 874,
+                  "startColumn": 12,
+                  "endLine": 874,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -14163,7 +17549,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "disjoint clause in function reallocarray." },
+          "message": {
+            "text": "from clause of term *(resolved_name + (0 .. 4096 - 1)) in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -14172,11 +17560,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
-                  "startColumn": 13,
-                  "endLine": 489,
-                  "endColumn": 25,
-                  "byteLength": 12
+                  "startLine": 875,
+                  "startColumn": 12,
+                  "endLine": 875,
+                  "endColumn": 39,
+                  "byteLength": 27
                 }
               }
             }
@@ -14187,7 +17575,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior allocate_resolved_name in function realpath."
+            "text": "allocates/frees clause in function realpath."
           },
           "locations": [
             {
@@ -14197,9 +17585,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
+                  "startLine": 890,
                   "startColumn": 13,
-                  "endLine": 807,
+                  "endLine": 890,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -14211,7 +17599,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function realpath." },
+          "message": {
+            "text": "allocates/frees clause in function realpath."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -14220,9 +17610,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
+                  "startLine": 890,
                   "startColumn": 13,
-                  "endLine": 807,
+                  "endLine": 890,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -14235,7 +17625,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "behavior filesystem_error in function realpath."
+            "text": "allocates/frees clause in function realpath."
           },
           "locations": [
             {
@@ -14245,9 +17635,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
+                  "startLine": 890,
                   "startColumn": 13,
-                  "endLine": 807,
+                  "endLine": 890,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -14259,9 +17649,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior not_enough_memory in function realpath."
-          },
+          "message": { "text": "behavior default! in function seed48." },
           "locations": [
             {
               "physicalLocation": {
@@ -14270,11 +17658,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
-                  "startColumn": 13,
-                  "endLine": 807,
-                  "endColumn": 21,
-                  "byteLength": 8
+                  "startLine": 335,
+                  "startColumn": 23,
+                  "endLine": 335,
+                  "endColumn": 29,
+                  "byteLength": 6
                 }
               }
             }
@@ -14284,9 +17672,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior null_file_name in function realpath."
-          },
+          "message": { "text": "valid_seed16v." },
           "locations": [
             {
               "physicalLocation": {
@@ -14295,11 +17681,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
-                  "startColumn": 13,
-                  "endLine": 807,
-                  "endColumn": 21,
-                  "byteLength": 8
+                  "startLine": 327,
+                  "startColumn": 26,
+                  "endLine": 327,
+                  "endColumn": 48,
+                  "byteLength": 22
                 }
               }
             }
@@ -14309,9 +17695,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "behavior resolved_name_buffer in function realpath."
-          },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
@@ -14320,11 +17704,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
-                  "startColumn": 13,
-                  "endLine": 807,
-                  "endColumn": 21,
-                  "byteLength": 8
+                  "startLine": 328,
+                  "startColumn": 47,
+                  "endLine": 328,
+                  "endColumn": 75,
+                  "byteLength": 28
                 }
               }
             }
@@ -14334,7 +17718,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_file_name_or_null." },
+          "message": { "text": "random48_initialized." },
           "locations": [
             {
               "physicalLocation": {
@@ -14343,11 +17727,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 757,
-                  "startColumn": 4,
-                  "endLine": 757,
-                  "endColumn": 54,
-                  "byteLength": 50
+                  "startLine": 332,
+                  "startColumn": 32,
+                  "endLine": 332,
+                  "endColumn": 55,
+                  "byteLength": 23
                 }
               }
             }
@@ -14357,7 +17741,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "resolved_name_null_or_allocated." },
+          "message": { "text": "result_counter." },
           "locations": [
             {
               "physicalLocation": {
@@ -14366,11 +17750,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 759,
-                  "startColumn": 4,
-                  "endLine": 759,
-                  "endColumn": 66,
-                  "byteLength": 62
+                  "startLine": 333,
+                  "startColumn": 26,
+                  "endLine": 333,
+                  "endColumn": 60,
+                  "byteLength": 34
                 }
               }
             }
@@ -14380,7 +17764,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_file_name." },
+          "message": { "text": "assigns clause in function seed48." },
           "locations": [
             {
               "physicalLocation": {
@@ -14389,11 +17773,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 767,
-                  "startColumn": 28,
-                  "endLine": 767,
-                  "endColumn": 46,
-                  "byteLength": 18
+                  "startLine": 329,
+                  "startColumn": 10,
+                  "endLine": 329,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -14403,7 +17787,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_file_name." },
+          "message": {
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function seed48."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -14412,11 +17798,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 772,
-                  "startColumn": 29,
-                  "endLine": 772,
-                  "endColumn": 57,
-                  "byteLength": 28
+                  "startLine": 329,
+                  "startColumn": 10,
+                  "endLine": 329,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -14426,7 +17812,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "resolved_name_null." },
+          "message": {
+            "text": "from clause of term __fc_random48_init in function seed48."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -14435,11 +17823,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 773,
-                  "startColumn": 32,
-                  "endLine": 773,
-                  "endColumn": 54,
-                  "byteLength": 22
+                  "startLine": 330,
+                  "startColumn": 10,
+                  "endLine": 330,
+                  "endColumn": 28,
+                  "byteLength": 18
                 }
               }
             }
@@ -14449,7 +17837,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "can_allocate." },
+          "message": {
+            "text": "from clause of term \\result in function seed48."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -14458,11 +17848,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 774,
-                  "startColumn": 26,
-                  "endLine": 774,
-                  "endColumn": 44,
-                  "byteLength": 18
+                  "startLine": 331,
+                  "startColumn": 10,
+                  "endLine": 331,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -14472,7 +17862,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_file_name." },
+          "message": { "text": "behavior default! in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -14481,11 +17871,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 779,
-                  "startColumn": 29,
-                  "endLine": 779,
-                  "endColumn": 57,
-                  "byteLength": 28
+                  "startLine": 611,
+                  "startColumn": 11,
+                  "endLine": 611,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -14495,7 +17885,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "resolved_name_null." },
+          "message": { "text": "behavior invalid_name in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -14504,11 +17894,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 780,
-                  "startColumn": 32,
-                  "endLine": 780,
-                  "endColumn": 54,
-                  "byteLength": 22
+                  "startLine": 611,
+                  "startColumn": 11,
+                  "endLine": 611,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -14518,7 +17908,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "cannot_allocate." },
+          "message": { "text": "behavior ok in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -14527,11 +17917,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 781,
-                  "startColumn": 29,
-                  "endLine": 781,
-                  "endColumn": 48,
-                  "byteLength": 19
+                  "startLine": 611,
+                  "startColumn": 11,
+                  "endLine": 611,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -14541,7 +17931,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_file_name." },
+          "message": { "text": "behavior out_of_memory in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -14550,11 +17940,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 787,
-                  "startColumn": 29,
-                  "endLine": 787,
-                  "endColumn": 57,
-                  "byteLength": 28
+                  "startLine": 611,
+                  "startColumn": 11,
+                  "endLine": 611,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -14564,7 +17954,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocated_resolved_name_or_fail." },
+          "message": { "text": "valid_name." },
           "locations": [
             {
               "physicalLocation": {
@@ -14573,11 +17963,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 789,
-                  "startColumn": 6,
-                  "endLine": 789,
-                  "endColumn": 42,
-                  "byteLength": 36
+                  "startLine": 570,
+                  "startColumn": 23,
+                  "endLine": 570,
+                  "endColumn": 46,
+                  "byteLength": 23
                 }
               }
             }
@@ -14587,7 +17977,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_file_name." },
+          "message": { "text": "valid_value." },
           "locations": [
             {
               "physicalLocation": {
@@ -14596,11 +17986,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 799,
-                  "startColumn": 29,
-                  "endLine": 799,
-                  "endColumn": 57,
-                  "byteLength": 28
+                  "startLine": 571,
+                  "startColumn": 24,
+                  "endLine": 571,
+                  "endColumn": 48,
+                  "byteLength": 24
                 }
               }
             }
@@ -14610,7 +18000,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_result." },
+          "message": { "text": "name_empty_or_with_equals_sign." },
           "locations": [
             {
               "physicalLocation": {
@@ -14619,11 +18009,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 769,
-                  "startColumn": 25,
-                  "endLine": 769,
-                  "endColumn": 41,
-                  "byteLength": 16
+                  "startLine": 583,
+                  "startColumn": 6,
+                  "endLine": 583,
+                  "endColumn": 44,
+                  "byteLength": 38
                 }
               }
             }
@@ -14633,7 +18023,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "errno_set." },
+          "message": { "text": "not_enough_memory." },
           "locations": [
             {
               "physicalLocation": {
@@ -14642,11 +18032,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 770,
-                  "startColumn": 23,
-                  "endLine": 770,
-                  "endColumn": 39,
-                  "byteLength": 16
+                  "startLine": 590,
+                  "startColumn": 31,
+                  "endLine": 590,
+                  "endColumn": 78,
+                  "byteLength": 47
                 }
               }
             }
@@ -14656,7 +18046,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "allocation." },
+          "message": { "text": "name_not_empty." },
           "locations": [
             {
               "physicalLocation": {
@@ -14665,11 +18055,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 777,
-                  "startColumn": 24,
-                  "endLine": 777,
+                  "startLine": 598,
+                  "startColumn": 28,
+                  "endLine": 598,
                   "endColumn": 44,
-                  "byteLength": 20
+                  "byteLength": 16
                 }
               }
             }
@@ -14679,7 +18069,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_result." },
+          "message": { "text": "name_has_no_equals_sign." },
           "locations": [
             {
               "physicalLocation": {
@@ -14688,11 +18078,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 784,
-                  "startColumn": 25,
-                  "endLine": 784,
-                  "endColumn": 41,
-                  "byteLength": 16
+                  "startLine": 599,
+                  "startColumn": 37,
+                  "endLine": 599,
+                  "endColumn": 55,
+                  "byteLength": 18
                 }
               }
             }
@@ -14702,7 +18092,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "errno_set." },
+          "message": { "text": "enough_memory." },
           "locations": [
             {
               "physicalLocation": {
@@ -14711,11 +18101,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 785,
-                  "startColumn": 23,
-                  "endLine": 785,
-                  "endColumn": 39,
-                  "byteLength": 16
+                  "startLine": 600,
+                  "startColumn": 27,
+                  "endLine": 600,
+                  "endColumn": 73,
+                  "byteLength": 46
                 }
               }
             }
@@ -14725,7 +18115,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_resolved_name." },
+          "message": { "text": "result_ok_or_error." },
           "locations": [
             {
               "physicalLocation": {
@@ -14734,11 +18124,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 792,
-                  "startColumn": 40,
-                  "endLine": 793,
-                  "endColumn": 71,
-                  "byteLength": 99
+                  "startLine": 580,
+                  "startColumn": 30,
+                  "endLine": 580,
+                  "endColumn": 59,
+                  "byteLength": 29
                 }
               }
             }
@@ -14748,7 +18138,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "resolved_result." },
+          "message": { "text": "error." },
           "locations": [
             {
               "physicalLocation": {
@@ -14757,11 +18147,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 796,
-                  "startColumn": 29,
-                  "endLine": 796,
-                  "endColumn": 53,
-                  "byteLength": 24
+                  "startLine": 587,
+                  "startColumn": 19,
+                  "endLine": 587,
+                  "endColumn": 32,
+                  "byteLength": 13
                 }
               }
             }
@@ -14771,7 +18161,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "null_result." },
+          "message": { "text": "errno_set." },
           "locations": [
             {
               "physicalLocation": {
@@ -14780,10 +18170,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 802,
-                  "startColumn": 25,
-                  "endLine": 802,
-                  "endColumn": 41,
+                  "startLine": 588,
+                  "startColumn": 23,
+                  "endLine": 588,
+                  "endColumn": 39,
                   "byteLength": 16
                 }
               }
@@ -14794,7 +18184,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "errno_set." },
+          "message": { "text": "error." },
           "locations": [
             {
               "physicalLocation": {
@@ -14803,11 +18193,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 804,
-                  "startColumn": 6,
-                  "endLine": 804,
-                  "endColumn": 43,
-                  "byteLength": 37
+                  "startLine": 595,
+                  "startColumn": 19,
+                  "endLine": 595,
+                  "endColumn": 32,
+                  "byteLength": 13
                 }
               }
             }
@@ -14817,7 +18207,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realpath." },
+          "message": { "text": "errno_set." },
           "locations": [
             {
               "physicalLocation": {
@@ -14826,10 +18216,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 775,
-                  "startColumn": 12,
-                  "endLine": 775,
-                  "endColumn": 28,
+                  "startLine": 596,
+                  "startColumn": 23,
+                  "endLine": 596,
+                  "endColumn": 39,
                   "byteLength": 16
                 }
               }
@@ -14840,7 +18230,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realpath." },
+          "message": { "text": "ok." },
           "locations": [
             {
               "physicalLocation": {
@@ -14849,11 +18239,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 760,
-                  "startColumn": 10,
-                  "endLine": 760,
-                  "endColumn": 26,
-                  "byteLength": 16
+                  "startLine": 609,
+                  "startColumn": 16,
+                  "endLine": 609,
+                  "endColumn": 28,
+                  "byteLength": 12
                 }
               }
             }
@@ -14863,7 +18253,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realpath." },
+          "message": { "text": "assigns clause in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -14872,10 +18262,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 800,
-                  "startColumn": 12,
-                  "endLine": 800,
-                  "endColumn": 19,
+                  "startLine": 573,
+                  "startColumn": 10,
+                  "endLine": 573,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -14886,7 +18276,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realpath." },
+          "message": { "text": "assigns clause in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -14895,11 +18285,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
-                  "startColumn": 13,
-                  "endLine": 807,
-                  "endColumn": 21,
-                  "byteLength": 8
+                  "startLine": 585,
+                  "startColumn": 12,
+                  "endLine": 585,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -14909,7 +18299,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realpath." },
+          "message": { "text": "assigns clause in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -14918,9 +18308,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 768,
+                  "startLine": 602,
                   "startColumn": 12,
-                  "endLine": 768,
+                  "endLine": 602,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -14932,7 +18322,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function realpath." },
+          "message": { "text": "assigns clause in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -14941,9 +18331,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 790,
+                  "startLine": 592,
                   "startColumn": 12,
-                  "endLine": 790,
+                  "endLine": 592,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -14956,7 +18346,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_heap_status in function realpath."
+            "text": "from clause of term \\result in function setenv."
           },
           "locations": [
             {
@@ -14966,11 +18356,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 775,
-                  "startColumn": 12,
-                  "endLine": 775,
-                  "endColumn": 28,
-                  "byteLength": 16
+                  "startLine": 573,
+                  "startColumn": 10,
+                  "endLine": 573,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -14981,7 +18371,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function realpath."
+            "text": "from clause of term __fc_env[0 ..] in function setenv."
           },
           "locations": [
             {
@@ -14991,11 +18381,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 776,
-                  "startColumn": 12,
-                  "endLine": 776,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 573,
+                  "startColumn": 19,
+                  "endLine": 573,
+                  "endColumn": 32,
+                  "byteLength": 13
                 }
               }
             }
@@ -15006,7 +18396,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_heap_status in function realpath."
+            "text": "from clause of term __fc_errno in function setenv."
           },
           "locations": [
             {
@@ -15016,11 +18406,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 760,
-                  "startColumn": 10,
-                  "endLine": 760,
-                  "endColumn": 26,
-                  "byteLength": 16
+                  "startLine": 573,
+                  "startColumn": 34,
+                  "endLine": 573,
+                  "endColumn": 44,
+                  "byteLength": 10
                 }
               }
             }
@@ -15031,7 +18421,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(\\result + (0 .. 4096 - 1)) in function realpath."
+            "text": "from clause of term *(__fc_env[0 ..] + (0 ..)) in function setenv."
           },
           "locations": [
             {
@@ -15041,11 +18431,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 761,
+                  "startLine": 576,
                   "startColumn": 10,
-                  "endLine": 761,
-                  "endColumn": 31,
-                  "byteLength": 21
+                  "endLine": 576,
+                  "endColumn": 28,
+                  "byteLength": 18
                 }
               }
             }
@@ -15056,7 +18446,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(resolved_name + (0 .. 4096 - 1)) in function realpath."
+            "text": "from clause of term \\result in function setenv."
           },
           "locations": [
             {
@@ -15066,11 +18456,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 761,
-                  "startColumn": 33,
-                  "endLine": 761,
-                  "endColumn": 60,
-                  "byteLength": 27
+                  "startLine": 585,
+                  "startColumn": 12,
+                  "endLine": 585,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -15081,7 +18471,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_errno in function realpath."
+            "text": "from clause of term __fc_errno in function setenv."
           },
           "locations": [
             {
@@ -15091,10 +18481,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 763,
-                  "startColumn": 10,
-                  "endLine": 763,
-                  "endColumn": 20,
+                  "startLine": 586,
+                  "startColumn": 12,
+                  "endLine": 586,
+                  "endColumn": 22,
                   "byteLength": 10
                 }
               }
@@ -15106,7 +18496,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function realpath."
+            "text": "from clause of term \\result in function setenv."
           },
           "locations": [
             {
@@ -15116,9 +18506,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 800,
+                  "startLine": 602,
                   "startColumn": 12,
-                  "endLine": 800,
+                  "endLine": 602,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -15131,7 +18521,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_errno in function realpath."
+            "text": "from clause of term __fc_env[0 ..] in function setenv."
           },
           "locations": [
             {
@@ -15141,11 +18531,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 800,
+                  "startLine": 602,
                   "startColumn": 21,
-                  "endLine": 800,
-                  "endColumn": 31,
-                  "byteLength": 10
+                  "endLine": 602,
+                  "endColumn": 34,
+                  "byteLength": 13
                 }
               }
             }
@@ -15156,7 +18546,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function realpath."
+            "text": "from clause of term *(__fc_env[0 ..] + (0 ..)) in function setenv."
           },
           "locations": [
             {
@@ -15166,11 +18556,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 782,
+                  "startLine": 605,
                   "startColumn": 12,
-                  "endLine": 782,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 605,
+                  "endColumn": 30,
+                  "byteLength": 18
                 }
               }
             }
@@ -15181,7 +18571,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function realpath."
+            "text": "from clause of term \\result in function setenv."
           },
           "locations": [
             {
@@ -15191,9 +18581,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 768,
+                  "startLine": 592,
                   "startColumn": 12,
-                  "endLine": 768,
+                  "endLine": 592,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -15206,7 +18596,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_errno in function realpath."
+            "text": "from clause of term __fc_errno in function setenv."
           },
           "locations": [
             {
@@ -15216,9 +18606,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 768,
+                  "startLine": 592,
                   "startColumn": 21,
-                  "endLine": 768,
+                  "endLine": 592,
                   "endColumn": 31,
                   "byteLength": 10
                 }
@@ -15230,9 +18620,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function realpath."
-          },
+          "message": { "text": "allocates/frees clause in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -15241,11 +18629,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 790,
+                  "startLine": 572,
                   "startColumn": 12,
-                  "endLine": 790,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "endLine": 572,
+                  "endColumn": 25,
+                  "byteLength": 13
                 }
               }
             }
@@ -15255,9 +18643,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *(resolved_name + (0 .. 4096 - 1)) in function realpath."
-          },
+          "message": { "text": "allocates/frees clause in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -15266,11 +18652,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 791,
-                  "startColumn": 12,
-                  "endLine": 791,
-                  "endColumn": 39,
-                  "byteLength": 27
+                  "startLine": 611,
+                  "startColumn": 11,
+                  "endLine": 611,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -15280,9 +18666,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "allocates/frees clause in function realpath."
-          },
+          "message": { "text": "allocates/frees clause in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -15291,11 +18675,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
-                  "startColumn": 13,
-                  "endLine": 807,
-                  "endColumn": 21,
-                  "byteLength": 8
+                  "startLine": 601,
+                  "startColumn": 14,
+                  "endLine": 601,
+                  "endColumn": 27,
+                  "byteLength": 13
                 }
               }
             }
@@ -15305,9 +18689,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "allocates/frees clause in function realpath."
-          },
+          "message": { "text": "allocates/frees clause in function setenv." },
           "locations": [
             {
               "physicalLocation": {
@@ -15316,11 +18698,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
-                  "startColumn": 13,
-                  "endLine": 807,
-                  "endColumn": 21,
-                  "byteLength": 8
+                  "startLine": 611,
+                  "startColumn": 11,
+                  "endLine": 611,
+                  "endColumn": 17,
+                  "byteLength": 6
                 }
               }
             }
@@ -15330,9 +18712,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "allocates/frees clause in function realpath."
-          },
+          "message": { "text": "behavior default! in function srand." },
           "locations": [
             {
               "physicalLocation": {
@@ -15341,11 +18721,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 807,
-                  "startColumn": 13,
-                  "endLine": 807,
-                  "endColumn": 21,
-                  "byteLength": 8
+                  "startLine": 302,
+                  "startColumn": 12,
+                  "endLine": 302,
+                  "endColumn": 17,
+                  "byteLength": 5
                 }
               }
             }
@@ -15355,7 +18735,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function seed48." },
+          "message": { "text": "assigns clause in function srand." },
           "locations": [
             {
               "physicalLocation": {
@@ -15364,11 +18744,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 308,
-                  "startColumn": 23,
-                  "endLine": 308,
-                  "endColumn": 29,
-                  "byteLength": 6
+                  "startLine": 301,
+                  "startColumn": 12,
+                  "endLine": 301,
+                  "endColumn": 31,
+                  "byteLength": 19
                 }
               }
             }
@@ -15378,7 +18758,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": {
+            "text": "from clause of term __fc_random_counter in function srand."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -15388,10 +18770,33 @@
                 },
                 "region": {
                   "startLine": 301,
-                  "startColumn": 47,
+                  "startColumn": 12,
                   "endLine": 301,
-                  "endColumn": 75,
-                  "byteLength": 28
+                  "endColumn": 31,
+                  "byteLength": 19
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function srand48." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/stdlib.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 324,
+                  "startColumn": 12,
+                  "endLine": 324,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -15410,9 +18815,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 305,
+                  "startLine": 322,
                   "startColumn": 32,
-                  "endLine": 305,
+                  "endLine": 322,
                   "endColumn": 55,
                   "byteLength": 23
                 }
@@ -15424,7 +18829,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_counter." },
+          "message": { "text": "assigns clause in function srand48." },
           "locations": [
             {
               "physicalLocation": {
@@ -15433,11 +18838,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 306,
-                  "startColumn": 26,
-                  "endLine": 306,
-                  "endColumn": 60,
-                  "byteLength": 34
+                  "startLine": 320,
+                  "startColumn": 10,
+                  "endLine": 320,
+                  "endColumn": 37,
+                  "byteLength": 27
                 }
               }
             }
@@ -15447,7 +18852,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function seed48." },
+          "message": {
+            "text": "from clause of term __fc_random48_counter[0 .. 2] in function srand48."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -15456,9 +18863,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 302,
+                  "startLine": 320,
                   "startColumn": 10,
-                  "endLine": 302,
+                  "endLine": 320,
                   "endColumn": 37,
                   "byteLength": 27
                 }
@@ -15471,7 +18878,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function seed48."
+            "text": "from clause of term __fc_random48_init in function srand48."
           },
           "locations": [
             {
@@ -15481,11 +18888,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 302,
+                  "startLine": 321,
                   "startColumn": 10,
-                  "endLine": 302,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "endLine": 321,
+                  "endColumn": 28,
+                  "byteLength": 18
                 }
               }
             }
@@ -15495,9 +18902,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_init in function seed48."
-          },
+          "message": { "text": "behavior default! in function srandom." },
           "locations": [
             {
               "physicalLocation": {
@@ -15506,11 +18911,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 303,
-                  "startColumn": 10,
-                  "endLine": 303,
-                  "endColumn": 28,
-                  "byteLength": 18
+                  "startLine": 311,
+                  "startColumn": 12,
+                  "endLine": 311,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -15520,9 +18925,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function seed48."
-          },
+          "message": { "text": "assigns clause in function srandom." },
           "locations": [
             {
               "physicalLocation": {
@@ -15531,11 +18934,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 304,
-                  "startColumn": 10,
-                  "endLine": 304,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 310,
+                  "startColumn": 12,
+                  "endLine": 310,
+                  "endColumn": 31,
+                  "byteLength": 19
                 }
               }
             }
@@ -15545,7 +18948,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function setenv." },
+          "message": {
+            "text": "from clause of term __fc_random_counter in function srandom."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -15554,11 +18959,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 543,
-                  "startColumn": 11,
-                  "endLine": 543,
-                  "endColumn": 17,
-                  "byteLength": 6
+                  "startLine": 310,
+                  "startColumn": 12,
+                  "endLine": 310,
+                  "endColumn": 31,
+                  "byteLength": 19
                 }
               }
             }
@@ -15568,20 +18973,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_name." },
+          "message": { "text": "behavior default! in function stpcpy." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 536,
-                  "startColumn": 23,
-                  "endLine": 536,
-                  "endColumn": 46,
-                  "byteLength": 23
+                  "startLine": 233,
+                  "startColumn": 6,
+                  "endLine": 240,
+                  "endColumn": 1,
+                  "byteLength": 139
                 }
               }
             }
@@ -15591,20 +18996,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_value." },
+          "message": { "text": "valid_string_src." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 537,
-                  "startColumn": 24,
-                  "endLine": 537,
-                  "endColumn": 48,
-                  "byteLength": 24
+                  "startLine": 464,
+                  "startColumn": 31,
+                  "endLine": 464,
+                  "endColumn": 53,
+                  "byteLength": 22
                 }
               }
             }
@@ -15614,19 +19019,19 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_ok_or_error." },
+          "message": { "text": "room_string." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 541,
-                  "startColumn": 30,
-                  "endLine": 541,
-                  "endColumn": 59,
+                  "startLine": 465,
+                  "startColumn": 26,
+                  "endLine": 465,
+                  "endColumn": 55,
                   "byteLength": 29
                 }
               }
@@ -15637,20 +19042,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function setenv." },
+          "message": { "text": "separation." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 538,
-                  "startColumn": 10,
-                  "endLine": 538,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 467,
+                  "startColumn": 4,
+                  "endLine": 467,
+                  "endColumn": 59,
+                  "byteLength": 55
                 }
               }
             }
@@ -15660,22 +19065,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function setenv."
-          },
+          "message": { "text": "equal_contents." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 538,
-                  "startColumn": 10,
-                  "endLine": 538,
-                  "endColumn": 17,
-                  "byteLength": 7
+                  "startLine": 470,
+                  "startColumn": 28,
+                  "endLine": 470,
+                  "endColumn": 49,
+                  "byteLength": 21
                 }
               }
             }
@@ -15685,22 +19088,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_env[0 ..] in function setenv."
-          },
+          "message": { "text": "points_to_end." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 538,
-                  "startColumn": 19,
-                  "endLine": 538,
-                  "endColumn": 32,
-                  "byteLength": 13
+                  "startLine": 471,
+                  "startColumn": 27,
+                  "endLine": 471,
+                  "endColumn": 57,
+                  "byteLength": 30
                 }
               }
             }
@@ -15710,20 +19111,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function srand." },
+          "message": { "text": "assigns clause in function stpcpy." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 276,
+                  "startLine": 468,
                   "startColumn": 12,
-                  "endLine": 276,
-                  "endColumn": 17,
-                  "byteLength": 5
+                  "endLine": 468,
+                  "endColumn": 32,
+                  "byteLength": 20
                 }
               }
             }
@@ -15733,20 +19134,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function srand." },
+          "message": {
+            "text": "from clause of term *(dest + (0 .. strlen{Old}(src))) in function stpcpy."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 275,
+                  "startLine": 468,
                   "startColumn": 12,
-                  "endLine": 275,
-                  "endColumn": 31,
-                  "byteLength": 19
+                  "endLine": 468,
+                  "endColumn": 32,
+                  "byteLength": 20
                 }
               }
             }
@@ -15757,21 +19160,21 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term __fc_random_counter in function srand."
+            "text": "from clause of term \\result in function stpcpy."
           },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 275,
+                  "startLine": 469,
                   "startColumn": 12,
-                  "endLine": 275,
-                  "endColumn": 31,
-                  "byteLength": 19
+                  "endLine": 469,
+                  "endColumn": 19,
+                  "byteLength": 7
                 }
               }
             }
@@ -15781,19 +19184,19 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function srand48." },
+          "message": { "text": "behavior default! in function stpncpy." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 298,
-                  "startColumn": 12,
-                  "endLine": 298,
-                  "endColumn": 19,
+                  "startLine": 630,
+                  "startColumn": 13,
+                  "endLine": 630,
+                  "endColumn": 20,
                   "byteLength": 7
                 }
               }
@@ -15804,20 +19207,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "random48_initialized." },
+          "message": {
+            "text": "behavior src_is_a_string in function stpncpy."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 296,
-                  "startColumn": 32,
-                  "endLine": 296,
-                  "endColumn": 55,
-                  "byteLength": 23
+                  "startLine": 630,
+                  "startColumn": 13,
+                  "endLine": 630,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -15827,20 +19232,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function srand48." },
+          "message": { "text": "behavior src_too_long in function stpncpy." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 294,
-                  "startColumn": 10,
-                  "endLine": 294,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 630,
+                  "startColumn": 13,
+                  "endLine": 630,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -15850,22 +19255,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_counter[0 .. 2] in function srand48."
-          },
+          "message": { "text": "valid_string_src." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 294,
-                  "startColumn": 10,
-                  "endLine": 294,
-                  "endColumn": 37,
-                  "byteLength": 27
+                  "startLine": 612,
+                  "startColumn": 29,
+                  "endLine": 612,
+                  "endColumn": 55,
+                  "byteLength": 26
                 }
               }
             }
@@ -15875,22 +19278,43 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random48_init in function srand48."
-          },
+          "message": { "text": "valid_dest." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 295,
-                  "startColumn": 10,
-                  "endLine": 295,
-                  "endColumn": 28,
-                  "byteLength": 18
+                  "startLine": 613,
+                  "startColumn": 23,
+                  "endLine": 613,
+                  "endColumn": 46,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 614,
+                  "startColumn": 23,
+                  "endLine": 614,
+                  "endColumn": 66,
+                  "byteLength": 43
                 }
               }
             }
@@ -15900,20 +19324,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function srandom." },
+          "message": { "text": "src_has_nul." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 285,
-                  "startColumn": 12,
-                  "endLine": 285,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 619,
+                  "startColumn": 25,
+                  "endLine": 619,
+                  "endColumn": 40,
+                  "byteLength": 15
                 }
               }
             }
@@ -15923,20 +19347,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function srandom." },
+          "message": { "text": "src_no_nul." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 284,
-                  "startColumn": 12,
-                  "endLine": 284,
-                  "endColumn": 31,
-                  "byteLength": 19
+                  "startLine": 626,
+                  "startColumn": 24,
+                  "endLine": 626,
+                  "endColumn": 69,
+                  "byteLength": 45
                 }
               }
             }
@@ -15946,22 +19370,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term __fc_random_counter in function srandom."
-          },
+          "message": { "text": "initialization." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/stdlib.h",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 284,
-                  "startColumn": 12,
-                  "endLine": 284,
-                  "endColumn": 31,
-                  "byteLength": 19
+                  "startLine": 617,
+                  "startColumn": 26,
+                  "endLine": 617,
+                  "endColumn": 55,
+                  "byteLength": 29
                 }
               }
             }
@@ -15971,20 +19393,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function stpcpy." },
+          "message": { "text": "valid_string_dest." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 230,
-                  "startColumn": 6,
-                  "endLine": 237,
-                  "endColumn": 1,
-                  "byteLength": 139
+                  "startLine": 620,
+                  "startColumn": 31,
+                  "endLine": 620,
+                  "endColumn": 54,
+                  "byteLength": 23
                 }
               }
             }
@@ -15994,7 +19416,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_src." },
+          "message": { "text": "same_contents." },
           "locations": [
             {
               "physicalLocation": {
@@ -16003,10 +19425,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 412,
-                  "startColumn": 31,
-                  "endLine": 412,
-                  "endColumn": 53,
+                  "startLine": 621,
+                  "startColumn": 27,
+                  "endLine": 621,
+                  "endColumn": 49,
                   "byteLength": 22
                 }
               }
@@ -16017,7 +19439,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "room_string." },
+          "message": { "text": "dest_nul_padded." },
           "locations": [
             {
               "physicalLocation": {
@@ -16026,11 +19448,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 413,
-                  "startColumn": 26,
-                  "endLine": 413,
-                  "endColumn": 55,
-                  "byteLength": 29
+                  "startLine": 623,
+                  "startColumn": 6,
+                  "endLine": 623,
+                  "endColumn": 62,
+                  "byteLength": 56
                 }
               }
             }
@@ -16040,7 +19462,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": { "text": "result_points_to_nul." },
           "locations": [
             {
               "physicalLocation": {
@@ -16049,11 +19471,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 415,
-                  "startColumn": 4,
-                  "endLine": 415,
-                  "endColumn": 59,
-                  "byteLength": 55
+                  "startLine": 624,
+                  "startColumn": 34,
+                  "endLine": 624,
+                  "endColumn": 63,
+                  "byteLength": 29
                 }
               }
             }
@@ -16063,7 +19485,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "equal_contents." },
+          "message": { "text": "same_partial_contents." },
           "locations": [
             {
               "physicalLocation": {
@@ -16072,11 +19494,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 418,
-                  "startColumn": 28,
-                  "endLine": 418,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 627,
+                  "startColumn": 35,
+                  "endLine": 627,
+                  "endColumn": 61,
+                  "byteLength": 26
                 }
               }
             }
@@ -16086,7 +19508,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "points_to_end." },
+          "message": { "text": "result_points_to_end." },
           "locations": [
             {
               "physicalLocation": {
@@ -16095,11 +19517,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 419,
-                  "startColumn": 27,
-                  "endLine": 419,
-                  "endColumn": 57,
-                  "byteLength": 30
+                  "startLine": 628,
+                  "startColumn": 34,
+                  "endLine": 628,
+                  "endColumn": 53,
+                  "byteLength": 19
                 }
               }
             }
@@ -16109,7 +19531,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function stpcpy." },
+          "message": { "text": "assigns clause in function stpncpy." },
           "locations": [
             {
               "physicalLocation": {
@@ -16118,11 +19540,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 416,
-                  "startColumn": 12,
-                  "endLine": 416,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "startLine": 615,
+                  "startColumn": 10,
+                  "endLine": 615,
+                  "endColumn": 24,
+                  "byteLength": 14
                 }
               }
             }
@@ -16133,7 +19555,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(dest + (0 .. strlen{Old}(src))) in function stpcpy."
+            "text": "from clause of term *(dest + (0 .. n - 1)) in function stpncpy."
           },
           "locations": [
             {
@@ -16143,11 +19565,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 416,
-                  "startColumn": 12,
-                  "endLine": 416,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "startLine": 615,
+                  "startColumn": 10,
+                  "endLine": 615,
+                  "endColumn": 24,
+                  "byteLength": 14
                 }
               }
             }
@@ -16158,7 +19580,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function stpcpy."
+            "text": "from clause of term \\result in function stpncpy."
           },
           "locations": [
             {
@@ -16168,10 +19590,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 417,
-                  "startColumn": 12,
-                  "endLine": 417,
-                  "endColumn": 19,
+                  "startLine": 616,
+                  "startColumn": 10,
+                  "endLine": 616,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -16191,9 +19613,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 183,
+                  "startLine": 186,
                   "startColumn": 4,
-                  "endLine": 193,
+                  "endLine": 196,
                   "endColumn": 1,
                   "byteLength": 284
                 }
@@ -16260,9 +19682,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 183,
+                  "startLine": 186,
                   "startColumn": 4,
-                  "endLine": 193,
+                  "endLine": 196,
                   "endColumn": 1,
                   "byteLength": 284
                 }
@@ -16308,9 +19730,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 255,
+                  "startLine": 281,
                   "startColumn": 13,
-                  "endLine": 255,
+                  "endLine": 281,
                   "endColumn": 23,
                   "byteLength": 10
                 }
@@ -16331,10 +19753,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 247,
-                  "startColumn": 36,
-                  "endLine": 247,
-                  "endColumn": 63,
+                  "startLine": 271,
+                  "startColumn": 34,
+                  "endLine": 271,
+                  "endColumn": 61,
                   "byteLength": 27
                 }
               }
@@ -16354,10 +19776,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 248,
-                  "startColumn": 34,
-                  "endLine": 248,
-                  "endColumn": 59,
+                  "startLine": 272,
+                  "startColumn": 32,
+                  "endLine": 272,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -16377,11 +19799,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 252,
+                  "startLine": 276,
                   "startColumn": 4,
-                  "endLine": 253,
-                  "endColumn": 65,
-                  "byteLength": 82
+                  "endLine": 278,
+                  "endColumn": 49,
+                  "byteLength": 104
                 }
               }
             }
@@ -16400,9 +19822,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 255,
+                  "startLine": 281,
                   "startColumn": 13,
-                  "endLine": 255,
+                  "endLine": 281,
                   "endColumn": 23,
                   "byteLength": 10
                 }
@@ -16425,10 +19847,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 249,
-                  "startColumn": 12,
-                  "endLine": 249,
-                  "endColumn": 19,
+                  "startLine": 273,
+                  "startColumn": 10,
+                  "endLine": 273,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -16448,9 +19870,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 195,
+                  "startLine": 198,
                   "startColumn": 6,
-                  "endLine": 204,
+                  "endLine": 207,
                   "endColumn": 1,
                   "byteLength": 172
                 }
@@ -16471,9 +19893,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 424,
+                  "startLine": 476,
                   "startColumn": 31,
-                  "endLine": 424,
+                  "endLine": 476,
                   "endColumn": 53,
                   "byteLength": 22
                 }
@@ -16494,9 +19916,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 425,
+                  "startLine": 477,
                   "startColumn": 32,
-                  "endLine": 425,
+                  "endLine": 477,
                   "endColumn": 50,
                   "byteLength": 18
                 }
@@ -16517,9 +19939,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 426,
+                  "startLine": 478,
                   "startColumn": 26,
-                  "endLine": 426,
+                  "endLine": 478,
                   "endColumn": 70,
                   "byteLength": 44
                 }
@@ -16527,6 +19949,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 480,
+                  "startColumn": 4,
+                  "endLine": 480,
+                  "endColumn": 72,
+                  "byteLength": 68
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -16540,9 +19985,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 429,
+                  "startLine": 483,
                   "startColumn": 28,
-                  "endLine": 429,
+                  "endLine": 483,
                   "endColumn": 76,
                   "byteLength": 48
                 }
@@ -16563,9 +20008,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 432,
+                  "startLine": 486,
                   "startColumn": 4,
-                  "endLine": 432,
+                  "endLine": 486,
                   "endColumn": 60,
                   "byteLength": 56
                 }
@@ -16586,9 +20031,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 433,
+                  "startLine": 487,
                   "startColumn": 34,
-                  "endLine": 433,
+                  "endLine": 487,
                   "endColumn": 77,
                   "byteLength": 43
                 }
@@ -16609,9 +20054,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 434,
+                  "startLine": 488,
                   "startColumn": 24,
-                  "endLine": 434,
+                  "endLine": 488,
                   "endColumn": 39,
                   "byteLength": 15
                 }
@@ -16632,9 +20077,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 427,
+                  "startLine": 481,
                   "startColumn": 12,
-                  "endLine": 427,
+                  "endLine": 481,
                   "endColumn": 58,
                   "byteLength": 46
                 }
@@ -16647,7 +20092,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(dest +\n                      (strlen{Old}(dest) ..\n                                           strlen{Old}(dest) +\n                                           strlen{Old}(src))) in function strcat."
+            "text": "from clause of term *(dest +\n                      (strlen{Old}(dest) ..\n                       strlen{Old}(dest) + strlen{Old}(src))) in function strcat."
           },
           "locations": [
             {
@@ -16657,9 +20102,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 427,
+                  "startLine": 481,
                   "startColumn": 12,
-                  "endLine": 427,
+                  "endLine": 481,
                   "endColumn": 58,
                   "byteLength": 46
                 }
@@ -16682,9 +20127,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 430,
+                  "startLine": 484,
                   "startColumn": 12,
-                  "endLine": 430,
+                  "endLine": 484,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -16707,9 +20152,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 198,
+                  "startLine": 201,
                   "startColumn": 13,
-                  "endLine": 198,
+                  "endLine": 201,
                   "endColumn": 25,
                   "byteLength": 12
                 }
@@ -16721,7 +20166,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "error",
-          "message": { "text": "reachability of stmt line 198 in strcat." },
+          "message": { "text": "reachability of stmt line 201 in strcat." },
           "locations": [
             {
               "physicalLocation": {
@@ -16730,9 +20175,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 198,
+                  "startLine": 201,
                   "startColumn": 13,
-                  "endLine": 198,
+                  "endLine": 201,
                   "endColumn": 25,
                   "byteLength": 12
                 }
@@ -16740,29 +20185,6 @@
             }
           ]
         },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "behavior default in function strchr." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.c",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 251,
-                  "startColumn": 6,
-                  "endLine": 258,
-                  "endColumn": 1,
-                  "byteLength": 157
-                }
-              }
-            }
-          ]
-        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -16776,9 +20198,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 251,
+                  "startLine": 254,
                   "startColumn": 6,
-                  "endLine": 258,
+                  "endLine": 261,
                   "endColumn": 1,
                   "byteLength": 157
                 }
@@ -16799,9 +20221,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 251,
+                  "startLine": 254,
                   "startColumn": 6,
-                  "endLine": 258,
+                  "endLine": 261,
                   "endColumn": 1,
                   "byteLength": 157
                 }
@@ -16822,9 +20244,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 251,
+                  "startLine": 254,
                   "startColumn": 6,
-                  "endLine": 258,
+                  "endLine": 261,
                   "endColumn": 1,
                   "byteLength": 157
                 }
@@ -16845,10 +20267,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 173,
-                  "startColumn": 29,
-                  "endLine": 173,
-                  "endColumn": 49,
+                  "startLine": 193,
+                  "startColumn": 27,
+                  "endLine": 193,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -16868,9 +20290,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 176,
+                  "startLine": 196,
                   "startColumn": 24,
-                  "endLine": 176,
+                  "endLine": 196,
                   "endColumn": 35,
                   "byteLength": 11
                 }
@@ -16891,9 +20313,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 183,
+                  "startLine": 204,
                   "startColumn": 28,
-                  "endLine": 183,
+                  "endLine": 204,
                   "endColumn": 40,
                   "byteLength": 12
                 }
@@ -16901,6 +20323,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_valid_string." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 197,
+                  "startColumn": 33,
+                  "endLine": 197,
+                  "endColumn": 59,
+                  "byteLength": 26
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -16914,9 +20359,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 177,
+                  "startLine": 198,
                   "startColumn": 25,
-                  "endLine": 177,
+                  "endLine": 198,
                   "endColumn": 44,
                   "byteLength": 19
                 }
@@ -16937,9 +20382,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 178,
+                  "startLine": 199,
                   "startColumn": 30,
-                  "endLine": 178,
+                  "endLine": 199,
                   "endColumn": 66,
                   "byteLength": 36
                 }
@@ -16960,9 +20405,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 179,
+                  "startLine": 200,
                   "startColumn": 30,
-                  "endLine": 179,
+                  "endLine": 200,
                   "endColumn": 59,
                   "byteLength": 29
                 }
@@ -16974,7 +20419,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_valid_string." },
+          "message": { "text": "result_first_occurrence." },
           "locations": [
             {
               "physicalLocation": {
@@ -16983,11 +20428,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 180,
-                  "startColumn": 33,
-                  "endLine": 180,
-                  "endColumn": 59,
-                  "byteLength": 26
+                  "startLine": 202,
+                  "startColumn": 6,
+                  "endLine": 202,
+                  "endColumn": 57,
+                  "byteLength": 51
                 }
               }
             }
@@ -16997,7 +20442,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_first_occur." },
+          "message": { "text": "result_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -17006,11 +20451,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 181,
-                  "startColumn": 32,
-                  "endLine": 181,
-                  "endColumn": 79,
-                  "byteLength": 47
+                  "startLine": 205,
+                  "startColumn": 25,
+                  "endLine": 205,
+                  "endColumn": 41,
+                  "byteLength": 16
                 }
               }
             }
@@ -17020,20 +20465,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null." },
+          "message": { "text": "assigns clause in function strchr." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 184,
-                  "startColumn": 25,
-                  "endLine": 184,
-                  "endColumn": 41,
-                  "byteLength": 16
+                  "startLine": 254,
+                  "startColumn": 6,
+                  "endLine": 261,
+                  "endColumn": 1,
+                  "byteLength": 157
                 }
               }
             }
@@ -17043,7 +20488,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null_or_same_base." },
+          "message": {
+            "text": "from clause of term \\result in function strchr."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -17052,11 +20499,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 187,
-                  "startColumn": 4,
-                  "endLine": 187,
-                  "endColumn": 60,
-                  "byteLength": 56
+                  "startLine": 194,
+                  "startColumn": 10,
+                  "endLine": 194,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -17066,7 +20513,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function strchr." },
+          "message": { "text": "complete clause in function strchr." },
           "locations": [
             {
               "physicalLocation": {
@@ -17075,9 +20522,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 251,
+                  "startLine": 254,
                   "startColumn": 6,
-                  "endLine": 258,
+                  "endLine": 261,
                   "endColumn": 1,
                   "byteLength": 157
                 }
@@ -17089,22 +20536,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function strchr."
-          },
+          "message": { "text": "disjoint clause in function strchr." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 174,
-                  "startColumn": 12,
-                  "endLine": 174,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 254,
+                  "startColumn": 6,
+                  "endLine": 261,
+                  "endColumn": 1,
+                  "byteLength": 157
                 }
               }
             }
@@ -17123,9 +20568,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 195,
+                  "startLine": 217,
                   "startColumn": 13,
-                  "endLine": 195,
+                  "endLine": 217,
                   "endColumn": 22,
                   "byteLength": 9
                 }
@@ -17146,16 +20591,39 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 191,
-                  "startColumn": 29,
-                  "endLine": 191,
-                  "endColumn": 49,
+                  "startLine": 212,
+                  "startColumn": 27,
+                  "endLine": 212,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_valid_string." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 214,
+                  "startColumn": 31,
+                  "endLine": 214,
+                  "endColumn": 57,
+                  "byteLength": 26
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -17169,11 +20637,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 193,
-                  "startColumn": 30,
-                  "endLine": 193,
+                  "startLine": 215,
+                  "startColumn": 28,
+                  "endLine": 215,
                   "endColumn": 64,
-                  "byteLength": 34
+                  "byteLength": 36
                 }
               }
             }
@@ -17192,9 +20660,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 195,
+                  "startLine": 217,
                   "startColumn": 13,
-                  "endLine": 195,
+                  "endLine": 217,
                   "endColumn": 22,
                   "byteLength": 9
                 }
@@ -17217,10 +20685,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 192,
-                  "startColumn": 12,
-                  "endLine": 192,
-                  "endColumn": 19,
+                  "startLine": 213,
+                  "startColumn": 10,
+                  "endLine": 213,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -17263,9 +20731,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 153,
+                  "startLine": 170,
                   "startColumn": 30,
-                  "endLine": 153,
+                  "endLine": 170,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -17286,9 +20754,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 154,
+                  "startLine": 171,
                   "startColumn": 30,
-                  "endLine": 154,
+                  "endLine": 171,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -17309,9 +20777,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 156,
+                  "startLine": 174,
                   "startColumn": 26,
-                  "endLine": 156,
+                  "endLine": 174,
                   "endColumn": 50,
                   "byteLength": 24
                 }
@@ -17357,9 +20825,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 155,
+                  "startLine": 172,
                   "startColumn": 12,
-                  "endLine": 155,
+                  "endLine": 172,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -17380,9 +20848,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 171,
+                  "startLine": 190,
                   "startColumn": 11,
-                  "endLine": 171,
+                  "endLine": 190,
                   "endColumn": 18,
                   "byteLength": 7
                 }
@@ -17403,9 +20871,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 167,
+                  "startLine": 185,
                   "startColumn": 30,
-                  "endLine": 167,
+                  "endLine": 185,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -17426,9 +20894,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 168,
+                  "startLine": 186,
                   "startColumn": 30,
-                  "endLine": 168,
+                  "endLine": 186,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -17449,9 +20917,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 171,
+                  "startLine": 190,
                   "startColumn": 11,
-                  "endLine": 171,
+                  "endLine": 190,
                   "endColumn": 18,
                   "byteLength": 7
                 }
@@ -17474,9 +20942,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 169,
+                  "startLine": 187,
                   "startColumn": 12,
-                  "endLine": 169,
+                  "endLine": 187,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -17497,9 +20965,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 220,
+                  "startLine": 223,
                   "startColumn": 6,
-                  "endLine": 227,
+                  "endLine": 230,
                   "endColumn": 1,
                   "byteLength": 135
                 }
@@ -17520,9 +20988,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 367,
+                  "startLine": 419,
                   "startColumn": 31,
-                  "endLine": 367,
+                  "endLine": 419,
                   "endColumn": 53,
                   "byteLength": 22
                 }
@@ -17543,9 +21011,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 368,
+                  "startLine": 420,
                   "startColumn": 26,
-                  "endLine": 368,
+                  "endLine": 420,
                   "endColumn": 55,
                   "byteLength": 29
                 }
@@ -17566,9 +21034,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 370,
+                  "startLine": 422,
                   "startColumn": 4,
-                  "endLine": 370,
+                  "endLine": 422,
                   "endColumn": 59,
                   "byteLength": 55
                 }
@@ -17589,9 +21057,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 373,
+                  "startLine": 425,
                   "startColumn": 28,
-                  "endLine": 373,
+                  "endLine": 425,
                   "endColumn": 49,
                   "byteLength": 21
                 }
@@ -17612,9 +21080,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 374,
+                  "startLine": 426,
                   "startColumn": 24,
-                  "endLine": 374,
+                  "endLine": 426,
                   "endColumn": 39,
                   "byteLength": 15
                 }
@@ -17635,9 +21103,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 371,
+                  "startLine": 423,
                   "startColumn": 12,
-                  "endLine": 371,
+                  "endLine": 423,
                   "endColumn": 32,
                   "byteLength": 20
                 }
@@ -17660,9 +21128,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 371,
+                  "startLine": 423,
                   "startColumn": 12,
-                  "endLine": 371,
+                  "endLine": 423,
                   "endColumn": 32,
                   "byteLength": 20
                 }
@@ -17685,9 +21153,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 372,
+                  "startLine": 424,
                   "startColumn": 12,
-                  "endLine": 372,
+                  "endLine": 424,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -17708,9 +21176,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 218,
+                  "startLine": 235,
                   "startColumn": 14,
-                  "endLine": 218,
+                  "endLine": 235,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -17731,10 +21199,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 213,
-                  "startColumn": 29,
-                  "endLine": 213,
-                  "endColumn": 49,
+                  "startLine": 229,
+                  "startColumn": 27,
+                  "endLine": 229,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -17751,13 +21219,13 @@
               "physicalLocation": {
                 "artifactLocation": {
                   "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 214,
-                  "startColumn": 34,
-                  "endLine": 214,
-                  "endColumn": 59,
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 230,
+                  "startColumn": 32,
+                  "endLine": 230,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -17777,10 +21245,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 216,
-                  "startColumn": 28,
-                  "endLine": 216,
-                  "endColumn": 53,
+                  "startLine": 233,
+                  "startColumn": 26,
+                  "endLine": 233,
+                  "endColumn": 51,
                   "byteLength": 25
                 }
               }
@@ -17800,9 +21268,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 218,
+                  "startLine": 235,
                   "startColumn": 14,
-                  "endLine": 218,
+                  "endLine": 235,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -17825,10 +21293,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 215,
-                  "startColumn": 12,
-                  "endLine": 215,
-                  "endColumn": 19,
+                  "startLine": 231,
+                  "startColumn": 10,
+                  "endLine": 231,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -17848,9 +21316,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 316,
+                  "startLine": 319,
                   "startColumn": 6,
-                  "endLine": 326,
+                  "endLine": 329,
                   "endColumn": 1,
                   "byteLength": 158
                 }
@@ -17871,9 +21339,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 316,
+                  "startLine": 319,
                   "startColumn": 6,
-                  "endLine": 326,
+                  "endLine": 329,
                   "endColumn": 1,
                   "byteLength": 158
                 }
@@ -17894,9 +21362,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 316,
+                  "startLine": 319,
                   "startColumn": 6,
-                  "endLine": 326,
+                  "endLine": 329,
                   "endColumn": 1,
                   "byteLength": 158
                 }
@@ -17917,10 +21385,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 484,
-                  "startColumn": 29,
-                  "endLine": 484,
-                  "endColumn": 49,
+                  "startLine": 565,
+                  "startColumn": 27,
+                  "endLine": 565,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -17940,11 +21408,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 488,
+                  "startLine": 569,
                   "startColumn": 26,
-                  "endLine": 488,
-                  "endColumn": 49,
-                  "byteLength": 23
+                  "endLine": 569,
+                  "endColumn": 51,
+                  "byteLength": 25
                 }
               }
             }
@@ -17963,11 +21431,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 495,
+                  "startLine": 577,
                   "startColumn": 29,
-                  "endLine": 495,
-                  "endColumn": 53,
-                  "byteLength": 24
+                  "endLine": 577,
+                  "endColumn": 55,
+                  "byteLength": 26
                 }
               }
             }
@@ -17986,11 +21454,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 491,
+                  "startLine": 573,
                   "startColumn": 24,
-                  "endLine": 491,
-                  "endColumn": 49,
-                  "byteLength": 25
+                  "endLine": 573,
+                  "endColumn": 51,
+                  "byteLength": 27
                 }
               }
             }
@@ -18009,10 +21477,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 493,
-                  "startColumn": 4,
-                  "endLine": 493,
-                  "endColumn": 51,
+                  "startLine": 575,
+                  "startColumn": 6,
+                  "endLine": 575,
+                  "endColumn": 53,
                   "byteLength": 47
                 }
               }
@@ -18032,9 +21500,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 498,
+                  "startLine": 580,
                   "startColumn": 25,
-                  "endLine": 498,
+                  "endLine": 580,
                   "endColumn": 41,
                   "byteLength": 16
                 }
@@ -18055,9 +21523,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
+                  "startLine": 570,
                   "startColumn": 12,
-                  "endLine": 489,
+                  "endLine": 570,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -18078,9 +21546,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 316,
+                  "startLine": 319,
                   "startColumn": 6,
-                  "endLine": 326,
+                  "endLine": 329,
                   "endColumn": 1,
                   "byteLength": 158
                 }
@@ -18101,9 +21569,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 316,
+                  "startLine": 319,
                   "startColumn": 6,
-                  "endLine": 326,
+                  "endLine": 329,
                   "endColumn": 1,
                   "byteLength": 158
                 }
@@ -18126,9 +21594,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
+                  "startLine": 570,
                   "startColumn": 12,
-                  "endLine": 489,
+                  "endLine": 570,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -18151,9 +21619,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 490,
+                  "startLine": 572,
                   "startColumn": 12,
-                  "endLine": 490,
+                  "endLine": 572,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -18176,10 +21644,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 486,
-                  "startColumn": 12,
-                  "endLine": 486,
-                  "endColumn": 19,
+                  "startLine": 567,
+                  "startColumn": 10,
+                  "endLine": 567,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -18201,9 +21669,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 496,
+                  "startLine": 579,
                   "startColumn": 12,
-                  "endLine": 496,
+                  "endLine": 579,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -18224,10 +21692,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 485,
-                  "startColumn": 14,
-                  "endLine": 485,
-                  "endColumn": 21,
+                  "startLine": 566,
+                  "startColumn": 12,
+                  "endLine": 566,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -18247,9 +21715,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 316,
+                  "startLine": 319,
                   "startColumn": 6,
-                  "endLine": 326,
+                  "endLine": 329,
                   "endColumn": 1,
                   "byteLength": 158
                 }
@@ -18272,9 +21740,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 318,
+                  "startLine": 321,
                   "startColumn": 13,
-                  "endLine": 318,
+                  "endLine": 321,
                   "endColumn": 22,
                   "byteLength": 9
                 }
@@ -18286,7 +21754,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "error",
-          "message": { "text": "reachability of stmt line 318 in strdup." },
+          "message": { "text": "reachability of stmt line 321 in strdup." },
           "locations": [
             {
               "physicalLocation": {
@@ -18295,9 +21763,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 318,
+                  "startLine": 321,
                   "startColumn": 13,
-                  "endLine": 318,
+                  "endLine": 321,
                   "endColumn": 22,
                   "byteLength": 9
                 }
@@ -18318,9 +21786,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 324,
+                  "startLine": 327,
                   "startColumn": 2,
-                  "endLine": 324,
+                  "endLine": 327,
                   "endColumn": 17,
                   "byteLength": 15
                 }
@@ -18341,9 +21809,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 324,
+                  "startLine": 327,
                   "startColumn": 2,
-                  "endLine": 324,
+                  "endLine": 327,
                   "endColumn": 17,
                   "byteLength": 15
                 }
@@ -18364,9 +21832,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 324,
+                  "startLine": 327,
                   "startColumn": 2,
-                  "endLine": 324,
+                  "endLine": 327,
                   "endColumn": 17,
                   "byteLength": 15
                 }
@@ -18378,7 +21846,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "error",
-          "message": { "text": "reachability of stmt line 324 in strdup." },
+          "message": { "text": "reachability of stmt line 327 in strdup." },
           "locations": [
             {
               "physicalLocation": {
@@ -18387,9 +21855,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 324,
+                  "startLine": 327,
                   "startColumn": 2,
-                  "endLine": 324,
+                  "endLine": 327,
                   "endColumn": 17,
                   "byteLength": 15
                 }
@@ -18410,9 +21878,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 302,
+                  "startLine": 305,
                   "startColumn": 6,
-                  "endLine": 313,
+                  "endLine": 316,
                   "endColumn": 1,
                   "byteLength": 216
                 }
@@ -18433,9 +21901,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 359,
+                  "startLine": 411,
                   "startColumn": 33,
-                  "endLine": 359,
+                  "endLine": 411,
                   "endColumn": 59,
                   "byteLength": 26
                 }
@@ -18456,9 +21924,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 360,
+                  "startLine": 412,
                   "startColumn": 35,
-                  "endLine": 360,
+                  "endLine": 412,
                   "endColumn": 51,
                   "byteLength": 16
                 }
@@ -18479,9 +21947,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 361,
+                  "startLine": 413,
                   "startColumn": 33,
-                  "endLine": 361,
+                  "endLine": 413,
                   "endColumn": 59,
                   "byteLength": 26
                 }
@@ -18502,9 +21970,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 302,
+                  "startLine": 305,
                   "startColumn": 6,
-                  "endLine": 313,
+                  "endLine": 316,
                   "endColumn": 1,
                   "byteLength": 216
                 }
@@ -18527,9 +21995,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 358,
+                  "startLine": 410,
                   "startColumn": 12,
-                  "endLine": 358,
+                  "endLine": 410,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -18550,9 +22018,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 307,
+                  "startLine": 310,
                   "startColumn": 4,
-                  "endLine": 307,
+                  "endLine": 310,
                   "endColumn": 43,
                   "byteLength": 39
                 }
@@ -18564,7 +22032,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "error",
-          "message": { "text": "reachability of stmt line 307 in strerror." },
+          "message": { "text": "reachability of stmt line 310 in strerror." },
           "locations": [
             {
               "physicalLocation": {
@@ -18573,9 +22041,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 307,
+                  "startLine": 310,
                   "startColumn": 4,
-                  "endLine": 307,
+                  "endLine": 310,
                   "endColumn": 43,
                   "byteLength": 39
                 }
@@ -18596,9 +22064,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 471,
+                  "startLine": 536,
                   "startColumn": 14,
-                  "endLine": 471,
+                  "endLine": 536,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -18619,9 +22087,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 464,
+                  "startLine": 526,
                   "startColumn": 31,
-                  "endLine": 464,
+                  "endLine": 526,
                   "endColumn": 53,
                   "byteLength": 22
                 }
@@ -18642,9 +22110,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 465,
+                  "startLine": 527,
                   "startColumn": 32,
-                  "endLine": 465,
+                  "endLine": 527,
                   "endColumn": 50,
                   "byteLength": 18
                 }
@@ -18665,9 +22133,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 466,
+                  "startLine": 528,
                   "startColumn": 27,
-                  "endLine": 466,
+                  "endLine": 528,
                   "endColumn": 48,
                   "byteLength": 21
                 }
@@ -18675,6 +22143,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 530,
+                  "startColumn": 4,
+                  "endLine": 531,
+                  "endColumn": 31,
+                  "byteLength": 89
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -18688,9 +22179,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 469,
+                  "startLine": 534,
                   "startColumn": 28,
-                  "endLine": 469,
+                  "endLine": 534,
                   "endColumn": 65,
                   "byteLength": 37
                 }
@@ -18711,9 +22202,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 467,
+                  "startLine": 532,
                   "startColumn": 12,
-                  "endLine": 467,
+                  "endLine": 532,
                   "endColumn": 33,
                   "byteLength": 21
                 }
@@ -18736,9 +22227,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 467,
+                  "startLine": 532,
                   "startColumn": 12,
-                  "endLine": 467,
+                  "endLine": 532,
                   "endColumn": 33,
                   "byteLength": 21
                 }
@@ -18761,9 +22252,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 468,
+                  "startLine": 533,
                   "startColumn": 12,
-                  "endLine": 468,
+                  "endLine": 533,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -18784,9 +22275,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 409,
+                  "startLine": 461,
                   "startColumn": 7,
-                  "endLine": 409,
+                  "endLine": 461,
                   "endColumn": 14,
                   "byteLength": 7
                 }
@@ -18807,9 +22298,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 400,
+                  "startLine": 452,
                   "startColumn": 31,
-                  "endLine": 400,
+                  "endLine": 452,
                   "endColumn": 53,
                   "byteLength": 22
                 }
@@ -18830,9 +22321,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 401,
+                  "startLine": 453,
                   "startColumn": 27,
-                  "endLine": 401,
+                  "endLine": 453,
                   "endColumn": 48,
                   "byteLength": 21
                 }
@@ -18853,9 +22344,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 403,
+                  "startLine": 455,
                   "startColumn": 4,
-                  "endLine": 403,
+                  "endLine": 455,
                   "endColumn": 61,
                   "byteLength": 57
                 }
@@ -18876,9 +22367,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 406,
+                  "startLine": 458,
                   "startColumn": 28,
-                  "endLine": 406,
+                  "endLine": 458,
                   "endColumn": 73,
                   "byteLength": 45
                 }
@@ -18899,9 +22390,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 407,
+                  "startLine": 459,
                   "startColumn": 28,
-                  "endLine": 407,
+                  "endLine": 459,
                   "endColumn": 50,
                   "byteLength": 22
                 }
@@ -18922,9 +22413,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
+                  "startLine": 456,
                   "startColumn": 12,
-                  "endLine": 404,
+                  "endLine": 456,
                   "endColumn": 24,
                   "byteLength": 12
                 }
@@ -18947,9 +22438,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
+                  "startLine": 456,
                   "startColumn": 12,
-                  "endLine": 404,
+                  "endLine": 456,
                   "endColumn": 24,
                   "byteLength": 12
                 }
@@ -18972,9 +22463,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 405,
+                  "startLine": 457,
                   "startColumn": 12,
-                  "endLine": 405,
+                  "endLine": 457,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -19018,9 +22509,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 141,
+                  "startLine": 158,
                   "startColumn": 29,
-                  "endLine": 141,
+                  "endLine": 158,
                   "endColumn": 49,
                   "byteLength": 20
                 }
@@ -19041,9 +22532,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 143,
+                  "startLine": 160,
                   "startColumn": 26,
-                  "endLine": 143,
+                  "endLine": 160,
                   "endColumn": 46,
                   "byteLength": 20
                 }
@@ -19089,9 +22580,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 142,
+                  "startLine": 159,
                   "startColumn": 12,
-                  "endLine": 142,
+                  "endLine": 159,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -19229,9 +22720,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 207,
+                  "startLine": 210,
                   "startColumn": 6,
-                  "endLine": 218,
+                  "endLine": 221,
                   "endColumn": 1,
                   "byteLength": 231
                 }
@@ -19252,9 +22743,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 207,
+                  "startLine": 210,
                   "startColumn": 6,
-                  "endLine": 218,
+                  "endLine": 221,
                   "endColumn": 1,
                   "byteLength": 231
                 }
@@ -19275,9 +22766,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 207,
+                  "startLine": 210,
                   "startColumn": 6,
-                  "endLine": 218,
+                  "endLine": 221,
                   "endColumn": 1,
                   "byteLength": 231
                 }
@@ -19298,10 +22789,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 439,
-                  "startColumn": 32,
-                  "endLine": 439,
-                  "endColumn": 58,
+                  "startLine": 497,
+                  "startColumn": 30,
+                  "endLine": 497,
+                  "endColumn": 56,
                   "byteLength": 26
                 }
               }
@@ -19321,16 +22812,39 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 440,
-                  "startColumn": 32,
-                  "endLine": 440,
-                  "endColumn": 50,
+                  "startLine": 498,
+                  "startColumn": 30,
+                  "endLine": 498,
+                  "endColumn": 48,
                   "byteLength": 18
                 }
               }
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 500,
+                  "startColumn": 4,
+                  "endLine": 501,
+                  "endColumn": 40,
+                  "byteLength": 91
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -19344,9 +22858,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 446,
+                  "startLine": 507,
                   "startColumn": 26,
-                  "endLine": 446,
+                  "endLine": 507,
                   "endColumn": 74,
                   "byteLength": 48
                 }
@@ -19367,9 +22881,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 454,
+                  "startLine": 514,
                   "startColumn": 26,
-                  "endLine": 454,
+                  "endLine": 514,
                   "endColumn": 64,
                   "byteLength": 38
                 }
@@ -19381,7 +22895,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_src_fits." },
+          "message": { "text": "src_fits." },
           "locations": [
             {
               "physicalLocation": {
@@ -19390,11 +22904,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 445,
-                  "startColumn": 35,
-                  "endLine": 445,
-                  "endColumn": 77,
-                  "byteLength": 42
+                  "startLine": 506,
+                  "startColumn": 22,
+                  "endLine": 506,
+                  "endColumn": 41,
+                  "byteLength": 19
                 }
               }
             }
@@ -19404,7 +22918,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_src_too_large." },
+          "message": { "text": "src_too_large." },
           "locations": [
             {
               "physicalLocation": {
@@ -19413,11 +22927,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 4,
-                  "endLine": 453,
-                  "endColumn": 49,
-                  "byteLength": 45
+                  "startLine": 513,
+                  "startColumn": 27,
+                  "endLine": 513,
+                  "endColumn": 47,
+                  "byteLength": 20
                 }
               }
             }
@@ -19436,10 +22950,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 443,
-                  "startColumn": 24,
-                  "endLine": 443,
-                  "endColumn": 39,
+                  "startLine": 504,
+                  "startColumn": 22,
+                  "endLine": 504,
+                  "endColumn": 37,
                   "byteLength": 15
                 }
               }
@@ -19459,9 +22973,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 450,
+                  "startLine": 511,
                   "startColumn": 28,
-                  "endLine": 450,
+                  "endLine": 511,
                   "endColumn": 76,
                   "byteLength": 48
                 }
@@ -19482,9 +22996,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 458,
+                  "startLine": 518,
                   "startColumn": 36,
-                  "endLine": 458,
+                  "endLine": 518,
                   "endColumn": 74,
                   "byteLength": 38
                 }
@@ -19505,11 +23019,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 447,
+                  "startLine": 508,
                   "startColumn": 12,
-                  "endLine": 447,
-                  "endColumn": 58,
-                  "byteLength": 46
+                  "endLine": 508,
+                  "endColumn": 60,
+                  "byteLength": 48
                 }
               }
             }
@@ -19528,10 +23042,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 441,
-                  "startColumn": 12,
-                  "endLine": 441,
-                  "endColumn": 50,
+                  "startLine": 502,
+                  "startColumn": 10,
+                  "endLine": 502,
+                  "endColumn": 48,
                   "byteLength": 38
                 }
               }
@@ -19551,11 +23065,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 455,
+                  "startLine": 515,
                   "startColumn": 12,
-                  "endLine": 455,
-                  "endColumn": 48,
-                  "byteLength": 36
+                  "endLine": 515,
+                  "endColumn": 50,
+                  "byteLength": 38
                 }
               }
             }
@@ -19566,7 +23080,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(dest +\n                      (strlen{Old}(dest) ..\n                                           strlen{Old}(dest) +\n                                           strlen{Old}(src))) in function strncat."
+            "text": "from clause of term *(dest +\n                      (strlen{Old}(dest) ..\n                       strlen{Old}(dest) + strlen{Old}(src))) in function strncat."
           },
           "locations": [
             {
@@ -19576,11 +23090,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 447,
+                  "startLine": 508,
                   "startColumn": 12,
-                  "endLine": 447,
-                  "endColumn": 58,
-                  "byteLength": 46
+                  "endLine": 508,
+                  "endColumn": 60,
+                  "byteLength": 48
                 }
               }
             }
@@ -19601,9 +23115,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 449,
+                  "startLine": 510,
                   "startColumn": 12,
-                  "endLine": 449,
+                  "endLine": 510,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -19626,10 +23140,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 441,
-                  "startColumn": 12,
-                  "endLine": 441,
-                  "endColumn": 50,
+                  "startLine": 502,
+                  "startColumn": 10,
+                  "endLine": 502,
+                  "endColumn": 48,
                   "byteLength": 38
                 }
               }
@@ -19651,10 +23165,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 442,
-                  "startColumn": 12,
-                  "endLine": 442,
-                  "endColumn": 19,
+                  "startLine": 503,
+                  "startColumn": 10,
+                  "endLine": 503,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -19676,11 +23190,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 455,
+                  "startLine": 515,
                   "startColumn": 12,
-                  "endLine": 455,
-                  "endColumn": 48,
-                  "byteLength": 36
+                  "endLine": 515,
+                  "endColumn": 50,
+                  "byteLength": 38
                 }
               }
             }
@@ -19701,9 +23215,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 457,
+                  "startLine": 517,
                   "startColumn": 12,
-                  "endLine": 457,
+                  "endLine": 517,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -19711,6 +23225,52 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "complete clause in function strncat." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 210,
+                  "startColumn": 6,
+                  "endLine": 221,
+                  "endColumn": 1,
+                  "byteLength": 231
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "disjoint clause in function strncat." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.c",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 210,
+                  "startColumn": 6,
+                  "endLine": 221,
+                  "endColumn": 1,
+                  "byteLength": 231
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -19726,9 +23286,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 209,
+                  "startLine": 212,
                   "startColumn": 20,
-                  "endLine": 209,
+                  "endLine": 212,
                   "endColumn": 32,
                   "byteLength": 12
                 }
@@ -19740,7 +23300,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "error",
-          "message": { "text": "reachability of stmt line 209 in strncat." },
+          "message": { "text": "reachability of stmt line 212 in strncat." },
           "locations": [
             {
               "physicalLocation": {
@@ -19749,9 +23309,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 209,
+                  "startLine": 212,
                   "startColumn": 20,
-                  "endLine": 209,
+                  "endLine": 212,
                   "endColumn": 32,
                   "byteLength": 12
                 }
@@ -19795,9 +23355,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 160,
+                  "startLine": 178,
                   "startColumn": 30,
-                  "endLine": 160,
+                  "endLine": 178,
                   "endColumn": 55,
                   "byteLength": 25
                 }
@@ -19818,9 +23378,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
+                  "startLine": 179,
                   "startColumn": 30,
-                  "endLine": 161,
+                  "endLine": 179,
                   "endColumn": 55,
                   "byteLength": 25
                 }
@@ -19841,9 +23401,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 163,
+                  "startLine": 181,
                   "startColumn": 26,
-                  "endLine": 163,
+                  "endLine": 181,
                   "endColumn": 53,
                   "byteLength": 27
                 }
@@ -19889,9 +23449,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 162,
+                  "startLine": 180,
                   "startColumn": 12,
-                  "endLine": 162,
+                  "endLine": 180,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -19912,9 +23472,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 239,
+                  "startLine": 242,
                   "startColumn": 6,
-                  "endLine": 249,
+                  "endLine": 252,
                   "endColumn": 1,
                   "byteLength": 197
                 }
@@ -19935,9 +23495,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 239,
+                  "startLine": 242,
                   "startColumn": 6,
-                  "endLine": 249,
+                  "endLine": 252,
                   "endColumn": 1,
                   "byteLength": 197
                 }
@@ -19958,9 +23518,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 239,
+                  "startLine": 242,
                   "startColumn": 6,
-                  "endLine": 249,
+                  "endLine": 252,
                   "endColumn": 1,
                   "byteLength": 197
                 }
@@ -19981,9 +23541,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 379,
+                  "startLine": 431,
                   "startColumn": 32,
-                  "endLine": 379,
+                  "endLine": 431,
                   "endColumn": 58,
                   "byteLength": 26
                 }
@@ -20004,9 +23564,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 380,
+                  "startLine": 432,
                   "startColumn": 27,
-                  "endLine": 380,
+                  "endLine": 432,
                   "endColumn": 50,
                   "byteLength": 23
                 }
@@ -20027,9 +23587,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 382,
+                  "startLine": 434,
                   "startColumn": 4,
-                  "endLine": 382,
+                  "endLine": 434,
                   "endColumn": 43,
                   "byteLength": 39
                 }
@@ -20050,9 +23610,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 388,
+                  "startLine": 440,
                   "startColumn": 22,
-                  "endLine": 388,
+                  "endLine": 440,
                   "endColumn": 37,
                   "byteLength": 15
                 }
@@ -20073,9 +23633,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 391,
+                  "startLine": 443,
                   "startColumn": 26,
-                  "endLine": 391,
+                  "endLine": 443,
                   "endColumn": 42,
                   "byteLength": 16
                 }
@@ -20096,9 +23656,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 385,
+                  "startLine": 437,
                   "startColumn": 24,
-                  "endLine": 385,
+                  "endLine": 437,
                   "endColumn": 39,
                   "byteLength": 15
                 }
@@ -20119,9 +23679,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
+                  "startLine": 438,
                   "startColumn": 28,
-                  "endLine": 386,
+                  "endLine": 438,
                   "endColumn": 57,
                   "byteLength": 29
                 }
@@ -20142,9 +23702,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 389,
+                  "startLine": 441,
                   "startColumn": 30,
-                  "endLine": 389,
+                  "endLine": 441,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -20165,9 +23725,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 392,
+                  "startLine": 444,
                   "startColumn": 26,
-                  "endLine": 392,
+                  "endLine": 444,
                   "endColumn": 60,
                   "byteLength": 34
                 }
@@ -20188,9 +23748,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 383,
+                  "startLine": 435,
                   "startColumn": 12,
-                  "endLine": 383,
+                  "endLine": 435,
                   "endColumn": 26,
                   "byteLength": 14
                 }
@@ -20213,9 +23773,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 383,
+                  "startLine": 435,
                   "startColumn": 12,
-                  "endLine": 383,
+                  "endLine": 435,
                   "endColumn": 26,
                   "byteLength": 14
                 }
@@ -20238,9 +23798,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 384,
+                  "startLine": 436,
                   "startColumn": 12,
-                  "endLine": 384,
+                  "endLine": 436,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -20261,9 +23821,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 332,
                   "startColumn": 6,
-                  "endLine": 344,
+                  "endLine": 347,
                   "endColumn": 1,
                   "byteLength": 290
                 }
@@ -20284,9 +23844,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 332,
                   "startColumn": 6,
-                  "endLine": 344,
+                  "endLine": 347,
                   "endColumn": 1,
                   "byteLength": 290
                 }
@@ -20309,9 +23869,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 332,
                   "startColumn": 6,
-                  "endLine": 344,
+                  "endLine": 347,
                   "endColumn": 1,
                   "byteLength": 290
                 }
@@ -20332,10 +23892,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 502,
-                  "startColumn": 29,
-                  "endLine": 502,
-                  "endColumn": 49,
+                  "startLine": 588,
+                  "startColumn": 27,
+                  "endLine": 588,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -20355,11 +23915,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 507,
+                  "startLine": 593,
                   "startColumn": 26,
-                  "endLine": 507,
-                  "endColumn": 60,
-                  "byteLength": 34
+                  "endLine": 593,
+                  "endColumn": 57,
+                  "byteLength": 31
                 }
               }
             }
@@ -20378,11 +23938,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 517,
+                  "startLine": 603,
                   "startColumn": 29,
-                  "endLine": 517,
-                  "endColumn": 64,
-                  "byteLength": 35
+                  "endLine": 603,
+                  "endColumn": 61,
+                  "byteLength": 32
                 }
               }
             }
@@ -20401,11 +23961,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 511,
+                  "startLine": 597,
                   "startColumn": 24,
-                  "endLine": 511,
-                  "endColumn": 60,
-                  "byteLength": 36
+                  "endLine": 597,
+                  "endColumn": 58,
+                  "byteLength": 34
                 }
               }
             }
@@ -20426,11 +23986,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 513,
-                  "startColumn": 4,
-                  "endLine": 515,
-                  "endColumn": 29,
-                  "byteLength": 124
+                  "startLine": 599,
+                  "startColumn": 6,
+                  "endLine": 601,
+                  "endColumn": 31,
+                  "byteLength": 125
                 }
               }
             }
@@ -20449,9 +24009,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 520,
+                  "startLine": 606,
                   "startColumn": 25,
-                  "endLine": 520,
+                  "endLine": 606,
                   "endColumn": 41,
                   "byteLength": 16
                 }
@@ -20472,9 +24032,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 508,
+                  "startLine": 594,
                   "startColumn": 12,
-                  "endLine": 508,
+                  "endLine": 594,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -20495,9 +24055,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 332,
                   "startColumn": 6,
-                  "endLine": 344,
+                  "endLine": 347,
                   "endColumn": 1,
                   "byteLength": 290
                 }
@@ -20518,9 +24078,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 332,
                   "startColumn": 6,
-                  "endLine": 344,
+                  "endLine": 347,
                   "endColumn": 1,
                   "byteLength": 290
                 }
@@ -20543,9 +24103,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 508,
+                  "startLine": 594,
                   "startColumn": 12,
-                  "endLine": 508,
+                  "endLine": 594,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -20568,9 +24128,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 509,
+                  "startLine": 595,
                   "startColumn": 12,
-                  "endLine": 509,
+                  "endLine": 595,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -20593,10 +24153,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 504,
-                  "startColumn": 12,
-                  "endLine": 504,
-                  "endColumn": 19,
+                  "startLine": 590,
+                  "startColumn": 10,
+                  "endLine": 590,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -20618,9 +24178,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 518,
+                  "startLine": 605,
                   "startColumn": 12,
-                  "endLine": 518,
+                  "endLine": 605,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -20643,10 +24203,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 503,
-                  "startColumn": 14,
-                  "endLine": 503,
-                  "endColumn": 21,
+                  "startLine": 589,
+                  "startColumn": 12,
+                  "endLine": 589,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -20668,9 +24228,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 332,
                   "startColumn": 6,
-                  "endLine": 344,
+                  "endLine": 347,
                   "endColumn": 1,
                   "byteLength": 290
                 }
@@ -20691,9 +24251,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 341,
+                  "startLine": 344,
                   "startColumn": 2,
-                  "endLine": 341,
+                  "endLine": 344,
                   "endColumn": 17,
                   "byteLength": 15
                 }
@@ -20714,9 +24274,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 341,
+                  "startLine": 344,
                   "startColumn": 2,
-                  "endLine": 341,
+                  "endLine": 344,
                   "endColumn": 17,
                   "byteLength": 15
                 }
@@ -20737,9 +24297,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 341,
+                  "startLine": 344,
                   "startColumn": 2,
-                  "endLine": 341,
+                  "endLine": 344,
                   "endColumn": 17,
                   "byteLength": 15
                 }
@@ -20751,7 +24311,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "error",
-          "message": { "text": "reachability of stmt line 341 in strndup." },
+          "message": { "text": "reachability of stmt line 344 in strndup." },
           "locations": [
             {
               "physicalLocation": {
@@ -20760,9 +24320,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 341,
+                  "startLine": 344,
                   "startColumn": 2,
-                  "endLine": 341,
+                  "endLine": 344,
                   "endColumn": 17,
                   "byteLength": 15
                 }
@@ -20806,9 +24366,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 147,
+                  "startLine": 164,
                   "startColumn": 29,
-                  "endLine": 147,
+                  "endLine": 164,
                   "endColumn": 53,
                   "byteLength": 24
                 }
@@ -20829,9 +24389,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 149,
+                  "startLine": 166,
                   "startColumn": 28,
-                  "endLine": 149,
+                  "endLine": 166,
                   "endColumn": 64,
                   "byteLength": 36
                 }
@@ -20877,9 +24437,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 148,
+                  "startLine": 165,
                   "startColumn": 12,
-                  "endLine": 148,
+                  "endLine": 165,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -20900,9 +24460,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 234,
+                  "startLine": 255,
                   "startColumn": 13,
-                  "endLine": 234,
+                  "endLine": 255,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -20923,10 +24483,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 228,
-                  "startColumn": 29,
-                  "endLine": 228,
-                  "endColumn": 49,
+                  "startLine": 247,
+                  "startColumn": 27,
+                  "endLine": 247,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -20946,10 +24506,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 229,
-                  "startColumn": 34,
-                  "endLine": 229,
-                  "endColumn": 59,
+                  "startLine": 248,
+                  "startColumn": 32,
+                  "endLine": 248,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -20969,11 +24529,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 232,
+                  "startLine": 252,
                   "startColumn": 4,
-                  "endLine": 232,
-                  "endColumn": 60,
-                  "byteLength": 56
+                  "endLine": 253,
+                  "endColumn": 72,
+                  "byteLength": 92
                 }
               }
             }
@@ -20992,9 +24552,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 234,
+                  "startLine": 255,
                   "startColumn": 13,
-                  "endLine": 234,
+                  "endLine": 255,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -21017,39 +24577,16 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 230,
-                  "startColumn": 12,
-                  "endLine": 230,
-                  "endColumn": 19,
+                  "startLine": 249,
+                  "startColumn": 10,
+                  "endLine": 249,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
             }
           ]
         },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "behavior default in function strrchr." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.c",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 260,
-                  "startColumn": 6,
-                  "endLine": 266,
-                  "endColumn": 1,
-                  "byteLength": 164
-                }
-              }
-            }
-          ]
-        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -21063,55 +24600,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 260,
-                  "startColumn": 6,
-                  "endLine": 266,
-                  "endColumn": 1,
-                  "byteLength": 164
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "behavior found in function strrchr." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.c",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 260,
-                  "startColumn": 6,
-                  "endLine": 266,
-                  "endColumn": 1,
-                  "byteLength": 164
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "behavior not_found in function strrchr." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.c",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 260,
+                  "startLine": 263,
                   "startColumn": 6,
-                  "endLine": 266,
+                  "endLine": 269,
                   "endColumn": 1,
                   "byteLength": 164
                 }
@@ -21132,10 +24623,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 197,
-                  "startColumn": 29,
-                  "endLine": 197,
-                  "endColumn": 49,
+                  "startLine": 220,
+                  "startColumn": 27,
+                  "endLine": 220,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -21146,7 +24637,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "char_found." },
+          "message": { "text": "result_null_or_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -21155,11 +24646,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 200,
-                  "startColumn": 24,
-                  "endLine": 200,
-                  "endColumn": 35,
-                  "byteLength": 11
+                  "startLine": 223,
+                  "startColumn": 4,
+                  "endLine": 224,
+                  "endColumn": 72,
+                  "byteLength": 92
                 }
               }
             }
@@ -21169,20 +24660,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "char_not_found." },
+          "message": { "text": "assigns clause in function strrchr." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 205,
-                  "startColumn": 28,
-                  "endLine": 205,
-                  "endColumn": 40,
-                  "byteLength": 12
+                  "startLine": 263,
+                  "startColumn": 6,
+                  "endLine": 269,
+                  "endColumn": 1,
+                  "byteLength": 164
                 }
               }
             }
@@ -21192,7 +24683,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_char." },
+          "message": {
+            "text": "from clause of term \\result in function strrchr."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -21201,11 +24694,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 201,
-                  "startColumn": 25,
-                  "endLine": 201,
-                  "endColumn": 38,
-                  "byteLength": 13
+                  "startLine": 221,
+                  "startColumn": 10,
+                  "endLine": 221,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -21215,20 +24708,22 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_same_base." },
+          "message": {
+            "text": "specialization of valid_string_s at stmt 291."
+          },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 202,
-                  "startColumn": 30,
-                  "endLine": 202,
-                  "endColumn": 66,
-                  "byteLength": 36
+                  "startLine": 266,
+                  "startColumn": 18,
+                  "endLine": 266,
+                  "endColumn": 27,
+                  "byteLength": 9
                 }
               }
             }
@@ -21237,21 +24732,21 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "none",
-          "message": { "text": "result_valid_string." },
+          "level": "error",
+          "message": { "text": "reachability of stmt line 266 in strrchr." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.h",
+                  "uri": "libc/string.c",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 203,
-                  "startColumn": 33,
-                  "endLine": 203,
-                  "endColumn": 59,
-                  "byteLength": 26
+                  "startLine": 266,
+                  "startColumn": 18,
+                  "endLine": 266,
+                  "endColumn": 27,
+                  "byteLength": 9
                 }
               }
             }
@@ -21261,7 +24756,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null." },
+          "message": { "text": "behavior default! in function strsep." },
           "locations": [
             {
               "physicalLocation": {
@@ -21270,11 +24765,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 206,
-                  "startColumn": 25,
-                  "endLine": 206,
-                  "endColumn": 41,
-                  "byteLength": 16
+                  "startLine": 402,
+                  "startColumn": 13,
+                  "endLine": 402,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -21284,7 +24779,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null_or_same_base." },
+          "message": { "text": "behavior no_stringp in function strsep." },
           "locations": [
             {
               "physicalLocation": {
@@ -21293,11 +24788,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 209,
-                  "startColumn": 4,
-                  "endLine": 209,
-                  "endColumn": 60,
-                  "byteLength": 56
+                  "startLine": 402,
+                  "startColumn": 13,
+                  "endLine": 402,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -21307,20 +24802,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function strrchr." },
+          "message": { "text": "behavior valid_stringp in function strsep." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 260,
-                  "startColumn": 6,
-                  "endLine": 266,
-                  "endColumn": 1,
-                  "byteLength": 164
+                  "startLine": 402,
+                  "startColumn": 13,
+                  "endLine": 402,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -21330,9 +24825,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function strrchr."
-          },
+          "message": { "text": "valid_stringp." },
           "locations": [
             {
               "physicalLocation": {
@@ -21341,11 +24834,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 198,
-                  "startColumn": 12,
-                  "endLine": 198,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 390,
+                  "startColumn": 26,
+                  "endLine": 390,
+                  "endColumn": 41,
+                  "byteLength": 15
                 }
               }
             }
@@ -21355,22 +24848,20 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "specialization of valid_string_s at stmt 291."
-          },
+          "message": { "text": "valid_string_stringp." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 263,
-                  "startColumn": 18,
-                  "endLine": 263,
-                  "endColumn": 27,
-                  "byteLength": 9
+                  "startLine": 398,
+                  "startColumn": 35,
+                  "endLine": 398,
+                  "endColumn": 57,
+                  "byteLength": 22
                 }
               }
             }
@@ -21379,21 +24870,21 @@
         {
           "ruleId": "user-spec",
           "kind": "pass",
-          "level": "error",
-          "message": { "text": "reachability of stmt line 263 in strrchr." },
+          "level": "none",
+          "message": { "text": "stringp_null." },
           "locations": [
             {
               "physicalLocation": {
                 "artifactLocation": {
-                  "uri": "libc/string.c",
+                  "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 263,
-                  "startColumn": 18,
-                  "endLine": 263,
-                  "endColumn": 27,
-                  "byteLength": 9
+                  "startLine": 394,
+                  "startColumn": 26,
+                  "endLine": 394,
+                  "endColumn": 43,
+                  "byteLength": 17
                 }
               }
             }
@@ -21403,7 +24894,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function strsep." },
+          "message": { "text": "stringp_not_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -21412,11 +24903,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 350,
-                  "startColumn": 13,
-                  "endLine": 350,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 397,
+                  "startColumn": 30,
+                  "endLine": 397,
+                  "endColumn": 47,
+                  "byteLength": 17
                 }
               }
             }
@@ -21426,7 +24917,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_stringp." },
+          "message": { "text": "result_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -21435,11 +24926,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 345,
-                  "startColumn": 35,
-                  "endLine": 345,
-                  "endColumn": 76,
-                  "byteLength": 41
+                  "startLine": 395,
+                  "startColumn": 25,
+                  "endLine": 395,
+                  "endColumn": 41,
+                  "byteLength": 16
                 }
               }
             }
@@ -21449,7 +24940,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_delim." },
+          "message": { "text": "valid_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -21458,11 +24949,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 346,
-                  "startColumn": 33,
-                  "endLine": 346,
-                  "endColumn": 57,
-                  "byteLength": 24
+                  "startLine": 399,
+                  "startColumn": 26,
+                  "endLine": 400,
+                  "endColumn": 69,
+                  "byteLength": 94
                 }
               }
             }
@@ -21481,11 +24972,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 347,
-                  "startColumn": 12,
-                  "endLine": 347,
-                  "endColumn": 20,
-                  "byteLength": 8
+                  "startLine": 391,
+                  "startColumn": 10,
+                  "endLine": 391,
+                  "endColumn": 23,
+                  "byteLength": 13
                 }
               }
             }
@@ -21496,7 +24987,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *stringp in function strsep."
+            "text": "from clause of term *(*(stringp + (0 ..))) in function strsep."
           },
           "locations": [
             {
@@ -21506,11 +24997,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 347,
-                  "startColumn": 12,
-                  "endLine": 347,
-                  "endColumn": 20,
-                  "byteLength": 8
+                  "startLine": 391,
+                  "startColumn": 10,
+                  "endLine": 391,
+                  "endColumn": 23,
+                  "byteLength": 13
                 }
               }
             }
@@ -21531,10 +25022,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 348,
-                  "startColumn": 12,
-                  "endLine": 348,
-                  "endColumn": 19,
+                  "startLine": 392,
+                  "startColumn": 10,
+                  "endLine": 392,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -21554,9 +25045,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 348,
+                  "startLine": 351,
                   "startColumn": 6,
-                  "endLine": 359,
+                  "endLine": 362,
                   "endColumn": 1,
                   "byteLength": 223
                 }
@@ -21577,9 +25068,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 535,
+                  "startLine": 643,
                   "startColumn": 33,
-                  "endLine": 535,
+                  "endLine": 643,
                   "endColumn": 60,
                   "byteLength": 27
                 }
@@ -21600,9 +25091,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 536,
+                  "startLine": 644,
                   "startColumn": 35,
-                  "endLine": 536,
+                  "endLine": 644,
                   "endColumn": 51,
                   "byteLength": 16
                 }
@@ -21623,9 +25114,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 537,
+                  "startLine": 645,
                   "startColumn": 33,
-                  "endLine": 537,
+                  "endLine": 645,
                   "endColumn": 59,
                   "byteLength": 26
                 }
@@ -21646,9 +25137,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 348,
+                  "startLine": 351,
                   "startColumn": 6,
-                  "endLine": 359,
+                  "endLine": 362,
                   "endColumn": 1,
                   "byteLength": 223
                 }
@@ -21671,9 +25162,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 534,
+                  "startLine": 642,
                   "startColumn": 12,
-                  "endLine": 534,
+                  "endLine": 642,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -21694,9 +25185,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 353,
+                  "startLine": 356,
                   "startColumn": 4,
-                  "endLine": 353,
+                  "endLine": 356,
                   "endColumn": 44,
                   "byteLength": 40
                 }
@@ -21709,7 +25200,7 @@
           "kind": "pass",
           "level": "error",
           "message": {
-            "text": "reachability of stmt line 353 in strsignal."
+            "text": "reachability of stmt line 356 in strsignal."
           },
           "locations": [
             {
@@ -21719,9 +25210,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 353,
+                  "startLine": 356,
                   "startColumn": 4,
-                  "endLine": 353,
+                  "endLine": 356,
                   "endColumn": 44,
                   "byteLength": 40
                 }
@@ -21742,9 +25233,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 226,
+                  "startLine": 244,
                   "startColumn": 14,
-                  "endLine": 226,
+                  "endLine": 244,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -21765,10 +25256,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 220,
-                  "startColumn": 29,
-                  "endLine": 220,
-                  "endColumn": 49,
+                  "startLine": 238,
+                  "startColumn": 27,
+                  "endLine": 238,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -21788,10 +25279,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 221,
-                  "startColumn": 34,
-                  "endLine": 221,
-                  "endColumn": 59,
+                  "startLine": 239,
+                  "startColumn": 32,
+                  "endLine": 239,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -21811,10 +25302,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 224,
-                  "startColumn": 28,
-                  "endLine": 224,
-                  "endColumn": 53,
+                  "startLine": 242,
+                  "startColumn": 26,
+                  "endLine": 242,
+                  "endColumn": 51,
                   "byteLength": 25
                 }
               }
@@ -21834,36 +25325,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 222,
-                  "startColumn": 12,
-                  "endLine": 222,
-                  "endColumn": 19,
-                  "byteLength": 7
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function strspn."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 222,
-                  "startColumn": 12,
-                  "endLine": 222,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 244,
+                  "startColumn": 14,
+                  "endLine": 244,
+                  "endColumn": 20,
+                  "byteLength": 6
                 }
               }
             }
@@ -21884,10 +25350,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 223,
-                  "startColumn": 12,
-                  "endLine": 223,
-                  "endColumn": 19,
+                  "startLine": 240,
+                  "startColumn": 10,
+                  "endLine": 240,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -21907,9 +25373,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 286,
+                  "startLine": 289,
                   "startColumn": 6,
-                  "endLine": 298,
+                  "endLine": 301,
                   "endColumn": 1,
                   "byteLength": 379
                 }
@@ -21930,10 +25396,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 236,
-                  "startColumn": 36,
-                  "endLine": 236,
-                  "endColumn": 63,
+                  "startLine": 258,
+                  "startColumn": 34,
+                  "endLine": 258,
+                  "endColumn": 61,
                   "byteLength": 27
                 }
               }
@@ -21953,10 +25419,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 237,
-                  "startColumn": 34,
-                  "endLine": 237,
-                  "endColumn": 59,
+                  "startLine": 259,
+                  "startColumn": 32,
+                  "endLine": 259,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -21976,11 +25442,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 241,
+                  "startLine": 263,
                   "startColumn": 4,
-                  "endLine": 243,
-                  "endColumn": 59,
-                  "byteLength": 141
+                  "endLine": 266,
+                  "endColumn": 57,
+                  "byteLength": 164
                 }
               }
             }
@@ -21999,9 +25465,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 286,
+                  "startLine": 289,
                   "startColumn": 6,
-                  "endLine": 298,
+                  "endLine": 301,
                   "endColumn": 1,
                   "byteLength": 379
                 }
@@ -22024,10 +25490,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 238,
-                  "startColumn": 12,
-                  "endLine": 238,
-                  "endColumn": 19,
+                  "startLine": 260,
+                  "startColumn": 10,
+                  "endLine": 260,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -22047,9 +25513,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 119,
                   "startColumn": 14,
-                  "endLine": 117,
+                  "endLine": 119,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -22070,9 +25536,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 119,
                   "startColumn": 14,
-                  "endLine": 117,
+                  "endLine": 119,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -22095,9 +25561,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 119,
                   "startColumn": 14,
-                  "endLine": 117,
+                  "endLine": 119,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -22164,9 +25630,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 108,
+                  "startLine": 109,
                   "startColumn": 27,
-                  "endLine": 108,
+                  "endLine": 109,
                   "endColumn": 41,
                   "byteLength": 14
                 }
@@ -22187,9 +25653,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 104,
+                  "startLine": 105,
                   "startColumn": 25,
-                  "endLine": 104,
+                  "endLine": 105,
                   "endColumn": 40,
                   "byteLength": 15
                 }
@@ -22210,9 +25676,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 107,
+                  "startLine": 108,
                   "startColumn": 28,
-                  "endLine": 107,
+                  "endLine": 108,
                   "endColumn": 43,
                   "byteLength": 15
                 }
@@ -22233,9 +25699,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 111,
+                  "startLine": 113,
                   "startColumn": 28,
-                  "endLine": 111,
+                  "endLine": 113,
                   "endColumn": 48,
                   "byteLength": 20
                 }
@@ -22256,9 +25722,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 112,
+                  "startLine": 114,
                   "startColumn": 34,
-                  "endLine": 112,
+                  "endLine": 114,
                   "endColumn": 54,
                   "byteLength": 20
                 }
@@ -22270,7 +25736,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "position_subset." },
+          "message": { "text": "endptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -22279,11 +25745,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 113,
-                  "startColumn": 29,
-                  "endLine": 113,
-                  "endColumn": 60,
-                  "byteLength": 31
+                  "startLine": 115,
+                  "startColumn": 30,
+                  "endLine": 115,
+                  "endColumn": 69,
+                  "byteLength": 39
                 }
               }
             }
@@ -22325,9 +25791,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 119,
                   "startColumn": 14,
-                  "endLine": 117,
+                  "endLine": 119,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -22348,9 +25814,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 109,
+                  "startLine": 110,
                   "startColumn": 12,
-                  "endLine": 109,
+                  "endLine": 110,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -22423,9 +25889,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 105,
+                  "startLine": 106,
                   "startColumn": 12,
-                  "endLine": 105,
+                  "endLine": 106,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -22448,9 +25914,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 109,
+                  "startLine": 110,
                   "startColumn": 12,
-                  "endLine": 109,
+                  "endLine": 110,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -22473,9 +25939,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 110,
+                  "startLine": 111,
                   "startColumn": 12,
-                  "endLine": 110,
+                  "endLine": 111,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -22496,9 +25962,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 119,
                   "startColumn": 14,
-                  "endLine": 117,
+                  "endLine": 119,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -22519,9 +25985,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 119,
                   "startColumn": 14,
-                  "endLine": 117,
+                  "endLine": 119,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -22542,9 +26008,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 139,
+                  "startLine": 142,
                   "startColumn": 13,
-                  "endLine": 139,
+                  "endLine": 142,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -22565,9 +26031,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 139,
+                  "startLine": 142,
                   "startColumn": 13,
-                  "endLine": 139,
+                  "endLine": 142,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -22590,9 +26056,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 139,
+                  "startLine": 142,
                   "startColumn": 13,
-                  "endLine": 139,
+                  "endLine": 142,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -22613,9 +26079,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 121,
+                  "startLine": 123,
                   "startColumn": 30,
-                  "endLine": 121,
+                  "endLine": 123,
                   "endColumn": 53,
                   "byteLength": 23
                 }
@@ -22636,9 +26102,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 122,
+                  "startLine": 124,
                   "startColumn": 23,
-                  "endLine": 122,
+                  "endLine": 124,
                   "endColumn": 47,
                   "byteLength": 24
                 }
@@ -22659,9 +26125,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 130,
+                  "startLine": 133,
                   "startColumn": 27,
-                  "endLine": 130,
+                  "endLine": 133,
                   "endColumn": 41,
                   "byteLength": 14
                 }
@@ -22682,9 +26148,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 126,
+                  "startLine": 129,
                   "startColumn": 25,
-                  "endLine": 126,
+                  "endLine": 129,
                   "endColumn": 40,
                   "byteLength": 15
                 }
@@ -22705,9 +26171,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 129,
+                  "startLine": 132,
                   "startColumn": 28,
-                  "endLine": 129,
+                  "endLine": 132,
                   "endColumn": 43,
                   "byteLength": 15
                 }
@@ -22728,9 +26194,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 133,
+                  "startLine": 136,
                   "startColumn": 28,
-                  "endLine": 133,
+                  "endLine": 136,
                   "endColumn": 48,
                   "byteLength": 20
                 }
@@ -22751,9 +26217,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 134,
+                  "startLine": 137,
                   "startColumn": 34,
-                  "endLine": 134,
+                  "endLine": 137,
                   "endColumn": 54,
                   "byteLength": 20
                 }
@@ -22765,7 +26231,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "position_subset." },
+          "message": { "text": "endptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -22774,11 +26240,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 135,
-                  "startColumn": 29,
-                  "endLine": 135,
-                  "endColumn": 60,
-                  "byteLength": 31
+                  "startLine": 138,
+                  "startColumn": 30,
+                  "endLine": 138,
+                  "endColumn": 69,
+                  "byteLength": 39
                 }
               }
             }
@@ -22797,9 +26263,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 123,
+                  "startLine": 125,
                   "startColumn": 10,
-                  "endLine": 123,
+                  "endLine": 125,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -22820,9 +26286,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 139,
+                  "startLine": 142,
                   "startColumn": 13,
-                  "endLine": 139,
+                  "endLine": 142,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -22843,9 +26309,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 131,
+                  "startLine": 134,
                   "startColumn": 12,
-                  "endLine": 131,
+                  "endLine": 134,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -22868,9 +26334,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 123,
+                  "startLine": 125,
                   "startColumn": 10,
-                  "endLine": 123,
+                  "endLine": 125,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -22893,9 +26359,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 124,
+                  "startLine": 126,
                   "startColumn": 10,
-                  "endLine": 124,
+                  "endLine": 126,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -22918,9 +26384,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 127,
+                  "startLine": 130,
                   "startColumn": 12,
-                  "endLine": 127,
+                  "endLine": 130,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -22943,9 +26409,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 131,
+                  "startLine": 134,
                   "startColumn": 12,
-                  "endLine": 131,
+                  "endLine": 134,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -22968,9 +26434,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 132,
+                  "startLine": 135,
                   "startColumn": 12,
-                  "endLine": 132,
+                  "endLine": 135,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -22991,9 +26457,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 139,
+                  "startLine": 142,
                   "startColumn": 13,
-                  "endLine": 139,
+                  "endLine": 142,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -23014,9 +26480,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 139,
+                  "startLine": 142,
                   "startColumn": 13,
-                  "endLine": 139,
+                  "endLine": 142,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -23037,9 +26503,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -23060,9 +26526,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -23083,9 +26549,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -23106,9 +26572,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 261,
+                  "startLine": 287,
                   "startColumn": 31,
-                  "endLine": 261,
+                  "endLine": 287,
                   "endColumn": 55,
                   "byteLength": 24
                 }
@@ -23116,6 +26582,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 288,
+                  "startColumn": 23,
+                  "endLine": 288,
+                  "endColumn": 77,
+                  "byteLength": 54
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -23129,9 +26618,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 274,
+                  "startLine": 301,
                   "startColumn": 6,
-                  "endLine": 276,
+                  "endLine": 303,
                   "endColumn": 70,
                   "byteLength": 120
                 }
@@ -23152,9 +26641,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 284,
+                  "startLine": 315,
                   "startColumn": 29,
-                  "endLine": 284,
+                  "endLine": 315,
                   "endColumn": 53,
                   "byteLength": 24
                 }
@@ -23175,9 +26664,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 272,
+                  "startLine": 299,
                   "startColumn": 24,
-                  "endLine": 272,
+                  "endLine": 299,
                   "endColumn": 34,
                   "byteLength": 10
                 }
@@ -23198,9 +26687,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 283,
+                  "startLine": 314,
                   "startColumn": 20,
-                  "endLine": 283,
+                  "endLine": 314,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -23212,7 +26701,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_subset." },
+          "message": { "text": "result_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -23221,11 +26710,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 280,
-                  "startColumn": 27,
-                  "endLine": 280,
-                  "endColumn": 72,
-                  "byteLength": 45
+                  "startLine": 309,
+                  "startColumn": 6,
+                  "endLine": 310,
+                  "endColumn": 74,
+                  "byteLength": 94
                 }
               }
             }
@@ -23235,7 +26724,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "ptr_subset." },
+          "message": { "text": "ptr_valid_string." },
           "locations": [
             {
               "physicalLocation": {
@@ -23244,11 +26733,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 281,
-                  "startColumn": 24,
-                  "endLine": 281,
-                  "endColumn": 57,
-                  "byteLength": 33
+                  "startLine": 311,
+                  "startColumn": 30,
+                  "endLine": 311,
+                  "endColumn": 64,
+                  "byteLength": 34
                 }
               }
             }
@@ -23258,7 +26747,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_subset." },
+          "message": { "text": "ptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -23267,11 +26756,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 293,
+                  "startLine": 312,
                   "startColumn": 27,
-                  "endLine": 294,
-                  "endColumn": 72,
-                  "byteLength": 92
+                  "endLine": 312,
+                  "endColumn": 71,
+                  "byteLength": 44
                 }
               }
             }
@@ -23281,7 +26770,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "ptr_subset." },
+          "message": { "text": "result_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -23290,11 +26779,57 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 295,
-                  "startColumn": 24,
-                  "endLine": 295,
-                  "endColumn": 77,
-                  "byteLength": 53
+                  "startLine": 325,
+                  "startColumn": 6,
+                  "endLine": 327,
+                  "endColumn": 65,
+                  "byteLength": 122
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "ptr_valid_string." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 328,
+                  "startColumn": 30,
+                  "endLine": 328,
+                  "endColumn": 64,
+                  "byteLength": 34
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "ptr_same_base." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 330,
+                  "startColumn": 6,
+                  "endLine": 330,
+                  "endColumn": 70,
+                  "byteLength": 64
                 }
               }
             }
@@ -23313,9 +26848,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 262,
+                  "startLine": 289,
                   "startColumn": 10,
-                  "endLine": 262,
+                  "endLine": 289,
                   "endColumn": 16,
                   "byteLength": 6
                 }
@@ -23336,9 +26871,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 277,
+                  "startLine": 304,
                   "startColumn": 12,
-                  "endLine": 277,
+                  "endLine": 304,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -23359,9 +26894,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 285,
+                  "startLine": 316,
                   "startColumn": 12,
-                  "endLine": 285,
+                  "endLine": 316,
                   "endColumn": 32,
                   "byteLength": 20
                 }
@@ -23384,9 +26919,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 262,
+                  "startLine": 289,
                   "startColumn": 10,
-                  "endLine": 262,
+                  "endLine": 289,
                   "endColumn": 16,
                   "byteLength": 6
                 }
@@ -23409,9 +26944,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 264,
+                  "startLine": 291,
                   "startColumn": 10,
-                  "endLine": 264,
+                  "endLine": 291,
                   "endColumn": 30,
                   "byteLength": 20
                 }
@@ -23434,9 +26969,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 266,
+                  "startLine": 293,
                   "startColumn": 10,
-                  "endLine": 266,
+                  "endLine": 293,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -23459,9 +26994,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 268,
+                  "startLine": 295,
                   "startColumn": 10,
-                  "endLine": 268,
+                  "endLine": 295,
                   "endColumn": 25,
                   "byteLength": 15
                 }
@@ -23484,9 +27019,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 277,
+                  "startLine": 304,
                   "startColumn": 12,
-                  "endLine": 277,
+                  "endLine": 304,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -23509,9 +27044,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 278,
+                  "startLine": 306,
                   "startColumn": 12,
-                  "endLine": 278,
+                  "endLine": 306,
                   "endColumn": 18,
                   "byteLength": 6
                 }
@@ -23534,9 +27069,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 279,
+                  "startLine": 307,
                   "startColumn": 12,
-                  "endLine": 279,
+                  "endLine": 307,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -23559,9 +27094,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 285,
+                  "startLine": 316,
                   "startColumn": 12,
-                  "endLine": 285,
+                  "endLine": 316,
                   "endColumn": 32,
                   "byteLength": 20
                 }
@@ -23584,9 +27119,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 288,
+                  "startLine": 319,
                   "startColumn": 12,
-                  "endLine": 288,
+                  "endLine": 319,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -23609,9 +27144,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 291,
+                  "startLine": 322,
                   "startColumn": 12,
-                  "endLine": 291,
+                  "endLine": 322,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -23632,9 +27167,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -23655,9 +27190,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -23678,9 +27213,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -23701,9 +27236,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -23724,9 +27259,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -23747,9 +27282,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 302,
+                  "startLine": 337,
                   "startColumn": 31,
-                  "endLine": 302,
+                  "endLine": 337,
                   "endColumn": 55,
                   "byteLength": 24
                 }
@@ -23757,6 +27292,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 338,
+                  "startColumn": 23,
+                  "endLine": 339,
+                  "endColumn": 49,
+                  "byteLength": 104
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -23770,9 +27328,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 303,
+                  "startLine": 340,
                   "startColumn": 26,
-                  "endLine": 303,
+                  "endLine": 340,
                   "endColumn": 41,
                   "byteLength": 15
                 }
@@ -23793,9 +27351,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 316,
+                  "startLine": 353,
                   "startColumn": 6,
-                  "endLine": 318,
+                  "endLine": 355,
                   "endColumn": 70,
                   "byteLength": 120
                 }
@@ -23816,9 +27374,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 327,
+                  "startLine": 367,
                   "startColumn": 29,
-                  "endLine": 327,
+                  "endLine": 367,
                   "endColumn": 46,
                   "byteLength": 17
                 }
@@ -23839,9 +27397,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 328,
+                  "startLine": 368,
                   "startColumn": 37,
-                  "endLine": 328,
+                  "endLine": 368,
                   "endColumn": 58,
                   "byteLength": 21
                 }
@@ -23862,9 +27420,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 314,
+                  "startLine": 351,
                   "startColumn": 24,
-                  "endLine": 314,
+                  "endLine": 351,
                   "endColumn": 34,
                   "byteLength": 10
                 }
@@ -23885,9 +27443,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 326,
+                  "startLine": 366,
                   "startColumn": 20,
-                  "endLine": 326,
+                  "endLine": 366,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -23899,7 +27457,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_subset." },
+          "message": { "text": "result_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -23908,11 +27466,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 322,
-                  "startColumn": 27,
-                  "endLine": 322,
-                  "endColumn": 72,
-                  "byteLength": 45
+                  "startLine": 361,
+                  "startColumn": 6,
+                  "endLine": 362,
+                  "endColumn": 74,
+                  "byteLength": 94
                 }
               }
             }
@@ -23922,7 +27480,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "saveptr_valid_string." },
           "locations": [
             {
               "physicalLocation": {
@@ -23931,11 +27489,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 323,
-                  "startColumn": 28,
-                  "endLine": 323,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 363,
+                  "startColumn": 34,
+                  "endLine": 363,
+                  "endColumn": 61,
+                  "byteLength": 27
                 }
               }
             }
@@ -23945,7 +27503,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "saveptr_subset." },
+          "message": { "text": "saveptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -23954,11 +27512,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 324,
-                  "startColumn": 28,
-                  "endLine": 324,
-                  "endColumn": 54,
-                  "byteLength": 26
+                  "startLine": 364,
+                  "startColumn": 31,
+                  "endLine": 364,
+                  "endColumn": 68,
+                  "byteLength": 37
                 }
               }
             }
@@ -23968,7 +27526,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_subset." },
+          "message": { "text": "result_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -23977,11 +27535,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 337,
-                  "startColumn": 27,
-                  "endLine": 338,
-                  "endColumn": 65,
-                  "byteLength": 85
+                  "startLine": 378,
+                  "startColumn": 6,
+                  "endLine": 380,
+                  "endColumn": 58,
+                  "byteLength": 115
                 }
               }
             }
@@ -23991,7 +27549,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "saveptr_subset." },
+          "message": { "text": "saveptr_valid_string." },
           "locations": [
             {
               "physicalLocation": {
@@ -24000,11 +27558,34 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 339,
-                  "startColumn": 28,
-                  "endLine": 339,
-                  "endColumn": 67,
-                  "byteLength": 39
+                  "startLine": 381,
+                  "startColumn": 34,
+                  "endLine": 381,
+                  "endColumn": 61,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "saveptr_same_base." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 383,
+                  "startColumn": 6,
+                  "endLine": 383,
+                  "endColumn": 56,
+                  "byteLength": 50
                 }
               }
             }
@@ -24023,9 +27604,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 304,
+                  "startLine": 341,
                   "startColumn": 10,
-                  "endLine": 304,
+                  "endLine": 341,
                   "endColumn": 16,
                   "byteLength": 6
                 }
@@ -24046,9 +27627,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 319,
+                  "startLine": 356,
                   "startColumn": 12,
-                  "endLine": 319,
+                  "endLine": 356,
                   "endColumn": 20,
                   "byteLength": 8
                 }
@@ -24069,9 +27650,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 369,
                   "startColumn": 12,
-                  "endLine": 329,
+                  "endLine": 369,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -24094,9 +27675,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 304,
+                  "startLine": 341,
                   "startColumn": 10,
-                  "endLine": 304,
+                  "endLine": 341,
                   "endColumn": 16,
                   "byteLength": 6
                 }
@@ -24119,9 +27700,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 306,
+                  "startLine": 343,
                   "startColumn": 10,
-                  "endLine": 306,
+                  "endLine": 343,
                   "endColumn": 25,
                   "byteLength": 15
                 }
@@ -24144,9 +27725,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 308,
+                  "startLine": 345,
                   "startColumn": 10,
-                  "endLine": 308,
+                  "endLine": 345,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -24169,9 +27750,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 310,
+                  "startLine": 347,
                   "startColumn": 10,
-                  "endLine": 310,
+                  "endLine": 347,
                   "endColumn": 18,
                   "byteLength": 8
                 }
@@ -24194,9 +27775,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 319,
+                  "startLine": 356,
                   "startColumn": 12,
-                  "endLine": 319,
+                  "endLine": 356,
                   "endColumn": 20,
                   "byteLength": 8
                 }
@@ -24219,9 +27800,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 320,
+                  "startLine": 358,
                   "startColumn": 12,
-                  "endLine": 320,
+                  "endLine": 358,
                   "endColumn": 18,
                   "byteLength": 6
                 }
@@ -24244,9 +27825,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 321,
+                  "startLine": 359,
                   "startColumn": 12,
-                  "endLine": 321,
+                  "endLine": 359,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -24269,9 +27850,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 369,
                   "startColumn": 12,
-                  "endLine": 329,
+                  "endLine": 369,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -24294,9 +27875,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 332,
+                  "startLine": 372,
                   "startColumn": 12,
-                  "endLine": 332,
+                  "endLine": 372,
                   "endColumn": 20,
                   "byteLength": 8
                 }
@@ -24319,9 +27900,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 335,
+                  "startLine": 375,
                   "startColumn": 12,
-                  "endLine": 335,
+                  "endLine": 375,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -24342,9 +27923,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -24365,9 +27946,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -24388,9 +27969,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 185,
+                  "startLine": 195,
                   "startColumn": 16,
-                  "endLine": 185,
+                  "endLine": 195,
                   "endColumn": 22,
                   "byteLength": 6
                 }
@@ -24411,9 +27992,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 185,
+                  "startLine": 195,
                   "startColumn": 16,
-                  "endLine": 185,
+                  "endLine": 195,
                   "endColumn": 22,
                   "byteLength": 6
                 }
@@ -24436,9 +28017,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 185,
+                  "startLine": 195,
                   "startColumn": 16,
-                  "endLine": 185,
+                  "endLine": 195,
                   "endColumn": 22,
                   "byteLength": 6
                 }
@@ -24459,9 +28040,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 166,
+                  "startLine": 171,
                   "startColumn": 30,
-                  "endLine": 166,
+                  "endLine": 171,
                   "endColumn": 53,
                   "byteLength": 23
                 }
@@ -24482,9 +28063,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 167,
+                  "startLine": 172,
                   "startColumn": 23,
-                  "endLine": 167,
+                  "endLine": 172,
                   "endColumn": 47,
                   "byteLength": 24
                 }
@@ -24505,9 +28086,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 168,
+                  "startLine": 173,
                   "startColumn": 23,
-                  "endLine": 168,
+                  "endLine": 173,
                   "endColumn": 51,
                   "byteLength": 28
                 }
@@ -24528,9 +28109,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 176,
+                  "startLine": 184,
                   "startColumn": 27,
-                  "endLine": 176,
+                  "endLine": 184,
                   "endColumn": 41,
                   "byteLength": 14
                 }
@@ -24551,9 +28132,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 172,
+                  "startLine": 179,
                   "startColumn": 25,
-                  "endLine": 172,
+                  "endLine": 179,
                   "endColumn": 40,
                   "byteLength": 15
                 }
@@ -24574,9 +28155,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 175,
+                  "startLine": 183,
                   "startColumn": 28,
-                  "endLine": 175,
+                  "endLine": 183,
                   "endColumn": 43,
                   "byteLength": 15
                 }
@@ -24597,9 +28178,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 179,
+                  "startLine": 189,
                   "startColumn": 28,
-                  "endLine": 179,
+                  "endLine": 189,
                   "endColumn": 48,
                   "byteLength": 20
                 }
@@ -24620,9 +28201,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 180,
+                  "startLine": 190,
                   "startColumn": 34,
-                  "endLine": 180,
+                  "endLine": 190,
                   "endColumn": 54,
                   "byteLength": 20
                 }
@@ -24634,7 +28215,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "position_subset." },
+          "message": { "text": "endptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -24643,11 +28224,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 181,
-                  "startColumn": 29,
-                  "endLine": 181,
-                  "endColumn": 60,
-                  "byteLength": 31
+                  "startLine": 191,
+                  "startColumn": 30,
+                  "endLine": 191,
+                  "endColumn": 69,
+                  "byteLength": 39
                 }
               }
             }
@@ -24666,9 +28247,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 169,
+                  "startLine": 174,
                   "startColumn": 10,
-                  "endLine": 169,
+                  "endLine": 174,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -24689,9 +28270,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 185,
+                  "startLine": 195,
                   "startColumn": 16,
-                  "endLine": 185,
+                  "endLine": 195,
                   "endColumn": 22,
                   "byteLength": 6
                 }
@@ -24712,9 +28293,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 177,
+                  "startLine": 185,
                   "startColumn": 12,
-                  "endLine": 177,
+                  "endLine": 185,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -24737,9 +28318,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 169,
+                  "startLine": 174,
                   "startColumn": 10,
-                  "endLine": 169,
+                  "endLine": 174,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -24762,9 +28343,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 170,
+                  "startLine": 176,
                   "startColumn": 10,
-                  "endLine": 170,
+                  "endLine": 176,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -24787,9 +28368,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 173,
+                  "startLine": 180,
                   "startColumn": 12,
-                  "endLine": 173,
+                  "endLine": 180,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -24812,9 +28393,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 177,
+                  "startLine": 185,
                   "startColumn": 12,
-                  "endLine": 177,
+                  "endLine": 185,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -24837,9 +28418,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 178,
+                  "startLine": 187,
                   "startColumn": 12,
-                  "endLine": 178,
+                  "endLine": 187,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -24860,9 +28441,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 185,
+                  "startLine": 195,
                   "startColumn": 16,
-                  "endLine": 185,
+                  "endLine": 195,
                   "endColumn": 22,
                   "byteLength": 6
                 }
@@ -24883,9 +28464,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 185,
+                  "startLine": 195,
                   "startColumn": 16,
-                  "endLine": 185,
+                  "endLine": 195,
                   "endColumn": 22,
                   "byteLength": 6
                 }
@@ -24906,9 +28487,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
+                  "startLine": 166,
                   "startColumn": 19,
-                  "endLine": 161,
+                  "endLine": 166,
                   "endColumn": 26,
                   "byteLength": 7
                 }
@@ -24929,9 +28510,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
+                  "startLine": 166,
                   "startColumn": 19,
-                  "endLine": 161,
+                  "endLine": 166,
                   "endColumn": 26,
                   "byteLength": 7
                 }
@@ -24954,9 +28535,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
+                  "startLine": 166,
                   "startColumn": 19,
-                  "endLine": 161,
+                  "endLine": 166,
                   "endColumn": 26,
                   "byteLength": 7
                 }
@@ -24977,9 +28558,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 143,
+                  "startLine": 146,
                   "startColumn": 30,
-                  "endLine": 143,
+                  "endLine": 146,
                   "endColumn": 53,
                   "byteLength": 23
                 }
@@ -25000,9 +28581,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 144,
+                  "startLine": 147,
                   "startColumn": 23,
-                  "endLine": 144,
+                  "endLine": 147,
                   "endColumn": 47,
                   "byteLength": 24
                 }
@@ -25023,9 +28604,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 152,
+                  "startLine": 156,
                   "startColumn": 27,
-                  "endLine": 152,
+                  "endLine": 156,
                   "endColumn": 41,
                   "byteLength": 14
                 }
@@ -25046,9 +28627,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 148,
+                  "startLine": 152,
                   "startColumn": 25,
-                  "endLine": 148,
+                  "endLine": 152,
                   "endColumn": 40,
                   "byteLength": 15
                 }
@@ -25069,9 +28650,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 151,
+                  "startLine": 155,
                   "startColumn": 28,
-                  "endLine": 151,
+                  "endLine": 155,
                   "endColumn": 43,
                   "byteLength": 15
                 }
@@ -25092,9 +28673,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 155,
+                  "startLine": 160,
                   "startColumn": 28,
-                  "endLine": 155,
+                  "endLine": 160,
                   "endColumn": 48,
                   "byteLength": 20
                 }
@@ -25115,9 +28696,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 156,
+                  "startLine": 161,
                   "startColumn": 34,
-                  "endLine": 156,
+                  "endLine": 161,
                   "endColumn": 54,
                   "byteLength": 20
                 }
@@ -25129,7 +28710,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "position_subset." },
+          "message": { "text": "endptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -25138,11 +28719,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 157,
-                  "startColumn": 29,
-                  "endLine": 157,
-                  "endColumn": 60,
-                  "byteLength": 31
+                  "startLine": 162,
+                  "startColumn": 30,
+                  "endLine": 162,
+                  "endColumn": 69,
+                  "byteLength": 39
                 }
               }
             }
@@ -25161,9 +28742,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 145,
+                  "startLine": 148,
                   "startColumn": 10,
-                  "endLine": 145,
+                  "endLine": 148,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -25184,9 +28765,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
+                  "startLine": 166,
                   "startColumn": 19,
-                  "endLine": 161,
+                  "endLine": 166,
                   "endColumn": 26,
                   "byteLength": 7
                 }
@@ -25207,9 +28788,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 153,
+                  "startLine": 157,
                   "startColumn": 12,
-                  "endLine": 153,
+                  "endLine": 157,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -25232,9 +28813,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 145,
+                  "startLine": 148,
                   "startColumn": 10,
-                  "endLine": 145,
+                  "endLine": 148,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -25257,9 +28838,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 146,
+                  "startLine": 149,
                   "startColumn": 10,
-                  "endLine": 146,
+                  "endLine": 149,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -25282,9 +28863,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 149,
+                  "startLine": 153,
                   "startColumn": 12,
-                  "endLine": 149,
+                  "endLine": 153,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -25307,9 +28888,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 153,
+                  "startLine": 157,
                   "startColumn": 12,
-                  "endLine": 153,
+                  "endLine": 157,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -25332,9 +28913,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 154,
+                  "startLine": 158,
                   "startColumn": 12,
-                  "endLine": 154,
+                  "endLine": 158,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -25355,9 +28936,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
+                  "startLine": 166,
                   "startColumn": 19,
-                  "endLine": 161,
+                  "endLine": 166,
                   "endColumn": 26,
                   "byteLength": 7
                 }
@@ -25378,9 +28959,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
+                  "startLine": 166,
                   "startColumn": 19,
-                  "endLine": 161,
+                  "endLine": 166,
                   "endColumn": 26,
                   "byteLength": 7
                 }
@@ -25401,9 +28982,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 210,
+                  "startLine": 225,
                   "startColumn": 21,
-                  "endLine": 210,
+                  "endLine": 225,
                   "endColumn": 28,
                   "byteLength": 7
                 }
@@ -25424,9 +29005,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 210,
+                  "startLine": 225,
                   "startColumn": 21,
-                  "endLine": 210,
+                  "endLine": 225,
                   "endColumn": 28,
                   "byteLength": 7
                 }
@@ -25449,9 +29030,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 210,
+                  "startLine": 225,
                   "startColumn": 21,
-                  "endLine": 210,
+                  "endLine": 225,
                   "endColumn": 28,
                   "byteLength": 7
                 }
@@ -25472,9 +29053,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 191,
+                  "startLine": 201,
                   "startColumn": 30,
-                  "endLine": 191,
+                  "endLine": 201,
                   "endColumn": 53,
                   "byteLength": 23
                 }
@@ -25495,9 +29076,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 192,
+                  "startLine": 202,
                   "startColumn": 23,
-                  "endLine": 192,
+                  "endLine": 202,
                   "endColumn": 47,
                   "byteLength": 24
                 }
@@ -25518,9 +29099,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 193,
+                  "startLine": 203,
                   "startColumn": 23,
-                  "endLine": 193,
+                  "endLine": 203,
                   "endColumn": 51,
                   "byteLength": 28
                 }
@@ -25541,9 +29122,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 201,
+                  "startLine": 214,
                   "startColumn": 27,
-                  "endLine": 201,
+                  "endLine": 214,
                   "endColumn": 41,
                   "byteLength": 14
                 }
@@ -25564,9 +29145,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 197,
+                  "startLine": 209,
                   "startColumn": 25,
-                  "endLine": 197,
+                  "endLine": 209,
                   "endColumn": 40,
                   "byteLength": 15
                 }
@@ -25587,9 +29168,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 200,
+                  "startLine": 213,
                   "startColumn": 28,
-                  "endLine": 200,
+                  "endLine": 213,
                   "endColumn": 43,
                   "byteLength": 15
                 }
@@ -25610,9 +29191,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 204,
+                  "startLine": 219,
                   "startColumn": 28,
-                  "endLine": 204,
+                  "endLine": 219,
                   "endColumn": 48,
                   "byteLength": 20
                 }
@@ -25633,9 +29214,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 205,
+                  "startLine": 220,
                   "startColumn": 34,
-                  "endLine": 205,
+                  "endLine": 220,
                   "endColumn": 54,
                   "byteLength": 20
                 }
@@ -25647,7 +29228,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "position_subset." },
+          "message": { "text": "endptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -25656,11 +29237,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 206,
-                  "startColumn": 29,
-                  "endLine": 206,
-                  "endColumn": 60,
-                  "byteLength": 31
+                  "startLine": 221,
+                  "startColumn": 30,
+                  "endLine": 221,
+                  "endColumn": 69,
+                  "byteLength": 39
                 }
               }
             }
@@ -25679,9 +29260,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 194,
+                  "startLine": 204,
                   "startColumn": 10,
-                  "endLine": 194,
+                  "endLine": 204,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -25702,9 +29283,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 210,
+                  "startLine": 225,
                   "startColumn": 21,
-                  "endLine": 210,
+                  "endLine": 225,
                   "endColumn": 28,
                   "byteLength": 7
                 }
@@ -25725,9 +29306,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 202,
+                  "startLine": 215,
                   "startColumn": 12,
-                  "endLine": 202,
+                  "endLine": 215,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -25750,9 +29331,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 194,
+                  "startLine": 204,
                   "startColumn": 10,
-                  "endLine": 194,
+                  "endLine": 204,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -25775,9 +29356,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 195,
+                  "startLine": 206,
                   "startColumn": 10,
-                  "endLine": 195,
+                  "endLine": 206,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -25800,9 +29381,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 198,
+                  "startLine": 210,
                   "startColumn": 12,
-                  "endLine": 198,
+                  "endLine": 210,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -25825,9 +29406,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 202,
+                  "startLine": 215,
                   "startColumn": 12,
-                  "endLine": 202,
+                  "endLine": 215,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -25850,9 +29431,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 203,
+                  "startLine": 217,
                   "startColumn": 12,
-                  "endLine": 203,
+                  "endLine": 217,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -25873,9 +29454,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 210,
+                  "startLine": 225,
                   "startColumn": 21,
-                  "endLine": 210,
+                  "endLine": 225,
                   "endColumn": 28,
                   "byteLength": 7
                 }
@@ -25896,9 +29477,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 210,
+                  "startLine": 225,
                   "startColumn": 21,
-                  "endLine": 210,
+                  "endLine": 225,
                   "endColumn": 28,
                   "byteLength": 7
                 }
@@ -25919,9 +29500,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 235,
+                  "startLine": 255,
                   "startColumn": 25,
-                  "endLine": 235,
+                  "endLine": 255,
                   "endColumn": 32,
                   "byteLength": 7
                 }
@@ -25942,9 +29523,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 235,
+                  "startLine": 255,
                   "startColumn": 25,
-                  "endLine": 235,
+                  "endLine": 255,
                   "endColumn": 32,
                   "byteLength": 7
                 }
@@ -25967,9 +29548,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 235,
+                  "startLine": 255,
                   "startColumn": 25,
-                  "endLine": 235,
+                  "endLine": 255,
                   "endColumn": 32,
                   "byteLength": 7
                 }
@@ -25990,9 +29571,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 216,
+                  "startLine": 231,
                   "startColumn": 30,
-                  "endLine": 216,
+                  "endLine": 231,
                   "endColumn": 53,
                   "byteLength": 23
                 }
@@ -26013,9 +29594,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 217,
+                  "startLine": 232,
                   "startColumn": 23,
-                  "endLine": 217,
+                  "endLine": 232,
                   "endColumn": 47,
                   "byteLength": 24
                 }
@@ -26036,9 +29617,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 218,
+                  "startLine": 233,
                   "startColumn": 23,
-                  "endLine": 218,
+                  "endLine": 233,
                   "endColumn": 51,
                   "byteLength": 28
                 }
@@ -26059,9 +29640,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 226,
+                  "startLine": 244,
                   "startColumn": 27,
-                  "endLine": 226,
+                  "endLine": 244,
                   "endColumn": 41,
                   "byteLength": 14
                 }
@@ -26082,9 +29663,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 222,
+                  "startLine": 239,
                   "startColumn": 25,
-                  "endLine": 222,
+                  "endLine": 239,
                   "endColumn": 40,
                   "byteLength": 15
                 }
@@ -26105,9 +29686,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 225,
+                  "startLine": 243,
                   "startColumn": 28,
-                  "endLine": 225,
+                  "endLine": 243,
                   "endColumn": 43,
                   "byteLength": 15
                 }
@@ -26128,9 +29709,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 229,
+                  "startLine": 249,
                   "startColumn": 28,
-                  "endLine": 229,
+                  "endLine": 249,
                   "endColumn": 48,
                   "byteLength": 20
                 }
@@ -26151,9 +29732,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 230,
+                  "startLine": 250,
                   "startColumn": 34,
-                  "endLine": 230,
+                  "endLine": 250,
                   "endColumn": 54,
                   "byteLength": 20
                 }
@@ -26165,7 +29746,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "position_subset." },
+          "message": { "text": "endptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -26174,11 +29755,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 231,
-                  "startColumn": 29,
-                  "endLine": 231,
-                  "endColumn": 60,
-                  "byteLength": 31
+                  "startLine": 251,
+                  "startColumn": 30,
+                  "endLine": 251,
+                  "endColumn": 69,
+                  "byteLength": 39
                 }
               }
             }
@@ -26197,9 +29778,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 219,
+                  "startLine": 234,
                   "startColumn": 10,
-                  "endLine": 219,
+                  "endLine": 234,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -26220,9 +29801,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 235,
+                  "startLine": 255,
                   "startColumn": 25,
-                  "endLine": 235,
+                  "endLine": 255,
                   "endColumn": 32,
                   "byteLength": 7
                 }
@@ -26243,9 +29824,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 227,
+                  "startLine": 245,
                   "startColumn": 12,
-                  "endLine": 227,
+                  "endLine": 245,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -26268,9 +29849,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 219,
+                  "startLine": 234,
                   "startColumn": 10,
-                  "endLine": 219,
+                  "endLine": 234,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -26293,9 +29874,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 220,
+                  "startLine": 236,
                   "startColumn": 10,
-                  "endLine": 220,
+                  "endLine": 236,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -26318,9 +29899,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 223,
+                  "startLine": 240,
                   "startColumn": 12,
-                  "endLine": 223,
+                  "endLine": 240,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -26343,9 +29924,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 227,
+                  "startLine": 245,
                   "startColumn": 12,
-                  "endLine": 227,
+                  "endLine": 245,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -26368,9 +29949,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 228,
+                  "startLine": 247,
                   "startColumn": 12,
-                  "endLine": 228,
+                  "endLine": 247,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -26391,9 +29972,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 235,
+                  "startLine": 255,
                   "startColumn": 25,
-                  "endLine": 235,
+                  "endLine": 255,
                   "endColumn": 32,
                   "byteLength": 7
                 }
@@ -26414,9 +29995,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 235,
+                  "startLine": 255,
                   "startColumn": 25,
-                  "endLine": 235,
+                  "endLine": 255,
                   "endColumn": 32,
                   "byteLength": 7
                 }
@@ -26437,9 +30018,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 260,
+                  "startLine": 285,
                   "startColumn": 30,
-                  "endLine": 260,
+                  "endLine": 285,
                   "endColumn": 38,
                   "byteLength": 8
                 }
@@ -26460,9 +30041,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 260,
+                  "startLine": 285,
                   "startColumn": 30,
-                  "endLine": 260,
+                  "endLine": 285,
                   "endColumn": 38,
                   "byteLength": 8
                 }
@@ -26485,9 +30066,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 260,
+                  "startLine": 285,
                   "startColumn": 30,
-                  "endLine": 260,
+                  "endLine": 285,
                   "endColumn": 38,
                   "byteLength": 8
                 }
@@ -26508,9 +30089,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 241,
+                  "startLine": 261,
                   "startColumn": 30,
-                  "endLine": 241,
+                  "endLine": 261,
                   "endColumn": 53,
                   "byteLength": 23
                 }
@@ -26531,9 +30112,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 242,
+                  "startLine": 262,
                   "startColumn": 23,
-                  "endLine": 242,
+                  "endLine": 262,
                   "endColumn": 47,
                   "byteLength": 24
                 }
@@ -26554,9 +30135,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 243,
+                  "startLine": 263,
                   "startColumn": 23,
-                  "endLine": 243,
+                  "endLine": 263,
                   "endColumn": 51,
                   "byteLength": 28
                 }
@@ -26577,9 +30158,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 251,
+                  "startLine": 274,
                   "startColumn": 27,
-                  "endLine": 251,
+                  "endLine": 274,
                   "endColumn": 41,
                   "byteLength": 14
                 }
@@ -26600,9 +30181,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 247,
+                  "startLine": 269,
                   "startColumn": 25,
-                  "endLine": 247,
+                  "endLine": 269,
                   "endColumn": 40,
                   "byteLength": 15
                 }
@@ -26623,9 +30204,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 250,
+                  "startLine": 273,
                   "startColumn": 28,
-                  "endLine": 250,
+                  "endLine": 273,
                   "endColumn": 43,
                   "byteLength": 15
                 }
@@ -26646,9 +30227,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 254,
+                  "startLine": 279,
                   "startColumn": 28,
-                  "endLine": 254,
+                  "endLine": 279,
                   "endColumn": 48,
                   "byteLength": 20
                 }
@@ -26669,9 +30250,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 255,
+                  "startLine": 280,
                   "startColumn": 34,
-                  "endLine": 255,
+                  "endLine": 280,
                   "endColumn": 54,
                   "byteLength": 20
                 }
@@ -26683,7 +30264,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "position_subset." },
+          "message": { "text": "endptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -26692,11 +30273,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 256,
-                  "startColumn": 29,
-                  "endLine": 256,
-                  "endColumn": 60,
-                  "byteLength": 31
+                  "startLine": 281,
+                  "startColumn": 30,
+                  "endLine": 281,
+                  "endColumn": 69,
+                  "byteLength": 39
                 }
               }
             }
@@ -26715,9 +30296,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 244,
+                  "startLine": 264,
                   "startColumn": 10,
-                  "endLine": 244,
+                  "endLine": 264,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -26738,9 +30319,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 260,
+                  "startLine": 285,
                   "startColumn": 30,
-                  "endLine": 260,
+                  "endLine": 285,
                   "endColumn": 38,
                   "byteLength": 8
                 }
@@ -26761,9 +30342,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 252,
+                  "startLine": 275,
                   "startColumn": 12,
-                  "endLine": 252,
+                  "endLine": 275,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -26786,9 +30367,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 244,
+                  "startLine": 264,
                   "startColumn": 10,
-                  "endLine": 244,
+                  "endLine": 264,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -26811,9 +30392,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 245,
+                  "startLine": 266,
                   "startColumn": 10,
-                  "endLine": 245,
+                  "endLine": 266,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -26836,9 +30417,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 248,
+                  "startLine": 270,
                   "startColumn": 12,
-                  "endLine": 248,
+                  "endLine": 270,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -26861,9 +30442,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 252,
+                  "startLine": 275,
                   "startColumn": 12,
-                  "endLine": 252,
+                  "endLine": 275,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -26886,9 +30467,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 253,
+                  "startLine": 277,
                   "startColumn": 12,
-                  "endLine": 253,
+                  "endLine": 277,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -26909,9 +30490,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 260,
+                  "startLine": 285,
                   "startColumn": 30,
-                  "endLine": 260,
+                  "endLine": 285,
                   "endColumn": 38,
                   "byteLength": 8
                 }
@@ -26932,9 +30513,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 260,
+                  "startLine": 285,
                   "startColumn": 30,
-                  "endLine": 260,
+                  "endLine": 285,
                   "endColumn": 38,
                   "byteLength": 8
                 }
@@ -26955,9 +30536,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 479,
+                  "startLine": 545,
                   "startColumn": 14,
-                  "endLine": 479,
+                  "endLine": 545,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -26978,10 +30559,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 474,
-                  "startColumn": 25,
-                  "endLine": 474,
-                  "endColumn": 48,
+                  "startLine": 539,
+                  "startColumn": 23,
+                  "endLine": 539,
+                  "endColumn": 46,
                   "byteLength": 23
                 }
               }
@@ -27001,16 +30582,39 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 475,
-                  "startColumn": 31,
-                  "endLine": 475,
-                  "endColumn": 53,
+                  "startLine": 540,
+                  "startColumn": 29,
+                  "endLine": 540,
+                  "endColumn": 51,
                   "byteLength": 22
                 }
               }
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 541,
+                  "startColumn": 23,
+                  "endLine": 541,
+                  "endColumn": 72,
+                  "byteLength": 49
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -27024,10 +30628,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 476,
-                  "startColumn": 12,
-                  "endLine": 476,
-                  "endColumn": 26,
+                  "startLine": 542,
+                  "startColumn": 10,
+                  "endLine": 542,
+                  "endColumn": 24,
                   "byteLength": 14
                 }
               }
@@ -27049,10 +30653,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 476,
-                  "startColumn": 12,
-                  "endLine": 476,
-                  "endColumn": 26,
+                  "startLine": 542,
+                  "startColumn": 10,
+                  "endLine": 542,
+                  "endColumn": 24,
                   "byteLength": 14
                 }
               }
@@ -27074,10 +30678,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 477,
-                  "startColumn": 12,
-                  "endLine": 477,
-                  "endColumn": 19,
+                  "startLine": 543,
+                  "startColumn": 10,
+                  "endLine": 543,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -27097,9 +30701,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 564,
+                  "startLine": 633,
                   "startColumn": 11,
-                  "endLine": 564,
+                  "endLine": 633,
                   "endColumn": 17,
                   "byteLength": 6
                 }
@@ -27120,9 +30724,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 561,
+                  "startLine": 629,
                   "startColumn": 5,
-                  "endLine": 561,
+                  "endLine": 629,
                   "endColumn": 51,
                   "byteLength": 46
                 }
@@ -27143,9 +30747,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 564,
+                  "startLine": 633,
                   "startColumn": 11,
-                  "endLine": 564,
+                  "endLine": 633,
                   "endColumn": 17,
                   "byteLength": 6
                 }
@@ -27168,9 +30772,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 562,
+                  "startLine": 630,
                   "startColumn": 10,
-                  "endLine": 562,
+                  "endLine": 630,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -27191,9 +30795,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 551,
+                  "startLine": 619,
                   "startColumn": 11,
-                  "endLine": 551,
+                  "endLine": 619,
                   "endColumn": 19,
                   "byteLength": 8
                 }
@@ -27214,9 +30818,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 546,
+                  "startLine": 614,
                   "startColumn": 23,
-                  "endLine": 546,
+                  "endLine": 614,
                   "endColumn": 46,
                   "byteLength": 23
                 }
@@ -27237,9 +30841,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 549,
+                  "startLine": 617,
                   "startColumn": 30,
-                  "endLine": 549,
+                  "endLine": 617,
                   "endColumn": 59,
                   "byteLength": 29
                 }
@@ -27260,9 +30864,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 547,
+                  "startLine": 615,
                   "startColumn": 10,
-                  "endLine": 547,
+                  "endLine": 615,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -27285,9 +30889,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 547,
+                  "startLine": 615,
                   "startColumn": 10,
-                  "endLine": 547,
+                  "endLine": 615,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -27310,9 +30914,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 547,
+                  "startLine": 615,
                   "startColumn": 19,
-                  "endLine": 547,
+                  "endLine": 615,
                   "endColumn": 32,
                   "byteLength": 13
                 }
@@ -27333,9 +30937,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 695,
+                  "startLine": 778,
                   "startColumn": 14,
-                  "endLine": 695,
+                  "endLine": 778,
                   "endColumn": 22,
                   "byteLength": 8
                 }
@@ -27356,9 +30960,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 691,
+                  "startLine": 774,
                   "startColumn": 23,
-                  "endLine": 691,
+                  "endLine": 774,
                   "endColumn": 42,
                   "byteLength": 19
                 }
@@ -27379,9 +30983,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 692,
+                  "startLine": 775,
                   "startColumn": 10,
-                  "endLine": 692,
+                  "endLine": 775,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -27404,9 +31008,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 692,
+                  "startLine": 775,
                   "startColumn": 10,
-                  "endLine": 692,
+                  "endLine": 775,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -27429,9 +31033,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 693,
+                  "startLine": 776,
                   "startColumn": 10,
-                  "endLine": 693,
+                  "endLine": 776,
                   "endColumn": 21,
                   "byteLength": 11
                 }
@@ -27452,9 +31056,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 677,
+                  "startLine": 760,
                   "startColumn": 11,
-                  "endLine": 677,
+                  "endLine": 760,
                   "endColumn": 17,
                   "byteLength": 6
                 }
@@ -27475,9 +31079,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 674,
+                  "startLine": 757,
                   "startColumn": 10,
-                  "endLine": 674,
+                  "endLine": 757,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -27500,9 +31104,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 674,
+                  "startLine": 757,
                   "startColumn": 10,
-                  "endLine": 674,
+                  "endLine": 757,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -27525,9 +31129,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 675,
+                  "startLine": 758,
                   "startColumn": 10,
-                  "endLine": 675,
+                  "endLine": 758,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -27550,9 +31154,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 675,
+                  "startLine": 758,
                   "startColumn": 19,
-                  "endLine": 675,
+                  "endLine": 758,
                   "endColumn": 36,
                   "byteLength": 17
                 }
diff --git a/src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif b/src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif
index 65daf9d5b7433eff95d480d35ff225b157fbf4e0..32a3730cb3736ebcad4b6cf8f4dfa985f540f0bb 100644
--- a/src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif
+++ b/src/plugins/markdown-report/tests/sarif/oracle/with-libc.sarif
@@ -1318,9 +1318,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 88,
+                  "startLine": 89,
                   "startColumn": 13,
-                  "endLine": 88,
+                  "endLine": 89,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -1341,9 +1341,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 88,
+                  "startLine": 89,
                   "startColumn": 13,
-                  "endLine": 88,
+                  "endLine": 89,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -1364,9 +1364,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 88,
+                  "startLine": 89,
                   "startColumn": 13,
-                  "endLine": 88,
+                  "endLine": 89,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -1479,9 +1479,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 85,
+                  "startLine": 86,
                   "startColumn": 28,
-                  "endLine": 85,
+                  "endLine": 86,
                   "endColumn": 49,
                   "byteLength": 21
                 }
@@ -1493,7 +1493,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_same_base." },
+          "message": { "text": "result_valid_read." },
           "locations": [
             {
               "physicalLocation": {
@@ -1503,8 +1503,31 @@
                 },
                 "region": {
                   "startLine": 79,
-                  "startColumn": 30,
+                  "startColumn": 31,
                   "endLine": 79,
+                  "endColumn": 58,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_same_base." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 80,
+                  "startColumn": 30,
+                  "endLine": 80,
                   "endColumn": 66,
                   "byteLength": 36
                 }
@@ -1525,9 +1548,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 80,
+                  "startLine": 81,
                   "startColumn": 25,
-                  "endLine": 80,
+                  "endLine": 81,
                   "endColumn": 45,
                   "byteLength": 20
                 }
@@ -1548,9 +1571,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 81,
+                  "startLine": 82,
                   "startColumn": 27,
-                  "endLine": 83,
+                  "endLine": 84,
                   "endColumn": 54,
                   "byteLength": 120
                 }
@@ -1571,9 +1594,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 86,
+                  "startLine": 87,
                   "startColumn": 25,
-                  "endLine": 86,
+                  "endLine": 87,
                   "endColumn": 41,
                   "byteLength": 16
                 }
@@ -1594,9 +1617,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 88,
+                  "startLine": 89,
                   "startColumn": 13,
-                  "endLine": 88,
+                  "endLine": 89,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -1874,9 +1897,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 104,
+                  "startLine": 121,
                   "startColumn": 13,
-                  "endLine": 104,
+                  "endLine": 121,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -1897,9 +1920,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 95,
+                  "startLine": 112,
                   "startColumn": 25,
-                  "endLine": 95,
+                  "endLine": 112,
                   "endColumn": 48,
                   "byteLength": 23
                 }
@@ -1920,9 +1943,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 96,
+                  "startLine": 113,
                   "startColumn": 24,
-                  "endLine": 96,
+                  "endLine": 113,
                   "endColumn": 51,
                   "byteLength": 27
                 }
@@ -1943,9 +1966,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 98,
+                  "startLine": 115,
                   "startColumn": 4,
-                  "endLine": 98,
+                  "endLine": 115,
                   "endColumn": 62,
                   "byteLength": 58
                 }
@@ -1966,9 +1989,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 101,
+                  "startLine": 118,
                   "startColumn": 29,
-                  "endLine": 101,
+                  "endLine": 118,
                   "endColumn": 76,
                   "byteLength": 47
                 }
@@ -1989,9 +2012,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 102,
+                  "startLine": 119,
                   "startColumn": 24,
-                  "endLine": 102,
+                  "endLine": 119,
                   "endColumn": 39,
                   "byteLength": 15
                 }
@@ -2012,9 +2035,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 99,
+                  "startLine": 116,
                   "startColumn": 12,
-                  "endLine": 99,
+                  "endLine": 116,
                   "endColumn": 35,
                   "byteLength": 23
                 }
@@ -2037,9 +2060,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 99,
+                  "startLine": 116,
                   "startColumn": 12,
-                  "endLine": 99,
+                  "endLine": 116,
                   "endColumn": 35,
                   "byteLength": 23
                 }
@@ -2062,9 +2085,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 100,
+                  "startLine": 117,
                   "startColumn": 12,
-                  "endLine": 100,
+                  "endLine": 117,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2076,7 +2099,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function memmove." },
+          "message": { "text": "behavior default! in function memmem." },
           "locations": [
             {
               "physicalLocation": {
@@ -2085,34 +2108,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 127,
+                  "startLine": 559,
                   "startColumn": 13,
-                  "endLine": 127,
-                  "endColumn": 20,
-                  "byteLength": 7
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "valid_dest." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 120,
-                  "startColumn": 25,
-                  "endLine": 120,
-                  "endColumn": 48,
-                  "byteLength": 23
+                  "endLine": 559,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -2122,7 +2122,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_src." },
+          "message": { "text": "valid_haystack." },
           "locations": [
             {
               "physicalLocation": {
@@ -2131,11 +2131,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 121,
-                  "startColumn": 24,
-                  "endLine": 121,
-                  "endColumn": 51,
-                  "byteLength": 27
+                  "startLine": 549,
+                  "startColumn": 27,
+                  "endLine": 549,
+                  "endColumn": 78,
+                  "byteLength": 51
                 }
               }
             }
@@ -2145,7 +2145,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "copied_contents." },
+          "message": { "text": "valid_needle." },
           "locations": [
             {
               "physicalLocation": {
@@ -2154,10 +2154,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 124,
-                  "startColumn": 29,
-                  "endLine": 124,
-                  "endColumn": 76,
+                  "startLine": 550,
+                  "startColumn": 25,
+                  "endLine": 550,
+                  "endColumn": 72,
                   "byteLength": 47
                 }
               }
@@ -2168,7 +2168,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_ptr." },
+          "message": { "text": "result_null_or_valid." },
           "locations": [
             {
               "physicalLocation": {
@@ -2177,11 +2177,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 125,
-                  "startColumn": 24,
-                  "endLine": 125,
-                  "endColumn": 39,
-                  "byteLength": 15
+                  "startLine": 555,
+                  "startColumn": 4,
+                  "endLine": 555,
+                  "endColumn": 51,
+                  "byteLength": 47
                 }
               }
             }
@@ -2191,7 +2191,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memmove." },
+          "message": { "text": "result_null_or_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -2200,11 +2200,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 122,
-                  "startColumn": 12,
-                  "endLine": 122,
-                  "endColumn": 35,
-                  "byteLength": 23
+                  "startLine": 557,
+                  "startColumn": 4,
+                  "endLine": 557,
+                  "endColumn": 67,
+                  "byteLength": 63
                 }
               }
             }
@@ -2214,9 +2214,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function memmove."
-          },
+          "message": { "text": "assigns clause in function memmem." },
           "locations": [
             {
               "physicalLocation": {
@@ -2225,11 +2223,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 122,
-                  "startColumn": 12,
-                  "endLine": 122,
-                  "endColumn": 35,
-                  "byteLength": 23
+                  "startLine": 559,
+                  "startColumn": 13,
+                  "endLine": 559,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -2240,7 +2238,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function memmove."
+            "text": "from clause of term \\result in function memmem."
           },
           "locations": [
             {
@@ -2250,10 +2248,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 123,
-                  "startColumn": 12,
-                  "endLine": 123,
-                  "endColumn": 19,
+                  "startLine": 551,
+                  "startColumn": 10,
+                  "endLine": 551,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -2264,7 +2262,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function mempcpy." },
+          "message": { "text": "behavior default! in function memmove." },
           "locations": [
             {
               "physicalLocation": {
@@ -2273,9 +2271,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 117,
+                  "startLine": 144,
                   "startColumn": 13,
-                  "endLine": 117,
+                  "endLine": 144,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -2296,9 +2294,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 108,
+                  "startLine": 137,
                   "startColumn": 25,
-                  "endLine": 108,
+                  "endLine": 137,
                   "endColumn": 48,
                   "byteLength": 23
                 }
@@ -2319,9 +2317,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 109,
+                  "startLine": 138,
                   "startColumn": 24,
-                  "endLine": 109,
+                  "endLine": 138,
                   "endColumn": 51,
                   "byteLength": 27
                 }
@@ -2329,29 +2327,6 @@
             }
           ]
         },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "separation." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 111,
-                  "startColumn": 4,
-                  "endLine": 111,
-                  "endColumn": 62,
-                  "byteLength": 58
-                }
-              }
-            }
-          ]
-        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -2365,9 +2340,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 114,
+                  "startLine": 141,
                   "startColumn": 29,
-                  "endLine": 114,
+                  "endLine": 141,
                   "endColumn": 76,
                   "byteLength": 47
                 }
@@ -2379,7 +2354,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_next_byte." },
+          "message": { "text": "result_ptr." },
           "locations": [
             {
               "physicalLocation": {
@@ -2388,11 +2363,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 115,
-                  "startColumn": 30,
-                  "endLine": 115,
-                  "endColumn": 49,
-                  "byteLength": 19
+                  "startLine": 142,
+                  "startColumn": 24,
+                  "endLine": 142,
+                  "endColumn": 39,
+                  "byteLength": 15
                 }
               }
             }
@@ -2402,7 +2377,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function mempcpy." },
+          "message": { "text": "assigns clause in function memmove." },
           "locations": [
             {
               "physicalLocation": {
@@ -2411,9 +2386,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 112,
+                  "startLine": 139,
                   "startColumn": 12,
-                  "endLine": 112,
+                  "endLine": 139,
                   "endColumn": 35,
                   "byteLength": 23
                 }
@@ -2426,7 +2401,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function mempcpy."
+            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function memmove."
           },
           "locations": [
             {
@@ -2436,9 +2411,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 112,
+                  "startLine": 139,
                   "startColumn": 12,
-                  "endLine": 112,
+                  "endLine": 139,
                   "endColumn": 35,
                   "byteLength": 23
                 }
@@ -2451,7 +2426,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function mempcpy."
+            "text": "from clause of term \\result in function memmove."
           },
           "locations": [
             {
@@ -2461,9 +2436,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 113,
+                  "startLine": 140,
                   "startColumn": 12,
-                  "endLine": 113,
+                  "endLine": 140,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -2475,7 +2450,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function memset." },
+          "message": { "text": "behavior default! in function mempcpy." },
           "locations": [
             {
               "physicalLocation": {
@@ -2484,11 +2459,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 137,
+                  "startLine": 134,
                   "startColumn": 13,
-                  "endLine": 137,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "endLine": 134,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -2498,7 +2473,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_s." },
+          "message": { "text": "valid_dest." },
           "locations": [
             {
               "physicalLocation": {
@@ -2507,11 +2482,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 131,
-                  "startColumn": 22,
-                  "endLine": 131,
-                  "endColumn": 42,
-                  "byteLength": 20
+                  "startLine": 125,
+                  "startColumn": 25,
+                  "endLine": 125,
+                  "endColumn": 48,
+                  "byteLength": 23
                 }
               }
             }
@@ -2521,7 +2496,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "acsl_c_equiv." },
+          "message": { "text": "valid_src." },
           "locations": [
             {
               "physicalLocation": {
@@ -2530,11 +2505,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 134,
-                  "startColumn": 26,
-                  "endLine": 134,
-                  "endColumn": 46,
-                  "byteLength": 20
+                  "startLine": 126,
+                  "startColumn": 24,
+                  "endLine": 126,
+                  "endColumn": 51,
+                  "byteLength": 27
                 }
               }
             }
@@ -2544,7 +2519,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_ptr." },
+          "message": { "text": "separation." },
           "locations": [
             {
               "physicalLocation": {
@@ -2553,11 +2528,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 135,
-                  "startColumn": 24,
-                  "endLine": 135,
-                  "endColumn": 36,
-                  "byteLength": 12
+                  "startLine": 128,
+                  "startColumn": 4,
+                  "endLine": 128,
+                  "endColumn": 62,
+                  "byteLength": 58
                 }
               }
             }
@@ -2567,7 +2542,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function memset." },
+          "message": { "text": "copied_contents." },
           "locations": [
             {
               "physicalLocation": {
@@ -2576,11 +2551,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 132,
-                  "startColumn": 12,
-                  "endLine": 132,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "startLine": 131,
+                  "startColumn": 29,
+                  "endLine": 131,
+                  "endColumn": 76,
+                  "byteLength": 47
                 }
               }
             }
@@ -2590,9 +2565,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term *((char *)s + (0 .. n - 1)) in function memset."
-          },
+          "message": { "text": "result_next_byte." },
           "locations": [
             {
               "physicalLocation": {
@@ -2602,10 +2575,10 @@
                 },
                 "region": {
                   "startLine": 132,
-                  "startColumn": 12,
+                  "startColumn": 30,
                   "endLine": 132,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "endColumn": 49,
+                  "byteLength": 19
                 }
               }
             }
@@ -2615,8 +2588,827 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function memset."
+          "message": { "text": "assigns clause in function mempcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 129,
+                  "startColumn": 12,
+                  "endLine": 129,
+                  "endColumn": 35,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term *((char *)dest + (0 .. n - 1)) in function mempcpy."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 129,
+                  "startColumn": 12,
+                  "endLine": 129,
+                  "endColumn": 35,
+                  "byteLength": 23
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function mempcpy."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 130,
+                  "startColumn": 12,
+                  "endLine": 130,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 108,
+                  "startColumn": 13,
+                  "endLine": 108,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior found in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 108,
+                  "startColumn": 13,
+                  "endLine": 108,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior not_found in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 108,
+                  "startColumn": 13,
+                  "endLine": 108,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 94,
+                  "startColumn": 18,
+                  "endLine": 94,
+                  "endColumn": 43,
+                  "byteLength": 25
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "initialization." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 95,
+                  "startColumn": 27,
+                  "endLine": 95,
+                  "endColumn": 73,
+                  "byteLength": 46
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "danglingness." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 96,
+                  "startColumn": 25,
+                  "endLine": 96,
+                  "endColumn": 43,
+                  "byteLength": 18
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "char_found." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 99,
+                  "startColumn": 24,
+                  "endLine": 99,
+                  "endColumn": 44,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "char_not_found." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 103,
+                  "startColumn": 28,
+                  "endLine": 103,
+                  "endColumn": 49,
+                  "byteLength": 21
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_valid_read." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 100,
+                  "startColumn": 31,
+                  "endLine": 100,
+                  "endColumn": 58,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_same_base." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 101,
+                  "startColumn": 30,
+                  "endLine": 101,
+                  "endColumn": 66,
+                  "byteLength": 36
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_null." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 104,
+                  "startColumn": 25,
+                  "endLine": 104,
+                  "endColumn": 41,
+                  "byteLength": 16
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 108,
+                  "startColumn": 13,
+                  "endLine": 108,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memrchr."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 97,
+                  "startColumn": 10,
+                  "endLine": 97,
+                  "endColumn": 17,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "complete clause in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 108,
+                  "startColumn": 13,
+                  "endLine": 108,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "disjoint clause in function memrchr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 108,
+                  "startColumn": 13,
+                  "endLine": 108,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function memset." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 154,
+                  "startColumn": 13,
+                  "endLine": 154,
+                  "endColumn": 19,
+                  "byteLength": 6
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_s." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 148,
+                  "startColumn": 22,
+                  "endLine": 148,
+                  "endColumn": 42,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "acsl_c_equiv." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 151,
+                  "startColumn": 26,
+                  "endLine": 151,
+                  "endColumn": 46,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_ptr." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 152,
+                  "startColumn": 24,
+                  "endLine": 152,
+                  "endColumn": 36,
+                  "byteLength": 12
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function memset." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 149,
+                  "startColumn": 12,
+                  "endLine": 149,
+                  "endColumn": 32,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term *((char *)s + (0 .. n - 1)) in function memset."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 149,
+                  "startColumn": 12,
+                  "endLine": 149,
+                  "endColumn": 32,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function memset."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 150,
+                  "startColumn": 12,
+                  "endLine": 150,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function stpcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 473,
+                  "startColumn": 13,
+                  "endLine": 473,
+                  "endColumn": 19,
+                  "byteLength": 6
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_string_src." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 464,
+                  "startColumn": 31,
+                  "endLine": 464,
+                  "endColumn": 53,
+                  "byteLength": 22
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "room_string." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 465,
+                  "startColumn": 26,
+                  "endLine": 465,
+                  "endColumn": 55,
+                  "byteLength": 29
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 467,
+                  "startColumn": 4,
+                  "endLine": 467,
+                  "endColumn": 59,
+                  "byteLength": 55
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "equal_contents." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 470,
+                  "startColumn": 28,
+                  "endLine": 470,
+                  "endColumn": 49,
+                  "byteLength": 21
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "points_to_end." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 471,
+                  "startColumn": 27,
+                  "endLine": 471,
+                  "endColumn": 57,
+                  "byteLength": 30
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function stpcpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 468,
+                  "startColumn": 12,
+                  "endLine": 468,
+                  "endColumn": 32,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term *(dest + (0 .. strlen{Old}(src))) in function stpcpy."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 468,
+                  "startColumn": 12,
+                  "endLine": 468,
+                  "endColumn": 32,
+                  "byteLength": 20
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "from clause of term \\result in function stpcpy."
+          },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 469,
+                  "startColumn": 12,
+                  "endLine": 469,
+                  "endColumn": 19,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior default! in function stpncpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 630,
+                  "startColumn": 13,
+                  "endLine": 630,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": {
+            "text": "behavior src_is_a_string in function stpncpy."
           },
           "locations": [
             {
@@ -2626,11 +3418,80 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 133,
-                  "startColumn": 12,
-                  "endLine": 133,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 630,
+                  "startColumn": 13,
+                  "endLine": 630,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "behavior src_too_long in function stpncpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 630,
+                  "startColumn": 13,
+                  "endLine": 630,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_string_src." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 612,
+                  "startColumn": 29,
+                  "endLine": 612,
+                  "endColumn": 55,
+                  "byteLength": 26
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "valid_dest." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 613,
+                  "startColumn": 23,
+                  "endLine": 613,
+                  "endColumn": 46,
+                  "byteLength": 23
                 }
               }
             }
@@ -2640,7 +3501,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function stpcpy." },
+          "message": { "text": "separation." },
           "locations": [
             {
               "physicalLocation": {
@@ -2649,11 +3510,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 421,
-                  "startColumn": 13,
-                  "endLine": 421,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 614,
+                  "startColumn": 23,
+                  "endLine": 614,
+                  "endColumn": 66,
+                  "byteLength": 43
                 }
               }
             }
@@ -2663,7 +3524,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_src." },
+          "message": { "text": "src_has_nul." },
           "locations": [
             {
               "physicalLocation": {
@@ -2672,11 +3533,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 412,
-                  "startColumn": 31,
-                  "endLine": 412,
-                  "endColumn": 53,
-                  "byteLength": 22
+                  "startLine": 619,
+                  "startColumn": 25,
+                  "endLine": 619,
+                  "endColumn": 40,
+                  "byteLength": 15
                 }
               }
             }
@@ -2686,7 +3547,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "room_string." },
+          "message": { "text": "src_no_nul." },
           "locations": [
             {
               "physicalLocation": {
@@ -2695,9 +3556,32 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 413,
+                  "startLine": 626,
+                  "startColumn": 24,
+                  "endLine": 626,
+                  "endColumn": 69,
+                  "byteLength": 45
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "initialization." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 617,
                   "startColumn": 26,
-                  "endLine": 413,
+                  "endLine": 617,
                   "endColumn": 55,
                   "byteLength": 29
                 }
@@ -2709,7 +3593,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "separation." },
+          "message": { "text": "valid_string_dest." },
           "locations": [
             {
               "physicalLocation": {
@@ -2718,11 +3602,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 415,
-                  "startColumn": 4,
-                  "endLine": 415,
-                  "endColumn": 59,
-                  "byteLength": 55
+                  "startLine": 620,
+                  "startColumn": 31,
+                  "endLine": 620,
+                  "endColumn": 54,
+                  "byteLength": 23
                 }
               }
             }
@@ -2732,7 +3616,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "equal_contents." },
+          "message": { "text": "same_contents." },
           "locations": [
             {
               "physicalLocation": {
@@ -2741,11 +3625,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 418,
-                  "startColumn": 28,
-                  "endLine": 418,
+                  "startLine": 621,
+                  "startColumn": 27,
+                  "endLine": 621,
                   "endColumn": 49,
-                  "byteLength": 21
+                  "byteLength": 22
                 }
               }
             }
@@ -2755,7 +3639,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "points_to_end." },
+          "message": { "text": "dest_nul_padded." },
           "locations": [
             {
               "physicalLocation": {
@@ -2764,11 +3648,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 419,
-                  "startColumn": 27,
-                  "endLine": 419,
-                  "endColumn": 57,
-                  "byteLength": 30
+                  "startLine": 623,
+                  "startColumn": 6,
+                  "endLine": 623,
+                  "endColumn": 62,
+                  "byteLength": 56
                 }
               }
             }
@@ -2778,7 +3662,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function stpcpy." },
+          "message": { "text": "result_points_to_nul." },
           "locations": [
             {
               "physicalLocation": {
@@ -2787,11 +3671,80 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 416,
-                  "startColumn": 12,
-                  "endLine": 416,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "startLine": 624,
+                  "startColumn": 34,
+                  "endLine": 624,
+                  "endColumn": 63,
+                  "byteLength": 29
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "same_partial_contents." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 627,
+                  "startColumn": 35,
+                  "endLine": 627,
+                  "endColumn": 61,
+                  "byteLength": 26
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_points_to_end." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 628,
+                  "startColumn": 34,
+                  "endLine": 628,
+                  "endColumn": 53,
+                  "byteLength": 19
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "assigns clause in function stpncpy." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 615,
+                  "startColumn": 10,
+                  "endLine": 615,
+                  "endColumn": 24,
+                  "byteLength": 14
                 }
               }
             }
@@ -2802,7 +3755,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(dest + (0 .. strlen{Old}(src))) in function stpcpy."
+            "text": "from clause of term *(dest + (0 .. n - 1)) in function stpncpy."
           },
           "locations": [
             {
@@ -2812,11 +3765,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 416,
-                  "startColumn": 12,
-                  "endLine": 416,
-                  "endColumn": 32,
-                  "byteLength": 20
+                  "startLine": 615,
+                  "startColumn": 10,
+                  "endLine": 615,
+                  "endColumn": 24,
+                  "byteLength": 14
                 }
               }
             }
@@ -2827,7 +3780,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term \\result in function stpcpy."
+            "text": "from clause of term \\result in function stpncpy."
           },
           "locations": [
             {
@@ -2837,10 +3790,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 417,
-                  "startColumn": 12,
-                  "endLine": 417,
-                  "endColumn": 19,
+                  "startLine": 616,
+                  "startColumn": 10,
+                  "endLine": 616,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -2977,9 +3930,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 255,
+                  "startLine": 281,
                   "startColumn": 13,
-                  "endLine": 255,
+                  "endLine": 281,
                   "endColumn": 23,
                   "byteLength": 10
                 }
@@ -3000,10 +3953,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 247,
-                  "startColumn": 36,
-                  "endLine": 247,
-                  "endColumn": 63,
+                  "startLine": 271,
+                  "startColumn": 34,
+                  "endLine": 271,
+                  "endColumn": 61,
                   "byteLength": 27
                 }
               }
@@ -3023,10 +3976,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 248,
-                  "startColumn": 34,
-                  "endLine": 248,
-                  "endColumn": 59,
+                  "startLine": 272,
+                  "startColumn": 32,
+                  "endLine": 272,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -3046,11 +3999,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 252,
+                  "startLine": 276,
                   "startColumn": 4,
-                  "endLine": 253,
-                  "endColumn": 65,
-                  "byteLength": 82
+                  "endLine": 278,
+                  "endColumn": 49,
+                  "byteLength": 104
                 }
               }
             }
@@ -3069,9 +4022,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 255,
+                  "startLine": 281,
                   "startColumn": 13,
-                  "endLine": 255,
+                  "endLine": 281,
                   "endColumn": 23,
                   "byteLength": 10
                 }
@@ -3094,10 +4047,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 249,
-                  "startColumn": 12,
-                  "endLine": 249,
-                  "endColumn": 19,
+                  "startLine": 273,
+                  "startColumn": 10,
+                  "endLine": 273,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -3117,9 +4070,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 436,
+                  "startLine": 490,
                   "startColumn": 13,
-                  "endLine": 436,
+                  "endLine": 490,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -3140,9 +4093,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 424,
+                  "startLine": 476,
                   "startColumn": 31,
-                  "endLine": 424,
+                  "endLine": 476,
                   "endColumn": 53,
                   "byteLength": 22
                 }
@@ -3163,9 +4116,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 425,
+                  "startLine": 477,
                   "startColumn": 32,
-                  "endLine": 425,
+                  "endLine": 477,
                   "endColumn": 50,
                   "byteLength": 18
                 }
@@ -3186,9 +4139,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 426,
+                  "startLine": 478,
                   "startColumn": 26,
-                  "endLine": 426,
+                  "endLine": 478,
                   "endColumn": 70,
                   "byteLength": 44
                 }
@@ -3196,6 +4149,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 480,
+                  "startColumn": 4,
+                  "endLine": 480,
+                  "endColumn": 72,
+                  "byteLength": 68
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -3209,9 +4185,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 429,
+                  "startLine": 483,
                   "startColumn": 28,
-                  "endLine": 429,
+                  "endLine": 483,
                   "endColumn": 76,
                   "byteLength": 48
                 }
@@ -3232,9 +4208,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 432,
+                  "startLine": 486,
                   "startColumn": 4,
-                  "endLine": 432,
+                  "endLine": 486,
                   "endColumn": 60,
                   "byteLength": 56
                 }
@@ -3255,9 +4231,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 433,
+                  "startLine": 487,
                   "startColumn": 34,
-                  "endLine": 433,
+                  "endLine": 487,
                   "endColumn": 77,
                   "byteLength": 43
                 }
@@ -3278,9 +4254,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 434,
+                  "startLine": 488,
                   "startColumn": 24,
-                  "endLine": 434,
+                  "endLine": 488,
                   "endColumn": 39,
                   "byteLength": 15
                 }
@@ -3301,9 +4277,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 427,
+                  "startLine": 481,
                   "startColumn": 12,
-                  "endLine": 427,
+                  "endLine": 481,
                   "endColumn": 58,
                   "byteLength": 46
                 }
@@ -3316,7 +4292,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(dest +\n                      (strlen{Old}(dest) ..\n                                           strlen{Old}(dest) +\n                                           strlen{Old}(src))) in function strcat."
+            "text": "from clause of term *(dest +\n                      (strlen{Old}(dest) ..\n                       strlen{Old}(dest) + strlen{Old}(src))) in function strcat."
           },
           "locations": [
             {
@@ -3326,9 +4302,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 427,
+                  "startLine": 481,
                   "startColumn": 12,
-                  "endLine": 427,
+                  "endLine": 481,
                   "endColumn": 58,
                   "byteLength": 46
                 }
@@ -3351,9 +4327,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 430,
+                  "startLine": 484,
                   "startColumn": 12,
-                  "endLine": 430,
+                  "endLine": 484,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -3361,29 +4337,6 @@
             }
           ]
         },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "behavior default in function strchr." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 189,
-                  "startColumn": 13,
-                  "endLine": 189,
-                  "endColumn": 19,
-                  "byteLength": 6
-                }
-              }
-            }
-          ]
-        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -3397,9 +4350,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 189,
+                  "startLine": 209,
                   "startColumn": 13,
-                  "endLine": 189,
+                  "endLine": 209,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -3420,9 +4373,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 189,
+                  "startLine": 209,
                   "startColumn": 13,
-                  "endLine": 189,
+                  "endLine": 209,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -3443,9 +4396,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 189,
+                  "startLine": 209,
                   "startColumn": 13,
-                  "endLine": 189,
+                  "endLine": 209,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -3466,10 +4419,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 173,
-                  "startColumn": 29,
-                  "endLine": 173,
-                  "endColumn": 49,
+                  "startLine": 193,
+                  "startColumn": 27,
+                  "endLine": 193,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -3489,9 +4442,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 176,
+                  "startLine": 196,
                   "startColumn": 24,
-                  "endLine": 176,
+                  "endLine": 196,
                   "endColumn": 35,
                   "byteLength": 11
                 }
@@ -3512,9 +4465,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 183,
+                  "startLine": 204,
                   "startColumn": 28,
-                  "endLine": 183,
+                  "endLine": 204,
                   "endColumn": 40,
                   "byteLength": 12
                 }
@@ -3522,6 +4475,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_valid_string." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 197,
+                  "startColumn": 33,
+                  "endLine": 197,
+                  "endColumn": 59,
+                  "byteLength": 26
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -3535,9 +4511,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 177,
+                  "startLine": 198,
                   "startColumn": 25,
-                  "endLine": 177,
+                  "endLine": 198,
                   "endColumn": 44,
                   "byteLength": 19
                 }
@@ -3558,9 +4534,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 178,
+                  "startLine": 199,
                   "startColumn": 30,
-                  "endLine": 178,
+                  "endLine": 199,
                   "endColumn": 66,
                   "byteLength": 36
                 }
@@ -3581,9 +4557,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 179,
+                  "startLine": 200,
                   "startColumn": 30,
-                  "endLine": 179,
+                  "endLine": 200,
                   "endColumn": 59,
                   "byteLength": 29
                 }
@@ -3595,7 +4571,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_valid_string." },
+          "message": { "text": "result_first_occurrence." },
           "locations": [
             {
               "physicalLocation": {
@@ -3604,11 +4580,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 180,
-                  "startColumn": 33,
-                  "endLine": 180,
-                  "endColumn": 59,
-                  "byteLength": 26
+                  "startLine": 202,
+                  "startColumn": 6,
+                  "endLine": 202,
+                  "endColumn": 57,
+                  "byteLength": 51
                 }
               }
             }
@@ -3618,7 +4594,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_first_occur." },
+          "message": { "text": "result_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -3627,11 +4603,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 181,
-                  "startColumn": 32,
-                  "endLine": 181,
-                  "endColumn": 79,
-                  "byteLength": 47
+                  "startLine": 205,
+                  "startColumn": 25,
+                  "endLine": 205,
+                  "endColumn": 41,
+                  "byteLength": 16
                 }
               }
             }
@@ -3641,7 +4617,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null." },
+          "message": { "text": "assigns clause in function strchr." },
           "locations": [
             {
               "physicalLocation": {
@@ -3650,11 +4626,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 184,
-                  "startColumn": 25,
-                  "endLine": 184,
-                  "endColumn": 41,
-                  "byteLength": 16
+                  "startLine": 209,
+                  "startColumn": 13,
+                  "endLine": 209,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -3664,7 +4640,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null_or_same_base." },
+          "message": {
+            "text": "from clause of term \\result in function strchr."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -3673,11 +4651,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 187,
-                  "startColumn": 4,
-                  "endLine": 187,
-                  "endColumn": 60,
-                  "byteLength": 56
+                  "startLine": 194,
+                  "startColumn": 10,
+                  "endLine": 194,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -3687,7 +4665,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function strchr." },
+          "message": { "text": "complete clause in function strchr." },
           "locations": [
             {
               "physicalLocation": {
@@ -3696,9 +4674,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 189,
+                  "startLine": 209,
                   "startColumn": 13,
-                  "endLine": 189,
+                  "endLine": 209,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -3710,9 +4688,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function strchr."
-          },
+          "message": { "text": "disjoint clause in function strchr." },
           "locations": [
             {
               "physicalLocation": {
@@ -3721,11 +4697,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 174,
-                  "startColumn": 12,
-                  "endLine": 174,
+                  "startLine": 209,
+                  "startColumn": 13,
+                  "endLine": 209,
                   "endColumn": 19,
-                  "byteLength": 7
+                  "byteLength": 6
                 }
               }
             }
@@ -3744,9 +4720,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 195,
+                  "startLine": 217,
                   "startColumn": 13,
-                  "endLine": 195,
+                  "endLine": 217,
                   "endColumn": 22,
                   "byteLength": 9
                 }
@@ -3767,16 +4743,39 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 191,
-                  "startColumn": 29,
-                  "endLine": 191,
-                  "endColumn": 49,
+                  "startLine": 212,
+                  "startColumn": 27,
+                  "endLine": 212,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "result_valid_string." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 214,
+                  "startColumn": 31,
+                  "endLine": 214,
+                  "endColumn": 57,
+                  "byteLength": 26
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -3790,11 +4789,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 193,
-                  "startColumn": 30,
-                  "endLine": 193,
+                  "startLine": 215,
+                  "startColumn": 28,
+                  "endLine": 215,
                   "endColumn": 64,
-                  "byteLength": 34
+                  "byteLength": 36
                 }
               }
             }
@@ -3813,9 +4812,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 195,
+                  "startLine": 217,
                   "startColumn": 13,
-                  "endLine": 195,
+                  "endLine": 217,
                   "endColumn": 22,
                   "byteLength": 9
                 }
@@ -3838,10 +4837,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 192,
-                  "startColumn": 12,
-                  "endLine": 192,
-                  "endColumn": 19,
+                  "startLine": 213,
+                  "startColumn": 10,
+                  "endLine": 213,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -3861,9 +4860,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 158,
+                  "startLine": 176,
                   "startColumn": 11,
-                  "endLine": 158,
+                  "endLine": 176,
                   "endColumn": 17,
                   "byteLength": 6
                 }
@@ -3884,9 +4883,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 153,
+                  "startLine": 170,
                   "startColumn": 30,
-                  "endLine": 153,
+                  "endLine": 170,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -3907,9 +4906,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 154,
+                  "startLine": 171,
                   "startColumn": 30,
-                  "endLine": 154,
+                  "endLine": 171,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -3930,9 +4929,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 156,
+                  "startLine": 174,
                   "startColumn": 26,
-                  "endLine": 156,
+                  "endLine": 174,
                   "endColumn": 50,
                   "byteLength": 24
                 }
@@ -3953,9 +4952,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 158,
+                  "startLine": 176,
                   "startColumn": 11,
-                  "endLine": 158,
+                  "endLine": 176,
                   "endColumn": 17,
                   "byteLength": 6
                 }
@@ -3978,9 +4977,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 155,
+                  "startLine": 172,
                   "startColumn": 12,
-                  "endLine": 155,
+                  "endLine": 172,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4001,9 +5000,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 171,
+                  "startLine": 190,
                   "startColumn": 11,
-                  "endLine": 171,
+                  "endLine": 190,
                   "endColumn": 18,
                   "byteLength": 7
                 }
@@ -4024,9 +5023,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 167,
+                  "startLine": 185,
                   "startColumn": 30,
-                  "endLine": 167,
+                  "endLine": 185,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -4047,9 +5046,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 168,
+                  "startLine": 186,
                   "startColumn": 30,
-                  "endLine": 168,
+                  "endLine": 186,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -4070,9 +5069,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 171,
+                  "startLine": 190,
                   "startColumn": 11,
-                  "endLine": 171,
+                  "endLine": 190,
                   "endColumn": 18,
                   "byteLength": 7
                 }
@@ -4095,9 +5094,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 169,
+                  "startLine": 187,
                   "startColumn": 12,
-                  "endLine": 169,
+                  "endLine": 187,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4118,9 +5117,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 376,
+                  "startLine": 428,
                   "startColumn": 13,
-                  "endLine": 376,
+                  "endLine": 428,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -4141,9 +5140,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 367,
+                  "startLine": 419,
                   "startColumn": 31,
-                  "endLine": 367,
+                  "endLine": 419,
                   "endColumn": 53,
                   "byteLength": 22
                 }
@@ -4164,9 +5163,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 368,
+                  "startLine": 420,
                   "startColumn": 26,
-                  "endLine": 368,
+                  "endLine": 420,
                   "endColumn": 55,
                   "byteLength": 29
                 }
@@ -4187,9 +5186,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 370,
+                  "startLine": 422,
                   "startColumn": 4,
-                  "endLine": 370,
+                  "endLine": 422,
                   "endColumn": 59,
                   "byteLength": 55
                 }
@@ -4210,9 +5209,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 373,
+                  "startLine": 425,
                   "startColumn": 28,
-                  "endLine": 373,
+                  "endLine": 425,
                   "endColumn": 49,
                   "byteLength": 21
                 }
@@ -4233,9 +5232,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 374,
+                  "startLine": 426,
                   "startColumn": 24,
-                  "endLine": 374,
+                  "endLine": 426,
                   "endColumn": 39,
                   "byteLength": 15
                 }
@@ -4256,9 +5255,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 371,
+                  "startLine": 423,
                   "startColumn": 12,
-                  "endLine": 371,
+                  "endLine": 423,
                   "endColumn": 32,
                   "byteLength": 20
                 }
@@ -4281,9 +5280,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 371,
+                  "startLine": 423,
                   "startColumn": 12,
-                  "endLine": 371,
+                  "endLine": 423,
                   "endColumn": 32,
                   "byteLength": 20
                 }
@@ -4306,9 +5305,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 372,
+                  "startLine": 424,
                   "startColumn": 12,
-                  "endLine": 372,
+                  "endLine": 424,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4329,9 +5328,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 218,
+                  "startLine": 235,
                   "startColumn": 14,
-                  "endLine": 218,
+                  "endLine": 235,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -4352,10 +5351,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 213,
-                  "startColumn": 29,
-                  "endLine": 213,
-                  "endColumn": 49,
+                  "startLine": 229,
+                  "startColumn": 27,
+                  "endLine": 229,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -4375,10 +5374,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 214,
-                  "startColumn": 34,
-                  "endLine": 214,
-                  "endColumn": 59,
+                  "startLine": 230,
+                  "startColumn": 32,
+                  "endLine": 230,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -4398,10 +5397,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 216,
-                  "startColumn": 28,
-                  "endLine": 216,
-                  "endColumn": 53,
+                  "startLine": 233,
+                  "startColumn": 26,
+                  "endLine": 233,
+                  "endColumn": 51,
                   "byteLength": 25
                 }
               }
@@ -4421,9 +5420,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 218,
+                  "startLine": 235,
                   "startColumn": 14,
-                  "endLine": 218,
+                  "endLine": 235,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -4446,10 +5445,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 215,
-                  "startColumn": 12,
-                  "endLine": 215,
-                  "endColumn": 19,
+                  "startLine": 231,
+                  "startColumn": 10,
+                  "endLine": 231,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -4469,9 +5468,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 500,
+                  "startLine": 582,
                   "startColumn": 13,
-                  "endLine": 500,
+                  "endLine": 582,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -4492,9 +5491,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 500,
+                  "startLine": 582,
                   "startColumn": 13,
-                  "endLine": 500,
+                  "endLine": 582,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -4515,9 +5514,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 500,
+                  "startLine": 582,
                   "startColumn": 13,
-                  "endLine": 500,
+                  "endLine": 582,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -4538,10 +5537,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 484,
-                  "startColumn": 29,
-                  "endLine": 484,
-                  "endColumn": 49,
+                  "startLine": 565,
+                  "startColumn": 27,
+                  "endLine": 565,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -4561,11 +5560,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 488,
+                  "startLine": 569,
                   "startColumn": 26,
-                  "endLine": 488,
-                  "endColumn": 49,
-                  "byteLength": 23
+                  "endLine": 569,
+                  "endColumn": 51,
+                  "byteLength": 25
                 }
               }
             }
@@ -4584,11 +5583,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 495,
+                  "startLine": 577,
                   "startColumn": 29,
-                  "endLine": 495,
-                  "endColumn": 53,
-                  "byteLength": 24
+                  "endLine": 577,
+                  "endColumn": 55,
+                  "byteLength": 26
                 }
               }
             }
@@ -4607,11 +5606,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 491,
+                  "startLine": 573,
                   "startColumn": 24,
-                  "endLine": 491,
-                  "endColumn": 49,
-                  "byteLength": 25
+                  "endLine": 573,
+                  "endColumn": 51,
+                  "byteLength": 27
                 }
               }
             }
@@ -4630,10 +5629,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 493,
-                  "startColumn": 4,
-                  "endLine": 493,
-                  "endColumn": 51,
+                  "startLine": 575,
+                  "startColumn": 6,
+                  "endLine": 575,
+                  "endColumn": 53,
                   "byteLength": 47
                 }
               }
@@ -4653,9 +5652,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 498,
+                  "startLine": 580,
                   "startColumn": 25,
-                  "endLine": 498,
+                  "endLine": 580,
                   "endColumn": 41,
                   "byteLength": 16
                 }
@@ -4676,9 +5675,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
+                  "startLine": 570,
                   "startColumn": 12,
-                  "endLine": 489,
+                  "endLine": 570,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -4699,9 +5698,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 500,
+                  "startLine": 582,
                   "startColumn": 13,
-                  "endLine": 500,
+                  "endLine": 582,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -4722,9 +5721,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 500,
+                  "startLine": 582,
                   "startColumn": 13,
-                  "endLine": 500,
+                  "endLine": 582,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -4747,9 +5746,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 489,
+                  "startLine": 570,
                   "startColumn": 12,
-                  "endLine": 489,
+                  "endLine": 570,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -4772,9 +5771,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 490,
+                  "startLine": 572,
                   "startColumn": 12,
-                  "endLine": 490,
+                  "endLine": 572,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4797,10 +5796,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 486,
-                  "startColumn": 12,
-                  "endLine": 486,
-                  "endColumn": 19,
+                  "startLine": 567,
+                  "startColumn": 10,
+                  "endLine": 567,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -4822,9 +5821,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 496,
+                  "startLine": 579,
                   "startColumn": 12,
-                  "endLine": 496,
+                  "endLine": 579,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -4845,10 +5844,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 485,
-                  "startColumn": 14,
-                  "endLine": 485,
-                  "endColumn": 21,
+                  "startLine": 566,
+                  "startColumn": 12,
+                  "endLine": 566,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -4868,9 +5867,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 500,
+                  "startLine": 582,
                   "startColumn": 13,
-                  "endLine": 500,
+                  "endLine": 582,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -4891,9 +5890,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 363,
+                  "startLine": 415,
                   "startColumn": 13,
-                  "endLine": 363,
+                  "endLine": 415,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -4914,9 +5913,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 359,
+                  "startLine": 411,
                   "startColumn": 33,
-                  "endLine": 359,
+                  "endLine": 411,
                   "endColumn": 59,
                   "byteLength": 26
                 }
@@ -4937,9 +5936,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 360,
+                  "startLine": 412,
                   "startColumn": 35,
-                  "endLine": 360,
+                  "endLine": 412,
                   "endColumn": 51,
                   "byteLength": 16
                 }
@@ -4960,9 +5959,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 361,
+                  "startLine": 413,
                   "startColumn": 33,
-                  "endLine": 361,
+                  "endLine": 413,
                   "endColumn": 59,
                   "byteLength": 26
                 }
@@ -4983,9 +5982,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 363,
+                  "startLine": 415,
                   "startColumn": 13,
-                  "endLine": 363,
+                  "endLine": 415,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -5008,9 +6007,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 358,
+                  "startLine": 410,
                   "startColumn": 12,
-                  "endLine": 358,
+                  "endLine": 410,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -5031,9 +6030,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 471,
+                  "startLine": 536,
                   "startColumn": 14,
-                  "endLine": 471,
+                  "endLine": 536,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -5054,9 +6053,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 464,
+                  "startLine": 526,
                   "startColumn": 31,
-                  "endLine": 464,
+                  "endLine": 526,
                   "endColumn": 53,
                   "byteLength": 22
                 }
@@ -5077,9 +6076,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 465,
+                  "startLine": 527,
                   "startColumn": 32,
-                  "endLine": 465,
+                  "endLine": 527,
                   "endColumn": 50,
                   "byteLength": 18
                 }
@@ -5100,9 +6099,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 466,
+                  "startLine": 528,
                   "startColumn": 27,
-                  "endLine": 466,
+                  "endLine": 528,
                   "endColumn": 48,
                   "byteLength": 21
                 }
@@ -5110,6 +6109,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 530,
+                  "startColumn": 4,
+                  "endLine": 531,
+                  "endColumn": 31,
+                  "byteLength": 89
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -5123,9 +6145,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 469,
+                  "startLine": 534,
                   "startColumn": 28,
-                  "endLine": 469,
+                  "endLine": 534,
                   "endColumn": 65,
                   "byteLength": 37
                 }
@@ -5146,9 +6168,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 467,
+                  "startLine": 532,
                   "startColumn": 12,
-                  "endLine": 467,
+                  "endLine": 532,
                   "endColumn": 33,
                   "byteLength": 21
                 }
@@ -5171,9 +6193,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 467,
+                  "startLine": 532,
                   "startColumn": 12,
-                  "endLine": 467,
+                  "endLine": 532,
                   "endColumn": 33,
                   "byteLength": 21
                 }
@@ -5196,9 +6218,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 468,
+                  "startLine": 533,
                   "startColumn": 12,
-                  "endLine": 468,
+                  "endLine": 533,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -5219,9 +6241,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 409,
+                  "startLine": 461,
                   "startColumn": 7,
-                  "endLine": 409,
+                  "endLine": 461,
                   "endColumn": 14,
                   "byteLength": 7
                 }
@@ -5242,9 +6264,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 400,
+                  "startLine": 452,
                   "startColumn": 31,
-                  "endLine": 400,
+                  "endLine": 452,
                   "endColumn": 53,
                   "byteLength": 22
                 }
@@ -5265,9 +6287,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 401,
+                  "startLine": 453,
                   "startColumn": 27,
-                  "endLine": 401,
+                  "endLine": 453,
                   "endColumn": 48,
                   "byteLength": 21
                 }
@@ -5288,9 +6310,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 403,
+                  "startLine": 455,
                   "startColumn": 4,
-                  "endLine": 403,
+                  "endLine": 455,
                   "endColumn": 61,
                   "byteLength": 57
                 }
@@ -5311,9 +6333,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 406,
+                  "startLine": 458,
                   "startColumn": 28,
-                  "endLine": 406,
+                  "endLine": 458,
                   "endColumn": 73,
                   "byteLength": 45
                 }
@@ -5334,9 +6356,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 407,
+                  "startLine": 459,
                   "startColumn": 28,
-                  "endLine": 407,
+                  "endLine": 459,
                   "endColumn": 50,
                   "byteLength": 22
                 }
@@ -5357,9 +6379,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
+                  "startLine": 456,
                   "startColumn": 12,
-                  "endLine": 404,
+                  "endLine": 456,
                   "endColumn": 24,
                   "byteLength": 12
                 }
@@ -5382,9 +6404,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 404,
+                  "startLine": 456,
                   "startColumn": 12,
-                  "endLine": 404,
+                  "endLine": 456,
                   "endColumn": 24,
                   "byteLength": 12
                 }
@@ -5407,9 +6429,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 405,
+                  "startLine": 457,
                   "startColumn": 12,
-                  "endLine": 405,
+                  "endLine": 457,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -5430,9 +6452,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 145,
+                  "startLine": 162,
                   "startColumn": 14,
-                  "endLine": 145,
+                  "endLine": 162,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -5453,9 +6475,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 141,
+                  "startLine": 158,
                   "startColumn": 29,
-                  "endLine": 141,
+                  "endLine": 158,
                   "endColumn": 49,
                   "byteLength": 20
                 }
@@ -5476,9 +6498,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 143,
+                  "startLine": 160,
                   "startColumn": 26,
-                  "endLine": 143,
+                  "endLine": 160,
                   "endColumn": 46,
                   "byteLength": 20
                 }
@@ -5499,9 +6521,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 145,
+                  "startLine": 162,
                   "startColumn": 14,
-                  "endLine": 145,
+                  "endLine": 162,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -5524,9 +6546,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 142,
+                  "startLine": 159,
                   "startColumn": 12,
-                  "endLine": 142,
+                  "endLine": 159,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -5664,9 +6686,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 460,
+                  "startLine": 522,
                   "startColumn": 13,
-                  "endLine": 460,
+                  "endLine": 522,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -5687,9 +6709,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 460,
+                  "startLine": 522,
                   "startColumn": 13,
-                  "endLine": 460,
+                  "endLine": 522,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -5710,9 +6732,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 460,
+                  "startLine": 522,
                   "startColumn": 13,
-                  "endLine": 460,
+                  "endLine": 522,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -5733,10 +6755,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 439,
-                  "startColumn": 32,
-                  "endLine": 439,
-                  "endColumn": 58,
+                  "startLine": 497,
+                  "startColumn": 30,
+                  "endLine": 497,
+                  "endColumn": 56,
                   "byteLength": 26
                 }
               }
@@ -5756,16 +6778,39 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 440,
-                  "startColumn": 32,
-                  "endLine": 440,
-                  "endColumn": 50,
+                  "startLine": 498,
+                  "startColumn": 30,
+                  "endLine": 498,
+                  "endColumn": 48,
                   "byteLength": 18
                 }
               }
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 500,
+                  "startColumn": 4,
+                  "endLine": 501,
+                  "endColumn": 40,
+                  "byteLength": 91
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -5779,9 +6824,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 446,
+                  "startLine": 507,
                   "startColumn": 26,
-                  "endLine": 446,
+                  "endLine": 507,
                   "endColumn": 74,
                   "byteLength": 48
                 }
@@ -5802,9 +6847,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 454,
+                  "startLine": 514,
                   "startColumn": 26,
-                  "endLine": 454,
+                  "endLine": 514,
                   "endColumn": 64,
                   "byteLength": 38
                 }
@@ -5816,7 +6861,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_src_fits." },
+          "message": { "text": "src_fits." },
           "locations": [
             {
               "physicalLocation": {
@@ -5825,11 +6870,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 445,
-                  "startColumn": 35,
-                  "endLine": 445,
-                  "endColumn": 77,
-                  "byteLength": 42
+                  "startLine": 506,
+                  "startColumn": 22,
+                  "endLine": 506,
+                  "endColumn": 41,
+                  "byteLength": 19
                 }
               }
             }
@@ -5839,7 +6884,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_src_too_large." },
+          "message": { "text": "src_too_large." },
           "locations": [
             {
               "physicalLocation": {
@@ -5848,11 +6893,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 453,
-                  "startColumn": 4,
-                  "endLine": 453,
-                  "endColumn": 49,
-                  "byteLength": 45
+                  "startLine": 513,
+                  "startColumn": 27,
+                  "endLine": 513,
+                  "endColumn": 47,
+                  "byteLength": 20
                 }
               }
             }
@@ -5871,10 +6916,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 443,
-                  "startColumn": 24,
-                  "endLine": 443,
-                  "endColumn": 39,
+                  "startLine": 504,
+                  "startColumn": 22,
+                  "endLine": 504,
+                  "endColumn": 37,
                   "byteLength": 15
                 }
               }
@@ -5894,9 +6939,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 450,
+                  "startLine": 511,
                   "startColumn": 28,
-                  "endLine": 450,
+                  "endLine": 511,
                   "endColumn": 76,
                   "byteLength": 48
                 }
@@ -5917,9 +6962,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 458,
+                  "startLine": 518,
                   "startColumn": 36,
-                  "endLine": 458,
+                  "endLine": 518,
                   "endColumn": 74,
                   "byteLength": 38
                 }
@@ -5940,11 +6985,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 447,
+                  "startLine": 508,
                   "startColumn": 12,
-                  "endLine": 447,
-                  "endColumn": 58,
-                  "byteLength": 46
+                  "endLine": 508,
+                  "endColumn": 60,
+                  "byteLength": 48
                 }
               }
             }
@@ -5963,10 +7008,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 441,
-                  "startColumn": 12,
-                  "endLine": 441,
-                  "endColumn": 50,
+                  "startLine": 502,
+                  "startColumn": 10,
+                  "endLine": 502,
+                  "endColumn": 48,
                   "byteLength": 38
                 }
               }
@@ -5986,11 +7031,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 455,
+                  "startLine": 515,
                   "startColumn": 12,
-                  "endLine": 455,
-                  "endColumn": 48,
-                  "byteLength": 36
+                  "endLine": 515,
+                  "endColumn": 50,
+                  "byteLength": 38
                 }
               }
             }
@@ -6001,7 +7046,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *(dest +\n                      (strlen{Old}(dest) ..\n                                           strlen{Old}(dest) +\n                                           strlen{Old}(src))) in function strncat."
+            "text": "from clause of term *(dest +\n                      (strlen{Old}(dest) ..\n                       strlen{Old}(dest) + strlen{Old}(src))) in function strncat."
           },
           "locations": [
             {
@@ -6011,11 +7056,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 447,
+                  "startLine": 508,
                   "startColumn": 12,
-                  "endLine": 447,
-                  "endColumn": 58,
-                  "byteLength": 46
+                  "endLine": 508,
+                  "endColumn": 60,
+                  "byteLength": 48
                 }
               }
             }
@@ -6036,9 +7081,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 449,
+                  "startLine": 510,
                   "startColumn": 12,
-                  "endLine": 449,
+                  "endLine": 510,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -6061,10 +7106,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 441,
-                  "startColumn": 12,
-                  "endLine": 441,
-                  "endColumn": 50,
+                  "startLine": 502,
+                  "startColumn": 10,
+                  "endLine": 502,
+                  "endColumn": 48,
                   "byteLength": 38
                 }
               }
@@ -6086,10 +7131,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 442,
-                  "startColumn": 12,
-                  "endLine": 442,
-                  "endColumn": 19,
+                  "startLine": 503,
+                  "startColumn": 10,
+                  "endLine": 503,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -6111,11 +7156,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 455,
+                  "startLine": 515,
                   "startColumn": 12,
-                  "endLine": 455,
-                  "endColumn": 48,
-                  "byteLength": 36
+                  "endLine": 515,
+                  "endColumn": 50,
+                  "byteLength": 38
                 }
               }
             }
@@ -6136,9 +7181,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 457,
+                  "startLine": 517,
                   "startColumn": 12,
-                  "endLine": 457,
+                  "endLine": 517,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -6146,6 +7191,52 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "complete clause in function strncat." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 522,
+                  "startColumn": 13,
+                  "endLine": 522,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "disjoint clause in function strncat." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 522,
+                  "startColumn": 13,
+                  "endLine": 522,
+                  "endColumn": 20,
+                  "byteLength": 7
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -6159,9 +7250,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 165,
+                  "startLine": 183,
                   "startColumn": 11,
-                  "endLine": 165,
+                  "endLine": 183,
                   "endColumn": 18,
                   "byteLength": 7
                 }
@@ -6182,9 +7273,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 160,
+                  "startLine": 178,
                   "startColumn": 30,
-                  "endLine": 160,
+                  "endLine": 178,
                   "endColumn": 55,
                   "byteLength": 25
                 }
@@ -6205,9 +7296,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 161,
+                  "startLine": 179,
                   "startColumn": 30,
-                  "endLine": 161,
+                  "endLine": 179,
                   "endColumn": 55,
                   "byteLength": 25
                 }
@@ -6228,9 +7319,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 163,
+                  "startLine": 181,
                   "startColumn": 26,
-                  "endLine": 163,
+                  "endLine": 181,
                   "endColumn": 53,
                   "byteLength": 27
                 }
@@ -6251,9 +7342,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 165,
+                  "startLine": 183,
                   "startColumn": 11,
-                  "endLine": 165,
+                  "endLine": 183,
                   "endColumn": 18,
                   "byteLength": 7
                 }
@@ -6276,9 +7367,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 162,
+                  "startLine": 180,
                   "startColumn": 12,
-                  "endLine": 162,
+                  "endLine": 180,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -6299,9 +7390,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 394,
+                  "startLine": 446,
                   "startColumn": 13,
-                  "endLine": 394,
+                  "endLine": 446,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -6322,9 +7413,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 394,
+                  "startLine": 446,
                   "startColumn": 13,
-                  "endLine": 394,
+                  "endLine": 446,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -6345,9 +7436,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 394,
+                  "startLine": 446,
                   "startColumn": 13,
-                  "endLine": 394,
+                  "endLine": 446,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -6368,9 +7459,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 379,
+                  "startLine": 431,
                   "startColumn": 32,
-                  "endLine": 379,
+                  "endLine": 431,
                   "endColumn": 58,
                   "byteLength": 26
                 }
@@ -6391,9 +7482,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 380,
+                  "startLine": 432,
                   "startColumn": 27,
-                  "endLine": 380,
+                  "endLine": 432,
                   "endColumn": 50,
                   "byteLength": 23
                 }
@@ -6414,9 +7505,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 382,
+                  "startLine": 434,
                   "startColumn": 4,
-                  "endLine": 382,
+                  "endLine": 434,
                   "endColumn": 43,
                   "byteLength": 39
                 }
@@ -6437,9 +7528,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 388,
+                  "startLine": 440,
                   "startColumn": 22,
-                  "endLine": 388,
+                  "endLine": 440,
                   "endColumn": 37,
                   "byteLength": 15
                 }
@@ -6460,9 +7551,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 391,
+                  "startLine": 443,
                   "startColumn": 26,
-                  "endLine": 391,
+                  "endLine": 443,
                   "endColumn": 42,
                   "byteLength": 16
                 }
@@ -6483,9 +7574,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 385,
+                  "startLine": 437,
                   "startColumn": 24,
-                  "endLine": 385,
+                  "endLine": 437,
                   "endColumn": 39,
                   "byteLength": 15
                 }
@@ -6506,9 +7597,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 386,
+                  "startLine": 438,
                   "startColumn": 28,
-                  "endLine": 386,
+                  "endLine": 438,
                   "endColumn": 57,
                   "byteLength": 29
                 }
@@ -6529,9 +7620,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 389,
+                  "startLine": 441,
                   "startColumn": 30,
-                  "endLine": 389,
+                  "endLine": 441,
                   "endColumn": 51,
                   "byteLength": 21
                 }
@@ -6552,9 +7643,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 392,
+                  "startLine": 444,
                   "startColumn": 26,
-                  "endLine": 392,
+                  "endLine": 444,
                   "endColumn": 60,
                   "byteLength": 34
                 }
@@ -6575,9 +7666,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 383,
+                  "startLine": 435,
                   "startColumn": 12,
-                  "endLine": 383,
+                  "endLine": 435,
                   "endColumn": 26,
                   "byteLength": 14
                 }
@@ -6600,9 +7691,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 383,
+                  "startLine": 435,
                   "startColumn": 12,
-                  "endLine": 383,
+                  "endLine": 435,
                   "endColumn": 26,
                   "byteLength": 14
                 }
@@ -6625,9 +7716,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 384,
+                  "startLine": 436,
                   "startColumn": 12,
-                  "endLine": 384,
+                  "endLine": 436,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -6648,9 +7739,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 522,
+                  "startLine": 608,
                   "startColumn": 13,
-                  "endLine": 522,
+                  "endLine": 608,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -6671,9 +7762,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 522,
+                  "startLine": 608,
                   "startColumn": 13,
-                  "endLine": 522,
+                  "endLine": 608,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -6696,9 +7787,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 522,
+                  "startLine": 608,
                   "startColumn": 13,
-                  "endLine": 522,
+                  "endLine": 608,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -6719,10 +7810,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 502,
-                  "startColumn": 29,
-                  "endLine": 502,
-                  "endColumn": 49,
+                  "startLine": 588,
+                  "startColumn": 27,
+                  "endLine": 588,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -6742,11 +7833,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 507,
+                  "startLine": 593,
                   "startColumn": 26,
-                  "endLine": 507,
-                  "endColumn": 60,
-                  "byteLength": 34
+                  "endLine": 593,
+                  "endColumn": 57,
+                  "byteLength": 31
                 }
               }
             }
@@ -6765,11 +7856,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 517,
+                  "startLine": 603,
                   "startColumn": 29,
-                  "endLine": 517,
-                  "endColumn": 64,
-                  "byteLength": 35
+                  "endLine": 603,
+                  "endColumn": 61,
+                  "byteLength": 32
                 }
               }
             }
@@ -6788,11 +7879,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 511,
+                  "startLine": 597,
                   "startColumn": 24,
-                  "endLine": 511,
-                  "endColumn": 60,
-                  "byteLength": 36
+                  "endLine": 597,
+                  "endColumn": 58,
+                  "byteLength": 34
                 }
               }
             }
@@ -6813,11 +7904,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 513,
-                  "startColumn": 4,
-                  "endLine": 515,
-                  "endColumn": 29,
-                  "byteLength": 124
+                  "startLine": 599,
+                  "startColumn": 6,
+                  "endLine": 601,
+                  "endColumn": 31,
+                  "byteLength": 125
                 }
               }
             }
@@ -6836,9 +7927,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 520,
+                  "startLine": 606,
                   "startColumn": 25,
-                  "endLine": 520,
+                  "endLine": 606,
                   "endColumn": 41,
                   "byteLength": 16
                 }
@@ -6859,9 +7950,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 508,
+                  "startLine": 594,
                   "startColumn": 12,
-                  "endLine": 508,
+                  "endLine": 594,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -6882,9 +7973,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 522,
+                  "startLine": 608,
                   "startColumn": 13,
-                  "endLine": 522,
+                  "endLine": 608,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -6905,9 +7996,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 522,
+                  "startLine": 608,
                   "startColumn": 13,
-                  "endLine": 522,
+                  "endLine": 608,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -6930,9 +8021,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 508,
+                  "startLine": 594,
                   "startColumn": 12,
-                  "endLine": 508,
+                  "endLine": 594,
                   "endColumn": 28,
                   "byteLength": 16
                 }
@@ -6955,9 +8046,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 509,
+                  "startLine": 595,
                   "startColumn": 12,
-                  "endLine": 509,
+                  "endLine": 595,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -6980,10 +8071,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 504,
-                  "startColumn": 12,
-                  "endLine": 504,
-                  "endColumn": 19,
+                  "startLine": 590,
+                  "startColumn": 10,
+                  "endLine": 590,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -7005,9 +8096,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 518,
+                  "startLine": 605,
                   "startColumn": 12,
-                  "endLine": 518,
+                  "endLine": 605,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -7030,10 +8121,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 503,
-                  "startColumn": 14,
-                  "endLine": 503,
-                  "endColumn": 21,
+                  "startLine": 589,
+                  "startColumn": 12,
+                  "endLine": 589,
+                  "endColumn": 19,
                   "byteLength": 7
                 }
               }
@@ -7055,9 +8146,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 522,
+                  "startLine": 608,
                   "startColumn": 13,
-                  "endLine": 522,
+                  "endLine": 608,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -7078,9 +8169,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 151,
+                  "startLine": 168,
                   "startColumn": 14,
-                  "endLine": 151,
+                  "endLine": 168,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -7101,9 +8192,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 147,
+                  "startLine": 164,
                   "startColumn": 29,
-                  "endLine": 147,
+                  "endLine": 164,
                   "endColumn": 53,
                   "byteLength": 24
                 }
@@ -7124,9 +8215,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 149,
+                  "startLine": 166,
                   "startColumn": 28,
-                  "endLine": 149,
+                  "endLine": 166,
                   "endColumn": 64,
                   "byteLength": 36
                 }
@@ -7147,9 +8238,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 151,
+                  "startLine": 168,
                   "startColumn": 14,
-                  "endLine": 151,
+                  "endLine": 168,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -7172,9 +8263,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 148,
+                  "startLine": 165,
                   "startColumn": 12,
-                  "endLine": 148,
+                  "endLine": 165,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -7195,9 +8286,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 234,
+                  "startLine": 255,
                   "startColumn": 13,
-                  "endLine": 234,
+                  "endLine": 255,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -7218,10 +8309,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 228,
-                  "startColumn": 29,
-                  "endLine": 228,
-                  "endColumn": 49,
+                  "startLine": 247,
+                  "startColumn": 27,
+                  "endLine": 247,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -7241,10 +8332,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 229,
-                  "startColumn": 34,
-                  "endLine": 229,
-                  "endColumn": 59,
+                  "startLine": 248,
+                  "startColumn": 32,
+                  "endLine": 248,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -7264,11 +8355,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 232,
+                  "startLine": 252,
                   "startColumn": 4,
-                  "endLine": 232,
-                  "endColumn": 60,
-                  "byteLength": 56
+                  "endLine": 253,
+                  "endColumn": 72,
+                  "byteLength": 92
                 }
               }
             }
@@ -7287,9 +8378,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 234,
+                  "startLine": 255,
                   "startColumn": 13,
-                  "endLine": 234,
+                  "endLine": 255,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -7312,33 +8403,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 230,
-                  "startColumn": 12,
-                  "endLine": 230,
-                  "endColumn": 19,
-                  "byteLength": 7
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "behavior default in function strrchr." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 211,
-                  "startColumn": 13,
-                  "endLine": 211,
-                  "endColumn": 20,
+                  "startLine": 249,
+                  "startColumn": 10,
+                  "endLine": 249,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -7358,55 +8426,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 211,
-                  "startColumn": 13,
-                  "endLine": 211,
-                  "endColumn": 20,
-                  "byteLength": 7
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "behavior found in function strrchr." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 211,
-                  "startColumn": 13,
-                  "endLine": 211,
-                  "endColumn": 20,
-                  "byteLength": 7
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": { "text": "behavior not_found in function strrchr." },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 211,
+                  "startLine": 226,
                   "startColumn": 13,
-                  "endLine": 211,
+                  "endLine": 226,
                   "endColumn": 20,
                   "byteLength": 7
                 }
@@ -7427,10 +8449,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 197,
-                  "startColumn": 29,
-                  "endLine": 197,
-                  "endColumn": 49,
+                  "startLine": 220,
+                  "startColumn": 27,
+                  "endLine": 220,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -7441,7 +8463,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "char_found." },
+          "message": { "text": "result_null_or_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -7450,11 +8472,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 200,
-                  "startColumn": 24,
-                  "endLine": 200,
-                  "endColumn": 35,
-                  "byteLength": 11
+                  "startLine": 223,
+                  "startColumn": 4,
+                  "endLine": 224,
+                  "endColumn": 72,
+                  "byteLength": 92
                 }
               }
             }
@@ -7464,7 +8486,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "char_not_found." },
+          "message": { "text": "assigns clause in function strrchr." },
           "locations": [
             {
               "physicalLocation": {
@@ -7473,11 +8495,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 205,
-                  "startColumn": 28,
-                  "endLine": 205,
-                  "endColumn": 40,
-                  "byteLength": 12
+                  "startLine": 226,
+                  "startColumn": 13,
+                  "endLine": 226,
+                  "endColumn": 20,
+                  "byteLength": 7
                 }
               }
             }
@@ -7487,7 +8509,9 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_char." },
+          "message": {
+            "text": "from clause of term \\result in function strrchr."
+          },
           "locations": [
             {
               "physicalLocation": {
@@ -7496,11 +8520,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 201,
-                  "startColumn": 25,
-                  "endLine": 201,
-                  "endColumn": 38,
-                  "byteLength": 13
+                  "startLine": 221,
+                  "startColumn": 10,
+                  "endLine": 221,
+                  "endColumn": 17,
+                  "byteLength": 7
                 }
               }
             }
@@ -7510,7 +8534,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_same_base." },
+          "message": { "text": "behavior default! in function strsep." },
           "locations": [
             {
               "physicalLocation": {
@@ -7518,12 +8542,12 @@
                   "uri": "libc/string.h",
                   "uriBaseId": "FRAMAC_SHARE"
                 },
-                "region": {
-                  "startLine": 202,
-                  "startColumn": 30,
-                  "endLine": 202,
-                  "endColumn": 66,
-                  "byteLength": 36
+                "region": {
+                  "startLine": 402,
+                  "startColumn": 13,
+                  "endLine": 402,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -7533,7 +8557,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_valid_string." },
+          "message": { "text": "behavior no_stringp in function strsep." },
           "locations": [
             {
               "physicalLocation": {
@@ -7542,11 +8566,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 203,
-                  "startColumn": 33,
-                  "endLine": 203,
-                  "endColumn": 59,
-                  "byteLength": 26
+                  "startLine": 402,
+                  "startColumn": 13,
+                  "endLine": 402,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -7556,7 +8580,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null." },
+          "message": { "text": "behavior valid_stringp in function strsep." },
           "locations": [
             {
               "physicalLocation": {
@@ -7565,11 +8589,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 206,
-                  "startColumn": 25,
-                  "endLine": 206,
-                  "endColumn": 41,
-                  "byteLength": 16
+                  "startLine": 402,
+                  "startColumn": 13,
+                  "endLine": 402,
+                  "endColumn": 19,
+                  "byteLength": 6
                 }
               }
             }
@@ -7579,7 +8603,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_null_or_same_base." },
+          "message": { "text": "valid_stringp." },
           "locations": [
             {
               "physicalLocation": {
@@ -7588,11 +8612,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 209,
-                  "startColumn": 4,
-                  "endLine": 209,
-                  "endColumn": 60,
-                  "byteLength": 56
+                  "startLine": 390,
+                  "startColumn": 26,
+                  "endLine": 390,
+                  "endColumn": 41,
+                  "byteLength": 15
                 }
               }
             }
@@ -7602,7 +8626,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "assigns clause in function strrchr." },
+          "message": { "text": "valid_string_stringp." },
           "locations": [
             {
               "physicalLocation": {
@@ -7611,11 +8635,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 211,
-                  "startColumn": 13,
-                  "endLine": 211,
-                  "endColumn": 20,
-                  "byteLength": 7
+                  "startLine": 398,
+                  "startColumn": 35,
+                  "endLine": 398,
+                  "endColumn": 57,
+                  "byteLength": 22
                 }
               }
             }
@@ -7625,9 +8649,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function strrchr."
-          },
+          "message": { "text": "stringp_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -7636,11 +8658,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 198,
-                  "startColumn": 12,
-                  "endLine": 198,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 394,
+                  "startColumn": 26,
+                  "endLine": 394,
+                  "endColumn": 43,
+                  "byteLength": 17
                 }
               }
             }
@@ -7650,7 +8672,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "behavior default! in function strsep." },
+          "message": { "text": "stringp_not_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -7659,11 +8681,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 350,
-                  "startColumn": 13,
-                  "endLine": 350,
-                  "endColumn": 19,
-                  "byteLength": 6
+                  "startLine": 397,
+                  "startColumn": 30,
+                  "endLine": 397,
+                  "endColumn": 47,
+                  "byteLength": 17
                 }
               }
             }
@@ -7673,7 +8695,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_stringp." },
+          "message": { "text": "result_null." },
           "locations": [
             {
               "physicalLocation": {
@@ -7682,11 +8704,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 345,
-                  "startColumn": 35,
-                  "endLine": 345,
-                  "endColumn": 76,
-                  "byteLength": 41
+                  "startLine": 395,
+                  "startColumn": 25,
+                  "endLine": 395,
+                  "endColumn": 41,
+                  "byteLength": 16
                 }
               }
             }
@@ -7696,7 +8718,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "valid_string_delim." },
+          "message": { "text": "valid_result." },
           "locations": [
             {
               "physicalLocation": {
@@ -7705,11 +8727,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 346,
-                  "startColumn": 33,
-                  "endLine": 346,
-                  "endColumn": 57,
-                  "byteLength": 24
+                  "startLine": 399,
+                  "startColumn": 26,
+                  "endLine": 400,
+                  "endColumn": 69,
+                  "byteLength": 94
                 }
               }
             }
@@ -7728,11 +8750,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 347,
-                  "startColumn": 12,
-                  "endLine": 347,
-                  "endColumn": 20,
-                  "byteLength": 8
+                  "startLine": 391,
+                  "startColumn": 10,
+                  "endLine": 391,
+                  "endColumn": 23,
+                  "byteLength": 13
                 }
               }
             }
@@ -7743,7 +8765,7 @@
           "kind": "pass",
           "level": "none",
           "message": {
-            "text": "from clause of term *stringp in function strsep."
+            "text": "from clause of term *(*(stringp + (0 ..))) in function strsep."
           },
           "locations": [
             {
@@ -7753,11 +8775,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 347,
-                  "startColumn": 12,
-                  "endLine": 347,
-                  "endColumn": 20,
-                  "byteLength": 8
+                  "startLine": 391,
+                  "startColumn": 10,
+                  "endLine": 391,
+                  "endColumn": 23,
+                  "byteLength": 13
                 }
               }
             }
@@ -7778,10 +8800,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 348,
-                  "startColumn": 12,
-                  "endLine": 348,
-                  "endColumn": 19,
+                  "startLine": 392,
+                  "startColumn": 10,
+                  "endLine": 392,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -7801,9 +8823,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 539,
+                  "startLine": 647,
                   "startColumn": 13,
-                  "endLine": 539,
+                  "endLine": 647,
                   "endColumn": 22,
                   "byteLength": 9
                 }
@@ -7824,9 +8846,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 535,
+                  "startLine": 643,
                   "startColumn": 33,
-                  "endLine": 535,
+                  "endLine": 643,
                   "endColumn": 60,
                   "byteLength": 27
                 }
@@ -7847,9 +8869,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 536,
+                  "startLine": 644,
                   "startColumn": 35,
-                  "endLine": 536,
+                  "endLine": 644,
                   "endColumn": 51,
                   "byteLength": 16
                 }
@@ -7870,9 +8892,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 537,
+                  "startLine": 645,
                   "startColumn": 33,
-                  "endLine": 537,
+                  "endLine": 645,
                   "endColumn": 59,
                   "byteLength": 26
                 }
@@ -7893,9 +8915,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 539,
+                  "startLine": 647,
                   "startColumn": 13,
-                  "endLine": 539,
+                  "endLine": 647,
                   "endColumn": 22,
                   "byteLength": 9
                 }
@@ -7918,9 +8940,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 534,
+                  "startLine": 642,
                   "startColumn": 12,
-                  "endLine": 534,
+                  "endLine": 642,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -7941,9 +8963,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 226,
+                  "startLine": 244,
                   "startColumn": 14,
-                  "endLine": 226,
+                  "endLine": 244,
                   "endColumn": 20,
                   "byteLength": 6
                 }
@@ -7964,10 +8986,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 220,
-                  "startColumn": 29,
-                  "endLine": 220,
-                  "endColumn": 49,
+                  "startLine": 238,
+                  "startColumn": 27,
+                  "endLine": 238,
+                  "endColumn": 47,
                   "byteLength": 20
                 }
               }
@@ -7987,10 +9009,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 221,
-                  "startColumn": 34,
-                  "endLine": 221,
-                  "endColumn": 59,
+                  "startLine": 239,
+                  "startColumn": 32,
+                  "endLine": 239,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -8010,10 +9032,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 224,
-                  "startColumn": 28,
-                  "endLine": 224,
-                  "endColumn": 53,
+                  "startLine": 242,
+                  "startColumn": 26,
+                  "endLine": 242,
+                  "endColumn": 51,
                   "byteLength": 25
                 }
               }
@@ -8033,36 +9055,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 222,
-                  "startColumn": 12,
-                  "endLine": 222,
-                  "endColumn": 19,
-                  "byteLength": 7
-                }
-              }
-            }
-          ]
-        },
-        {
-          "ruleId": "user-spec",
-          "kind": "pass",
-          "level": "none",
-          "message": {
-            "text": "from clause of term \\result in function strspn."
-          },
-          "locations": [
-            {
-              "physicalLocation": {
-                "artifactLocation": {
-                  "uri": "libc/string.h",
-                  "uriBaseId": "FRAMAC_SHARE"
-                },
-                "region": {
-                  "startLine": 222,
-                  "startColumn": 12,
-                  "endLine": 222,
-                  "endColumn": 19,
-                  "byteLength": 7
+                  "startLine": 244,
+                  "startColumn": 14,
+                  "endLine": 244,
+                  "endColumn": 20,
+                  "byteLength": 6
                 }
               }
             }
@@ -8083,10 +9080,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 223,
-                  "startColumn": 12,
-                  "endLine": 223,
-                  "endColumn": 19,
+                  "startLine": 240,
+                  "startColumn": 10,
+                  "endLine": 240,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -8106,9 +9103,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 245,
+                  "startLine": 268,
                   "startColumn": 13,
-                  "endLine": 245,
+                  "endLine": 268,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -8129,10 +9126,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 236,
-                  "startColumn": 36,
-                  "endLine": 236,
-                  "endColumn": 63,
+                  "startLine": 258,
+                  "startColumn": 34,
+                  "endLine": 258,
+                  "endColumn": 61,
                   "byteLength": 27
                 }
               }
@@ -8152,10 +9149,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 237,
-                  "startColumn": 34,
-                  "endLine": 237,
-                  "endColumn": 59,
+                  "startLine": 259,
+                  "startColumn": 32,
+                  "endLine": 259,
+                  "endColumn": 57,
                   "byteLength": 25
                 }
               }
@@ -8175,11 +9172,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 241,
+                  "startLine": 263,
                   "startColumn": 4,
-                  "endLine": 243,
-                  "endColumn": 59,
-                  "byteLength": 141
+                  "endLine": 266,
+                  "endColumn": 57,
+                  "byteLength": 164
                 }
               }
             }
@@ -8198,9 +9195,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 245,
+                  "startLine": 268,
                   "startColumn": 13,
-                  "endLine": 245,
+                  "endLine": 268,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -8223,10 +9220,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 238,
-                  "startColumn": 12,
-                  "endLine": 238,
-                  "endColumn": 19,
+                  "startLine": 260,
+                  "startColumn": 10,
+                  "endLine": 260,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
@@ -8246,9 +9243,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -8269,9 +9266,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -8292,9 +9289,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -8315,9 +9312,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 261,
+                  "startLine": 287,
                   "startColumn": 31,
-                  "endLine": 261,
+                  "endLine": 287,
                   "endColumn": 55,
                   "byteLength": 24
                 }
@@ -8325,6 +9322,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 288,
+                  "startColumn": 23,
+                  "endLine": 288,
+                  "endColumn": 77,
+                  "byteLength": 54
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -8338,9 +9358,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 274,
+                  "startLine": 301,
                   "startColumn": 6,
-                  "endLine": 276,
+                  "endLine": 303,
                   "endColumn": 70,
                   "byteLength": 120
                 }
@@ -8361,11 +9381,57 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 284,
-                  "startColumn": 29,
-                  "endLine": 284,
-                  "endColumn": 53,
-                  "byteLength": 24
+                  "startLine": 315,
+                  "startColumn": 29,
+                  "endLine": 315,
+                  "endColumn": 53,
+                  "byteLength": 24
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "s_not_null." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 299,
+                  "startColumn": 24,
+                  "endLine": 299,
+                  "endColumn": 34,
+                  "byteLength": 10
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "s_null." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 314,
+                  "startColumn": 20,
+                  "endLine": 314,
+                  "endColumn": 30,
+                  "byteLength": 10
                 }
               }
             }
@@ -8375,7 +9441,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "s_not_null." },
+          "message": { "text": "result_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -8384,11 +9450,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 272,
-                  "startColumn": 24,
-                  "endLine": 272,
-                  "endColumn": 34,
-                  "byteLength": 10
+                  "startLine": 309,
+                  "startColumn": 6,
+                  "endLine": 310,
+                  "endColumn": 74,
+                  "byteLength": 94
                 }
               }
             }
@@ -8398,7 +9464,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "s_null." },
+          "message": { "text": "ptr_valid_string." },
           "locations": [
             {
               "physicalLocation": {
@@ -8407,11 +9473,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 283,
-                  "startColumn": 20,
-                  "endLine": 283,
-                  "endColumn": 30,
-                  "byteLength": 10
+                  "startLine": 311,
+                  "startColumn": 30,
+                  "endLine": 311,
+                  "endColumn": 64,
+                  "byteLength": 34
                 }
               }
             }
@@ -8421,7 +9487,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_subset." },
+          "message": { "text": "ptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -8430,11 +9496,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 280,
+                  "startLine": 312,
                   "startColumn": 27,
-                  "endLine": 280,
-                  "endColumn": 72,
-                  "byteLength": 45
+                  "endLine": 312,
+                  "endColumn": 71,
+                  "byteLength": 44
                 }
               }
             }
@@ -8444,7 +9510,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "ptr_subset." },
+          "message": { "text": "result_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -8453,11 +9519,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 281,
-                  "startColumn": 24,
-                  "endLine": 281,
-                  "endColumn": 57,
-                  "byteLength": 33
+                  "startLine": 325,
+                  "startColumn": 6,
+                  "endLine": 327,
+                  "endColumn": 65,
+                  "byteLength": 122
                 }
               }
             }
@@ -8467,7 +9533,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_subset." },
+          "message": { "text": "ptr_valid_string." },
           "locations": [
             {
               "physicalLocation": {
@@ -8476,11 +9542,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 293,
-                  "startColumn": 27,
-                  "endLine": 294,
-                  "endColumn": 72,
-                  "byteLength": 92
+                  "startLine": 328,
+                  "startColumn": 30,
+                  "endLine": 328,
+                  "endColumn": 64,
+                  "byteLength": 34
                 }
               }
             }
@@ -8490,7 +9556,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "ptr_subset." },
+          "message": { "text": "ptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -8499,11 +9565,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 295,
-                  "startColumn": 24,
-                  "endLine": 295,
-                  "endColumn": 77,
-                  "byteLength": 53
+                  "startLine": 330,
+                  "startColumn": 6,
+                  "endLine": 330,
+                  "endColumn": 70,
+                  "byteLength": 64
                 }
               }
             }
@@ -8522,9 +9588,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 262,
+                  "startLine": 289,
                   "startColumn": 10,
-                  "endLine": 262,
+                  "endLine": 289,
                   "endColumn": 16,
                   "byteLength": 6
                 }
@@ -8545,9 +9611,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 277,
+                  "startLine": 304,
                   "startColumn": 12,
-                  "endLine": 277,
+                  "endLine": 304,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -8568,9 +9634,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 285,
+                  "startLine": 316,
                   "startColumn": 12,
-                  "endLine": 285,
+                  "endLine": 316,
                   "endColumn": 32,
                   "byteLength": 20
                 }
@@ -8593,9 +9659,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 262,
+                  "startLine": 289,
                   "startColumn": 10,
-                  "endLine": 262,
+                  "endLine": 289,
                   "endColumn": 16,
                   "byteLength": 6
                 }
@@ -8618,9 +9684,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 264,
+                  "startLine": 291,
                   "startColumn": 10,
-                  "endLine": 264,
+                  "endLine": 291,
                   "endColumn": 30,
                   "byteLength": 20
                 }
@@ -8643,9 +9709,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 266,
+                  "startLine": 293,
                   "startColumn": 10,
-                  "endLine": 266,
+                  "endLine": 293,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -8668,9 +9734,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 268,
+                  "startLine": 295,
                   "startColumn": 10,
-                  "endLine": 268,
+                  "endLine": 295,
                   "endColumn": 25,
                   "byteLength": 15
                 }
@@ -8693,9 +9759,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 277,
+                  "startLine": 304,
                   "startColumn": 12,
-                  "endLine": 277,
+                  "endLine": 304,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -8718,9 +9784,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 278,
+                  "startLine": 306,
                   "startColumn": 12,
-                  "endLine": 278,
+                  "endLine": 306,
                   "endColumn": 18,
                   "byteLength": 6
                 }
@@ -8743,9 +9809,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 279,
+                  "startLine": 307,
                   "startColumn": 12,
-                  "endLine": 279,
+                  "endLine": 307,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -8768,9 +9834,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 285,
+                  "startLine": 316,
                   "startColumn": 12,
-                  "endLine": 285,
+                  "endLine": 316,
                   "endColumn": 32,
                   "byteLength": 20
                 }
@@ -8793,9 +9859,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 288,
+                  "startLine": 319,
                   "startColumn": 12,
-                  "endLine": 288,
+                  "endLine": 319,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -8818,9 +9884,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 291,
+                  "startLine": 322,
                   "startColumn": 12,
-                  "endLine": 291,
+                  "endLine": 322,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -8841,9 +9907,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -8864,9 +9930,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 299,
+                  "startLine": 334,
                   "startColumn": 13,
-                  "endLine": 299,
+                  "endLine": 334,
                   "endColumn": 19,
                   "byteLength": 6
                 }
@@ -8887,9 +9953,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -8910,9 +9976,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -8933,9 +9999,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -8956,9 +10022,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 302,
+                  "startLine": 337,
                   "startColumn": 31,
-                  "endLine": 302,
+                  "endLine": 337,
                   "endColumn": 55,
                   "byteLength": 24
                 }
@@ -8966,6 +10032,29 @@
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 338,
+                  "startColumn": 23,
+                  "endLine": 339,
+                  "endColumn": 49,
+                  "byteLength": 104
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -8979,9 +10068,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 303,
+                  "startLine": 340,
                   "startColumn": 26,
-                  "endLine": 303,
+                  "endLine": 340,
                   "endColumn": 41,
                   "byteLength": 15
                 }
@@ -9002,9 +10091,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 316,
+                  "startLine": 353,
                   "startColumn": 6,
-                  "endLine": 318,
+                  "endLine": 355,
                   "endColumn": 70,
                   "byteLength": 120
                 }
@@ -9025,9 +10114,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 327,
+                  "startLine": 367,
                   "startColumn": 29,
-                  "endLine": 327,
+                  "endLine": 367,
                   "endColumn": 46,
                   "byteLength": 17
                 }
@@ -9048,9 +10137,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 328,
+                  "startLine": 368,
                   "startColumn": 37,
-                  "endLine": 328,
+                  "endLine": 368,
                   "endColumn": 58,
                   "byteLength": 21
                 }
@@ -9071,9 +10160,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 314,
+                  "startLine": 351,
                   "startColumn": 24,
-                  "endLine": 314,
+                  "endLine": 351,
                   "endColumn": 34,
                   "byteLength": 10
                 }
@@ -9094,9 +10183,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 326,
+                  "startLine": 366,
                   "startColumn": 20,
-                  "endLine": 326,
+                  "endLine": 366,
                   "endColumn": 30,
                   "byteLength": 10
                 }
@@ -9108,7 +10197,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_subset." },
+          "message": { "text": "result_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -9117,11 +10206,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 322,
-                  "startColumn": 27,
-                  "endLine": 322,
-                  "endColumn": 72,
-                  "byteLength": 45
+                  "startLine": 361,
+                  "startColumn": 6,
+                  "endLine": 362,
+                  "endColumn": 74,
+                  "byteLength": 94
                 }
               }
             }
@@ -9131,7 +10220,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "initialization." },
+          "message": { "text": "saveptr_valid_string." },
           "locations": [
             {
               "physicalLocation": {
@@ -9140,11 +10229,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 323,
-                  "startColumn": 28,
-                  "endLine": 323,
-                  "endColumn": 49,
-                  "byteLength": 21
+                  "startLine": 363,
+                  "startColumn": 34,
+                  "endLine": 363,
+                  "endColumn": 61,
+                  "byteLength": 27
                 }
               }
             }
@@ -9154,7 +10243,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "saveptr_subset." },
+          "message": { "text": "saveptr_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -9163,11 +10252,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 324,
-                  "startColumn": 28,
-                  "endLine": 324,
-                  "endColumn": 54,
-                  "byteLength": 26
+                  "startLine": 364,
+                  "startColumn": 31,
+                  "endLine": 364,
+                  "endColumn": 68,
+                  "byteLength": 37
                 }
               }
             }
@@ -9177,7 +10266,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "result_subset." },
+          "message": { "text": "result_same_base." },
           "locations": [
             {
               "physicalLocation": {
@@ -9186,11 +10275,11 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 337,
-                  "startColumn": 27,
-                  "endLine": 338,
-                  "endColumn": 65,
-                  "byteLength": 85
+                  "startLine": 378,
+                  "startColumn": 6,
+                  "endLine": 380,
+                  "endColumn": 58,
+                  "byteLength": 115
                 }
               }
             }
@@ -9200,7 +10289,7 @@
           "ruleId": "user-spec",
           "kind": "pass",
           "level": "none",
-          "message": { "text": "saveptr_subset." },
+          "message": { "text": "saveptr_valid_string." },
           "locations": [
             {
               "physicalLocation": {
@@ -9209,11 +10298,34 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 339,
-                  "startColumn": 28,
-                  "endLine": 339,
-                  "endColumn": 67,
-                  "byteLength": 39
+                  "startLine": 381,
+                  "startColumn": 34,
+                  "endLine": 381,
+                  "endColumn": 61,
+                  "byteLength": 27
+                }
+              }
+            }
+          ]
+        },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "saveptr_same_base." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 383,
+                  "startColumn": 6,
+                  "endLine": 383,
+                  "endColumn": 56,
+                  "byteLength": 50
                 }
               }
             }
@@ -9232,9 +10344,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 304,
+                  "startLine": 341,
                   "startColumn": 10,
-                  "endLine": 304,
+                  "endLine": 341,
                   "endColumn": 16,
                   "byteLength": 6
                 }
@@ -9255,9 +10367,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 319,
+                  "startLine": 356,
                   "startColumn": 12,
-                  "endLine": 319,
+                  "endLine": 356,
                   "endColumn": 20,
                   "byteLength": 8
                 }
@@ -9278,9 +10390,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 369,
                   "startColumn": 12,
-                  "endLine": 329,
+                  "endLine": 369,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -9303,9 +10415,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 304,
+                  "startLine": 341,
                   "startColumn": 10,
-                  "endLine": 304,
+                  "endLine": 341,
                   "endColumn": 16,
                   "byteLength": 6
                 }
@@ -9328,9 +10440,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 306,
+                  "startLine": 343,
                   "startColumn": 10,
-                  "endLine": 306,
+                  "endLine": 343,
                   "endColumn": 25,
                   "byteLength": 15
                 }
@@ -9353,9 +10465,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 308,
+                  "startLine": 345,
                   "startColumn": 10,
-                  "endLine": 308,
+                  "endLine": 345,
                   "endColumn": 17,
                   "byteLength": 7
                 }
@@ -9378,9 +10490,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 310,
+                  "startLine": 347,
                   "startColumn": 10,
-                  "endLine": 310,
+                  "endLine": 347,
                   "endColumn": 18,
                   "byteLength": 8
                 }
@@ -9403,9 +10515,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 319,
+                  "startLine": 356,
                   "startColumn": 12,
-                  "endLine": 319,
+                  "endLine": 356,
                   "endColumn": 20,
                   "byteLength": 8
                 }
@@ -9428,9 +10540,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 320,
+                  "startLine": 358,
                   "startColumn": 12,
-                  "endLine": 320,
+                  "endLine": 358,
                   "endColumn": 18,
                   "byteLength": 6
                 }
@@ -9453,9 +10565,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 321,
+                  "startLine": 359,
                   "startColumn": 12,
-                  "endLine": 321,
+                  "endLine": 359,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -9478,9 +10590,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 329,
+                  "startLine": 369,
                   "startColumn": 12,
-                  "endLine": 329,
+                  "endLine": 369,
                   "endColumn": 27,
                   "byteLength": 15
                 }
@@ -9503,9 +10615,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 332,
+                  "startLine": 372,
                   "startColumn": 12,
-                  "endLine": 332,
+                  "endLine": 372,
                   "endColumn": 20,
                   "byteLength": 8
                 }
@@ -9528,9 +10640,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 335,
+                  "startLine": 375,
                   "startColumn": 12,
-                  "endLine": 335,
+                  "endLine": 375,
                   "endColumn": 19,
                   "byteLength": 7
                 }
@@ -9551,9 +10663,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -9574,9 +10686,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 343,
+                  "startLine": 387,
                   "startColumn": 13,
-                  "endLine": 343,
+                  "endLine": 387,
                   "endColumn": 21,
                   "byteLength": 8
                 }
@@ -9597,9 +10709,9 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 479,
+                  "startLine": 545,
                   "startColumn": 14,
-                  "endLine": 479,
+                  "endLine": 545,
                   "endColumn": 21,
                   "byteLength": 7
                 }
@@ -9620,10 +10732,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 474,
-                  "startColumn": 25,
-                  "endLine": 474,
-                  "endColumn": 48,
+                  "startLine": 539,
+                  "startColumn": 23,
+                  "endLine": 539,
+                  "endColumn": 46,
                   "byteLength": 23
                 }
               }
@@ -9643,16 +10755,39 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 475,
-                  "startColumn": 31,
-                  "endLine": 475,
-                  "endColumn": 53,
+                  "startLine": 540,
+                  "startColumn": 29,
+                  "endLine": 540,
+                  "endColumn": 51,
                   "byteLength": 22
                 }
               }
             }
           ]
         },
+        {
+          "ruleId": "user-spec",
+          "kind": "pass",
+          "level": "none",
+          "message": { "text": "separation." },
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "uri": "libc/string.h",
+                  "uriBaseId": "FRAMAC_SHARE"
+                },
+                "region": {
+                  "startLine": 541,
+                  "startColumn": 23,
+                  "endLine": 541,
+                  "endColumn": 72,
+                  "byteLength": 49
+                }
+              }
+            }
+          ]
+        },
         {
           "ruleId": "user-spec",
           "kind": "pass",
@@ -9666,10 +10801,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 476,
-                  "startColumn": 12,
-                  "endLine": 476,
-                  "endColumn": 26,
+                  "startLine": 542,
+                  "startColumn": 10,
+                  "endLine": 542,
+                  "endColumn": 24,
                   "byteLength": 14
                 }
               }
@@ -9691,10 +10826,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 476,
-                  "startColumn": 12,
-                  "endLine": 476,
-                  "endColumn": 26,
+                  "startLine": 542,
+                  "startColumn": 10,
+                  "endLine": 542,
+                  "endColumn": 24,
                   "byteLength": 14
                 }
               }
@@ -9716,10 +10851,10 @@
                   "uriBaseId": "FRAMAC_SHARE"
                 },
                 "region": {
-                  "startLine": 477,
-                  "startColumn": 12,
-                  "endLine": 477,
-                  "endColumn": 19,
+                  "startLine": 543,
+                  "startColumn": 10,
+                  "endLine": 543,
+                  "endColumn": 17,
                   "byteLength": 7
                 }
               }
diff --git a/src/plugins/metrics/css_html.ml b/src/plugins/metrics/css_html.ml
index 822cb30908ea66a59be43af5f78fed82fe3dd223..1e534218a75c1fe7de800e196c275e6dd3e8ee5b 100644
--- a/src/plugins/metrics/css_html.ml
+++ b/src/plugins/metrics/css_html.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/css_html.mli b/src/plugins/metrics/css_html.mli
index f715d63d7697e9092df0fc87ff8b46605d232030..ef9750554b17b7bf62bbaaef4f2e7dab28f90bf0 100644
--- a/src/plugins/metrics/css_html.mli
+++ b/src/plugins/metrics/css_html.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/dune b/src/plugins/metrics/dune
index 4dc059de651db28f1581bd40ae537a6cf138426e..7e5e59dbfa6417da79218596a6de4059693b7d76 100644
--- a/src/plugins/metrics/dune
+++ b/src/plugins/metrics/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/metrics/dune-project b/src/plugins/metrics/dune-project
index d2f5c14849d133fee04172d185cee0e1adb6ecfb..20a7ca65aae8af9c21f051761a0d6979cde76bfd 100644
--- a/src/plugins/metrics/dune-project
+++ b/src/plugins/metrics/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/metrics/gui/dune b/src/plugins/metrics/gui/dune
index 2f84b46dea3635d6cecbd7c22152b3780b30c54d..d4f2f02c1336901fff3f1b8b3f39411350012bb7 100644
--- a/src/plugins/metrics/gui/dune
+++ b/src/plugins/metrics/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/metrics/gui/metrics_gui_panels.ml b/src/plugins/metrics/gui/metrics_gui_panels.ml
index bb01d7715d841b05b7e2cc40be7663ccae301451..288dfc06e3aac19aa48bb45a527012ca09ba7e32 100644
--- a/src/plugins/metrics/gui/metrics_gui_panels.ml
+++ b/src/plugins/metrics/gui/metrics_gui_panels.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/gui/metrics_gui_panels.mli b/src/plugins/metrics/gui/metrics_gui_panels.mli
index 81eb6b625d1b32807a3517b10d4d2f271f998204..9d74e34f2fece5315771b2e3ddb83dddafcf1e69 100644
--- a/src/plugins/metrics/gui/metrics_gui_panels.mli
+++ b/src/plugins/metrics/gui/metrics_gui_panels.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/gui/register_gui.ml b/src/plugins/metrics/gui/register_gui.ml
index 120ddcc43f947450eaae7852d088555b8c63c20b..2037eea2c5b0d1999fc65ef7b8b97dfeb96bdba2 100644
--- a/src/plugins/metrics/gui/register_gui.ml
+++ b/src/plugins/metrics/gui/register_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/gui/register_gui.mli b/src/plugins/metrics/gui/register_gui.mli
index fae5d3d1a3c51da3c1c58b8e97957a3615a72222..e6f7edcaa1ec6359c950c20fdc5df8ecbe5a41f8 100644
--- a/src/plugins/metrics/gui/register_gui.mli
+++ b/src/plugins/metrics/gui/register_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics.ml b/src/plugins/metrics/metrics.ml
index 448e10c5e633948825d7167b7086b1f75e3e6cd1..e4c672f740c1143af1c484a3a5ea13d53cd55cf1 100644
--- a/src/plugins/metrics/metrics.ml
+++ b/src/plugins/metrics/metrics.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics.mli b/src/plugins/metrics/metrics.mli
index 6548d4c95ab332a85d55f43bb22f695d09873db0..5b8d413e1bfbf30bcc77d4f61d49f8a8a9912318 100644
--- a/src/plugins/metrics/metrics.mli
+++ b/src/plugins/metrics/metrics.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_acsl.ml b/src/plugins/metrics/metrics_acsl.ml
index a351c3b1f807b3c7cdd23358da369a9e58e02dcb..cd3bd66a369de8bca84eb87d54445bd10f180511 100644
--- a/src/plugins/metrics/metrics_acsl.ml
+++ b/src/plugins/metrics/metrics_acsl.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_acsl.mli b/src/plugins/metrics/metrics_acsl.mli
index fadecc2abd1f457a1e252a9be795ae396687d3e3..e862d5db73706e8e4802b23f9be68fabc4b5ecc0 100644
--- a/src/plugins/metrics/metrics_acsl.mli
+++ b/src/plugins/metrics/metrics_acsl.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_base.ml b/src/plugins/metrics/metrics_base.ml
index 777bce0fd9b012002a2b9da61bb378a01dad7207..375f7cb30c2654817c8f3ae1af926ad79aa28580 100644
--- a/src/plugins/metrics/metrics_base.ml
+++ b/src/plugins/metrics/metrics_base.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_base.mli b/src/plugins/metrics/metrics_base.mli
index d9a0116fa4bda37af68bbd3dba4f800f29554d90..fc936059da2c78563ba0f730ec29effa96cd272f 100644
--- a/src/plugins/metrics/metrics_base.mli
+++ b/src/plugins/metrics/metrics_base.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_cabs.ml b/src/plugins/metrics/metrics_cabs.ml
index 68e31adfb475ca8bae565508d658a61c735c2ca5..cd604b283ee4fa2b2c150f4c20f07fa18dee2c33 100644
--- a/src/plugins/metrics/metrics_cabs.ml
+++ b/src/plugins/metrics/metrics_cabs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_cabs.mli b/src/plugins/metrics/metrics_cabs.mli
index c68598ff68e997947057690eaf1269e8562c350a..d41a3af5bfa932d55c5e8ed56820be7decfeff47 100644
--- a/src/plugins/metrics/metrics_cabs.mli
+++ b/src/plugins/metrics/metrics_cabs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_cilast.ml b/src/plugins/metrics/metrics_cilast.ml
index b41f94bd66328586891891cc561ee6fac25a6ab8..f2f587d755fbeb32642fe6bd8feac62a3528292f 100644
--- a/src/plugins/metrics/metrics_cilast.ml
+++ b/src/plugins/metrics/metrics_cilast.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_cilast.mli b/src/plugins/metrics/metrics_cilast.mli
index c56b8a16007f853327caf2dffef2add745d3466d..1f773fed616e18def52140b17b4d7633bcdea633 100644
--- a/src/plugins/metrics/metrics_cilast.mli
+++ b/src/plugins/metrics/metrics_cilast.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_coverage.ml b/src/plugins/metrics/metrics_coverage.ml
index d74cf7809b8e40b0697ce7de52c4cf87add4e061..65869cb9c48cf4b91b671ab749ecee409325d707 100644
--- a/src/plugins/metrics/metrics_coverage.ml
+++ b/src/plugins/metrics/metrics_coverage.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_coverage.mli b/src/plugins/metrics/metrics_coverage.mli
index d6a929acbca4cc0b506173fa64f85640192970c7..1d9b435b6ffc06da7f688e2229430a33f1d33cae 100644
--- a/src/plugins/metrics/metrics_coverage.mli
+++ b/src/plugins/metrics/metrics_coverage.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_parameters.ml b/src/plugins/metrics/metrics_parameters.ml
index 50890cdefa8aa8f844481698b242d47f910767b0..1f3fcf66c282a0aeb5dd8de23ff1d8f310b317d6 100644
--- a/src/plugins/metrics/metrics_parameters.ml
+++ b/src/plugins/metrics/metrics_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_parameters.mli b/src/plugins/metrics/metrics_parameters.mli
index f230e96f3c64d63a1235177ea3bf85e13a5a8640..e991f35bd3d6798f738bb5e1a20c3c72f6d9f508 100644
--- a/src/plugins/metrics/metrics_parameters.mli
+++ b/src/plugins/metrics/metrics_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_pivot.ml b/src/plugins/metrics/metrics_pivot.ml
index 4a291642b00b8aa919bbadd5df6134d002b3e26c..ad4dd73a4323a618db05592d560f038ce6552947 100644
--- a/src/plugins/metrics/metrics_pivot.ml
+++ b/src/plugins/metrics/metrics_pivot.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/metrics_pivot.mli b/src/plugins/metrics/metrics_pivot.mli
index d1c83402dea25062426d1c308d1eb44082212d09..75131cf534997a950083d36f0be19c09b0c6082f 100644
--- a/src/plugins/metrics/metrics_pivot.mli
+++ b/src/plugins/metrics/metrics_pivot.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/register.ml b/src/plugins/metrics/register.ml
index a307a06e68aab06c7783b10303ddac970d8ee536..0e3ddeea6475341a98445533a1246c85d5c72650 100644
--- a/src/plugins/metrics/register.ml
+++ b/src/plugins/metrics/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/metrics/register.mli b/src/plugins/metrics/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/metrics/register.mli
+++ b/src/plugins/metrics/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/nonterm/Nonterm.ml b/src/plugins/nonterm/Nonterm.ml
index 758664419aea8358afdaa53510a03b4231c4901e..ee0eac6516e9b76914a0193f0d9d2427f2102690 100644
--- a/src/plugins/nonterm/Nonterm.ml
+++ b/src/plugins/nonterm/Nonterm.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/nonterm/dune b/src/plugins/nonterm/dune
index 7e65237e8986219f0a311538851bdc3a4384a11e..e247a4876d3e01db49063b39d73adeb93adc9fef 100644
--- a/src/plugins/nonterm/dune
+++ b/src/plugins/nonterm/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/nonterm/dune-project b/src/plugins/nonterm/dune-project
index e63208e5f08046b02126fde57a2e3336ef6d6cf9..7d1cb7fef846c2e6f0279879a962db3a7861b1b9 100644
--- a/src/plugins/nonterm/dune-project
+++ b/src/plugins/nonterm/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/nonterm/nonterm_run.ml b/src/plugins/nonterm/nonterm_run.ml
index 9f01ac05a016a02c824b9ff66af216f565138df6..38f418c1f5eacacb1cffe77e5cf22bcc7493a209 100644
--- a/src/plugins/nonterm/nonterm_run.ml
+++ b/src/plugins/nonterm/nonterm_run.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/nonterm/nonterm_run.mli b/src/plugins/nonterm/nonterm_run.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/nonterm/nonterm_run.mli
+++ b/src/plugins/nonterm/nonterm_run.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/nonterm/tests/nonterm/oracle/builtin_with_body.res.oracle b/src/plugins/nonterm/tests/nonterm/oracle/builtin_with_body.res.oracle
index 1866eb49d1dd8e5c1ab086ec0c765ef766ad2400..e0fb8cec55ceec779710c8ece757a934d707f16b 100644
--- a/src/plugins/nonterm/tests/nonterm/oracle/builtin_with_body.res.oracle
+++ b/src/plugins/nonterm/tests/nonterm/oracle/builtin_with_body.res.oracle
@@ -11,7 +11,7 @@
   function memcpy: precondition 'valid_src' got status valid.
 [eva] builtin_with_body.c:13: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Recording results for main
 [eva] Done for function main
diff --git a/src/plugins/nonterm/tests/nonterm/oracle/n6.res.oracle b/src/plugins/nonterm/tests/nonterm/oracle/n6.res.oracle
index 5b78c301d31e30534c20cc182e2fa6795a6f57c2..dfee7778a152739f0973a6b45f4669ecfc83e52c 100644
--- a/src/plugins/nonterm/tests/nonterm/oracle/n6.res.oracle
+++ b/src/plugins/nonterm/tests/nonterm/oracle/n6.res.oracle
@@ -8,7 +8,7 @@
 [eva] n6.c:9: function memcpy: precondition 'valid_dest' got status valid.
 [eva] n6.c:9: function memcpy: precondition 'valid_src' got status valid.
 [eva] n6.c:9: function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Recording results for main
 [eva] Done for function main
diff --git a/src/plugins/obfuscator/Obfuscator.ml b/src/plugins/obfuscator/Obfuscator.ml
index 5955bc86c2f77bd92f5422c73f8f7659c6233ebc..e3c93ccf49b99e2b3c87ea05a804892b915aacb2 100644
--- a/src/plugins/obfuscator/Obfuscator.ml
+++ b/src/plugins/obfuscator/Obfuscator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/dictionary.ml b/src/plugins/obfuscator/dictionary.ml
index 5abaedcc5daef57d9beb2d66310d9cbc14bb02e1..f2d58722d8900cd36c0605b2937be85c2f004a80 100644
--- a/src/plugins/obfuscator/dictionary.ml
+++ b/src/plugins/obfuscator/dictionary.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/dictionary.mli b/src/plugins/obfuscator/dictionary.mli
index f8eb45c5646e26a5658869855175dd689d58f561..e17fdf7666b44f2354815932854839a831a39950 100644
--- a/src/plugins/obfuscator/dictionary.mli
+++ b/src/plugins/obfuscator/dictionary.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/dune b/src/plugins/obfuscator/dune
index af464f3364cc4bac758598800e7131ac1bc3dd4f..9d00c8ac31f12674432c7f8a5780601caa4ec5c1 100644
--- a/src/plugins/obfuscator/dune
+++ b/src/plugins/obfuscator/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/obfuscator/dune-project b/src/plugins/obfuscator/dune-project
index 5a768df161081905841dfeebdd40322d6b4247f2..7e12f3ca6b45b301b24bfe241feefbe536ed3345 100644
--- a/src/plugins/obfuscator/dune-project
+++ b/src/plugins/obfuscator/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/obfuscator/obfuscate.ml b/src/plugins/obfuscator/obfuscate.ml
index 15836739fa4b32e075c28ef6cc6b50abcff3fe77..07c6240a105b5e029b39665cd2a876c48602b761 100644
--- a/src/plugins/obfuscator/obfuscate.ml
+++ b/src/plugins/obfuscator/obfuscate.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/obfuscate.mli b/src/plugins/obfuscator/obfuscate.mli
index 34a05c45327586ccd0fc4a8b1e94f221c7453282..20d283b4c3d1c6d33b5f978b9f498f30d69114c4 100644
--- a/src/plugins/obfuscator/obfuscate.mli
+++ b/src/plugins/obfuscator/obfuscate.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/obfuscator_kind.ml b/src/plugins/obfuscator/obfuscator_kind.ml
index 7c30875949e95aefe60a6c0e181d381eaf1b4ae5..954e95a5d37df66a0be7b8fdf4d06a7bbd537f03 100644
--- a/src/plugins/obfuscator/obfuscator_kind.ml
+++ b/src/plugins/obfuscator/obfuscator_kind.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/obfuscator_kind.mli b/src/plugins/obfuscator/obfuscator_kind.mli
index 0aa8d42805d5ea72d0ef68b6a34c31f5939b4c29..f9013fce1a44300027f3896f39530c1c5a12e420 100644
--- a/src/plugins/obfuscator/obfuscator_kind.mli
+++ b/src/plugins/obfuscator/obfuscator_kind.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/obfuscator_register.ml b/src/plugins/obfuscator/obfuscator_register.ml
index 43e491e743369265dab22b83a593ca0db5be9728..f6e55215a3445ef5aeca638554780e6c805f0c22 100644
--- a/src/plugins/obfuscator/obfuscator_register.ml
+++ b/src/plugins/obfuscator/obfuscator_register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/obfuscator_register.mli b/src/plugins/obfuscator/obfuscator_register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/obfuscator/obfuscator_register.mli
+++ b/src/plugins/obfuscator/obfuscator_register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/options.ml b/src/plugins/obfuscator/options.ml
index 543e01357fe8ec59138a0831a43466da6617cf16..107695d075135494301dfa983e439104bafa7744 100644
--- a/src/plugins/obfuscator/options.ml
+++ b/src/plugins/obfuscator/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/obfuscator/options.mli b/src/plugins/obfuscator/options.mli
index d85323329109a32cccd63598490520c372ff1d84..4c2b975be24b26f2852b9681a25fe95064565855 100644
--- a/src/plugins/obfuscator/options.mli
+++ b/src/plugins/obfuscator/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/occurrence/Occurrence.ml b/src/plugins/occurrence/Occurrence.ml
index 86b75e17c47e43eff75ebe9f74e754b1974c5faa..1d9f20748c4ee4477e21561d29bad195ec1d0856 100644
--- a/src/plugins/occurrence/Occurrence.ml
+++ b/src/plugins/occurrence/Occurrence.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/occurrence/dune b/src/plugins/occurrence/dune
index 7afdbd4ac8aa78b9fcbd3644fc93d5d1eae028f4..1ce41d95a97d7bc5f1028924ac33e66cb597568c 100644
--- a/src/plugins/occurrence/dune
+++ b/src/plugins/occurrence/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/occurrence/dune-project b/src/plugins/occurrence/dune-project
index a2d92871bc2a078fd075bb3807ec82d0f51b30d7..abad7d868135d5851385bcd30dc5a5a254191eb8 100644
--- a/src/plugins/occurrence/dune-project
+++ b/src/plugins/occurrence/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/occurrence/gui/dune b/src/plugins/occurrence/gui/dune
index 1b02c8f6f93adf31b0a1378583e77912ec90521c..58b6621469031ad2d5955e9c188938baa0f14e10 100644
--- a/src/plugins/occurrence/gui/dune
+++ b/src/plugins/occurrence/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/occurrence/gui/register_gui.ml b/src/plugins/occurrence/gui/register_gui.ml
index b86f099d03e1628fc0c9c3b52fb137f54cb3c399..e89ede1e0df277bdcb5e18325ef858de0e48ea1e 100644
--- a/src/plugins/occurrence/gui/register_gui.ml
+++ b/src/plugins/occurrence/gui/register_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/occurrence/gui/register_gui.mli b/src/plugins/occurrence/gui/register_gui.mli
index f3e8dd447fe78aa89f2f1146782cbc57886cac94..bfc16d8e8e77af3bd526d16a9e23deb8e14fa044 100644
--- a/src/plugins/occurrence/gui/register_gui.mli
+++ b/src/plugins/occurrence/gui/register_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/occurrence/options.ml b/src/plugins/occurrence/options.ml
index ad84762c0ea8b728b6443f327a0ae407c01e4a23..3fbb4a4dad51e8b8d51ef282f2ae6d14180b08a9 100644
--- a/src/plugins/occurrence/options.ml
+++ b/src/plugins/occurrence/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/occurrence/options.mli b/src/plugins/occurrence/options.mli
index 2e8ab74de0efc4f13cb4af12c8a0ba79ba7dea63..2b052b9f62fad80c798435547139c985a2c93ca8 100644
--- a/src/plugins/occurrence/options.mli
+++ b/src/plugins/occurrence/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/occurrence/register.ml b/src/plugins/occurrence/register.ml
index de26bd8c7fab55bac5544a16cd096fd20dd5ddf0..11fbd67ece7bd48f85f5523089dcf78ea7f9b006 100644
--- a/src/plugins/occurrence/register.ml
+++ b/src/plugins/occurrence/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/occurrence/register.mli b/src/plugins/occurrence/register.mli
index bcbe3faaf1ad904b5779385f8eaa50ffb5f92127..ff2b6927ad6bab1e4a66cfbe5a4c74dc605144d2 100644
--- a/src/plugins/occurrence/register.mli
+++ b/src/plugins/occurrence/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/Pdg.ml b/src/plugins/pdg/Pdg.ml
index 32c290649e99f3c7d8b9d30e964c0c1a7e12aebb..cee8d8ad6d2b9073d812fcbc016d3c9dcf36a0fc 100644
--- a/src/plugins/pdg/Pdg.ml
+++ b/src/plugins/pdg/Pdg.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/Pdg.mli b/src/plugins/pdg/Pdg.mli
index 29de360afbd5049d3207b58830fe6d81e8688dcc..bf6d5030695e7ea452c028449da4758a4987ff40 100644
--- a/src/plugins/pdg/Pdg.mli
+++ b/src/plugins/pdg/Pdg.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/annot.ml b/src/plugins/pdg/annot.ml
index 91addd104f3ffcc3a7375744e31077b1061c4723..41f406d05057c3d1d9c85fc89b1aa2dd156873fb 100644
--- a/src/plugins/pdg/annot.ml
+++ b/src/plugins/pdg/annot.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/annot.mli b/src/plugins/pdg/annot.mli
index 4e1add9760e3ae2ebd455ab912501962cabe2523..3823c363f436e0c6940acdb0030e7a2a7b1a52df 100644
--- a/src/plugins/pdg/annot.mli
+++ b/src/plugins/pdg/annot.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/api.ml b/src/plugins/pdg/api.ml
index 716e2d19c504ac5f6a5cfd7b7acc1e549ba1d8bd..fa7cb672cdf682271f3d138f01f101c83f16b7c2 100644
--- a/src/plugins/pdg/api.ml
+++ b/src/plugins/pdg/api.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/api.mli b/src/plugins/pdg/api.mli
index 1b955222eb12bdb99dc32c7834985fb5cd1c2f99..478354d16d8b4bea067a566a7cd3ad2cb1181eb9 100644
--- a/src/plugins/pdg/api.mli
+++ b/src/plugins/pdg/api.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/build.ml b/src/plugins/pdg/build.ml
index c2268d86d6f084325f3b5cf096c294eb2e2749d5..bdccee5836e557ea4846f59ea604965968945a16 100644
--- a/src/plugins/pdg/build.ml
+++ b/src/plugins/pdg/build.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/build.mli b/src/plugins/pdg/build.mli
index 48780eb4f114824b4c9427f0d2b0beaf66a2da7b..261ded458c1e984dc5eb1ee9b46c4f227b0a8a64 100644
--- a/src/plugins/pdg/build.mli
+++ b/src/plugins/pdg/build.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/ctrlDpds.ml b/src/plugins/pdg/ctrlDpds.ml
index 3cd71174729c50e6a541cf5128c53d9b8a2520b1..f97396cb07f53803af360f6b662ccd3b7f1cb434 100644
--- a/src/plugins/pdg/ctrlDpds.ml
+++ b/src/plugins/pdg/ctrlDpds.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/ctrlDpds.mli b/src/plugins/pdg/ctrlDpds.mli
index 97f5bd2d8f1643f5bfaeda12f3c6f5c29623ee5a..eba5925999142b8e8bc8860e015c96de430c1c0f 100644
--- a/src/plugins/pdg/ctrlDpds.mli
+++ b/src/plugins/pdg/ctrlDpds.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/dune b/src/plugins/pdg/dune
index ef59c0a573c37994967fd9f8d327eab5ed11d0a3..3b0f89e77742a2f1810e6e5f6fc975ba7d50db87 100644
--- a/src/plugins/pdg/dune
+++ b/src/plugins/pdg/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/pdg/dune-project b/src/plugins/pdg/dune-project
index c0892d544ee246bcb701672dc6027123924d3d31..0744d8178c448c27d94fdb22355e5b09b841ae0f 100644
--- a/src/plugins/pdg/dune-project
+++ b/src/plugins/pdg/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/pdg/marks.ml b/src/plugins/pdg/marks.ml
index e4dc898d5297da072144674451a526c840840649..6e04330db712659f1b0c758f00675c70ee34e271 100644
--- a/src/plugins/pdg/marks.ml
+++ b/src/plugins/pdg/marks.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/marks.mli b/src/plugins/pdg/marks.mli
index 34ca2126defffd84ce8e24cfd07f3d4fcfe6a199..0047bee2c036dd2ae8167222363d85f2d2e07f8a 100644
--- a/src/plugins/pdg/marks.mli
+++ b/src/plugins/pdg/marks.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_parameters.ml b/src/plugins/pdg/pdg_parameters.ml
index 7683b8e13b4f3eefa4a47a8b4ba98c74b2e0bb3c..74b7fdf990ef1a81c8b1ddc8163a574d6900ec5e 100644
--- a/src/plugins/pdg/pdg_parameters.ml
+++ b/src/plugins/pdg/pdg_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_parameters.mli b/src/plugins/pdg/pdg_parameters.mli
index bf5c9d7673ebffeb4cc6e781fc458df61b23d149..29bd7ae11870a45c9e9fd7aa637de54568c94900 100644
--- a/src/plugins/pdg/pdg_parameters.mli
+++ b/src/plugins/pdg/pdg_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_state.ml b/src/plugins/pdg/pdg_state.ml
index 139b983c77f4665cb0b52126b922eb32428015ba..107558e916e121d3bd1bec3a54dcaf8315c3c346 100644
--- a/src/plugins/pdg/pdg_state.ml
+++ b/src/plugins/pdg/pdg_state.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_state.mli b/src/plugins/pdg/pdg_state.mli
index af4f97d4a71e908f65cfc60a1e2d03bd53351fed..b97d63d8141c7af5371702d3b6a5adb5dd9ee9d7 100644
--- a/src/plugins/pdg/pdg_state.mli
+++ b/src/plugins/pdg/pdg_state.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_tbl.ml b/src/plugins/pdg/pdg_tbl.ml
index 7fc187415b95d2b3abb07c0ee76718f7938370ef..ac3f29e291ffc6baa6b76f2229cd09f81d6553f7 100644
--- a/src/plugins/pdg/pdg_tbl.ml
+++ b/src/plugins/pdg/pdg_tbl.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_tbl.mli b/src/plugins/pdg/pdg_tbl.mli
index c073a4745ce7da67f957465b1c1d3129a27ff85d..ed6366e70a24a1cfc0eaac1798d57888cf515b6f 100644
--- a/src/plugins/pdg/pdg_tbl.mli
+++ b/src/plugins/pdg/pdg_tbl.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_types/Pdg_types.ml b/src/plugins/pdg/pdg_types/Pdg_types.ml
index 63075691d2d6f93a302a479f4d3211a6cb0af733..a211988956b0b986a1e2964a0795ec77e06a078d 100644
--- a/src/plugins/pdg/pdg_types/Pdg_types.ml
+++ b/src/plugins/pdg/pdg_types/Pdg_types.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_types/Pdg_types.mli b/src/plugins/pdg/pdg_types/Pdg_types.mli
index cf265966751730de3c06e61546a2f62c8c171702..733c33da339630567f611b05e8ce9c10d25b0c71 100644
--- a/src/plugins/pdg/pdg_types/Pdg_types.mli
+++ b/src/plugins/pdg/pdg_types/Pdg_types.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_types/dune b/src/plugins/pdg/pdg_types/dune
index bab550eb3cd86984fefcfc8d7bd3f3b49e5bd278..22519183d1e7160e16edb56c337412bf964fa629 100644
--- a/src/plugins/pdg/pdg_types/dune
+++ b/src/plugins/pdg/pdg_types/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/pdg/pdg_types/pdgIndex.ml b/src/plugins/pdg/pdg_types/pdgIndex.ml
index c1bdbcd98b4287850f03046919d75b3935d43d86..8c1b067f059525330687bfb37c3b0d067e308765 100644
--- a/src/plugins/pdg/pdg_types/pdgIndex.ml
+++ b/src/plugins/pdg/pdg_types/pdgIndex.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_types/pdgIndex.mli b/src/plugins/pdg/pdg_types/pdgIndex.mli
index dcd56c5e085df3ac6797371b0f56ac8a74026c1e..dae915fde520d75f0823fb0ead7e02e602d7f7ee 100644
--- a/src/plugins/pdg/pdg_types/pdgIndex.mli
+++ b/src/plugins/pdg/pdg_types/pdgIndex.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_types/pdgMarks.ml b/src/plugins/pdg/pdg_types/pdgMarks.ml
index 42c1e64ccf693891ad32ff30a59f0f7ec1c58b32..c526bdce38203eacd7b2f86e514e9c794a7eb668 100644
--- a/src/plugins/pdg/pdg_types/pdgMarks.ml
+++ b/src/plugins/pdg/pdg_types/pdgMarks.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_types/pdgMarks.mli b/src/plugins/pdg/pdg_types/pdgMarks.mli
index 83da74b96c7720b0dff0881e24acf35724c7c989..272c416fc7cabe5a6ef0640c761f9aa69cc982e7 100644
--- a/src/plugins/pdg/pdg_types/pdgMarks.mli
+++ b/src/plugins/pdg/pdg_types/pdgMarks.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_types/pdgTypes.ml b/src/plugins/pdg/pdg_types/pdgTypes.ml
index 9c851e7aaf76fc085d0bca76dabe551232ffcfc8..63d4d75fa4aa3546661734dfac0ac081a9ea271c 100644
--- a/src/plugins/pdg/pdg_types/pdgTypes.ml
+++ b/src/plugins/pdg/pdg_types/pdgTypes.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/pdg_types/pdgTypes.mli b/src/plugins/pdg/pdg_types/pdgTypes.mli
index da5332590fa560f319aa89f5c636963f62bd5838..471ea88e60f52e702563a9ce609853d83e35cbe9 100644
--- a/src/plugins/pdg/pdg_types/pdgTypes.mli
+++ b/src/plugins/pdg/pdg_types/pdgTypes.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/register.ml b/src/plugins/pdg/register.ml
index ad9c1cd40ad09cb28026fe7989fdd01b3332e20d..8656d0a6b10ddfa2d6b6166c0ea89d2dc5f32be5 100644
--- a/src/plugins/pdg/register.ml
+++ b/src/plugins/pdg/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/register.mli b/src/plugins/pdg/register.mli
index c47ae68b90b12ca03d73d42f6d5ecf9794326d02..58f5841bcd862638a7c2f709530936a15c34dde8 100644
--- a/src/plugins/pdg/register.mli
+++ b/src/plugins/pdg/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/sets.ml b/src/plugins/pdg/sets.ml
index e1687c943edbb04a3976399bd82185835f539cb7..aea8384d1dd02dd5b3917a0aba2d7df0f3c326e6 100644
--- a/src/plugins/pdg/sets.ml
+++ b/src/plugins/pdg/sets.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/pdg/sets.mli b/src/plugins/pdg/sets.mli
index daf583cbdba908e370a64030a9fed20ed54a8beb..43c66a6c179727ba662b66236c2c503fb0d60536 100644
--- a/src/plugins/pdg/sets.mli
+++ b/src/plugins/pdg/sets.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/postdominators/compute.ml b/src/plugins/postdominators/compute.ml
index ab96a7e74196a14d5b7c96a01b25e54a97cde8fd..412f32507fee6f978b7e4b3feef22125a8d83ced 100644
--- a/src/plugins/postdominators/compute.ml
+++ b/src/plugins/postdominators/compute.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/postdominators/compute.mli b/src/plugins/postdominators/compute.mli
index aa82a20dd8d7fd47b7b3777679c24052daf036bb..748beef0b5befe142b16cc1c5be3914cb17076a3 100644
--- a/src/plugins/postdominators/compute.mli
+++ b/src/plugins/postdominators/compute.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/postdominators/dune b/src/plugins/postdominators/dune
index 8a6ab690eab5946a4c1d21bd93e8f2f35eff9df6..421fca944bc2d73026038f7d29130d72774b1638 100644
--- a/src/plugins/postdominators/dune
+++ b/src/plugins/postdominators/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/postdominators/dune-project b/src/plugins/postdominators/dune-project
index 1fa99e6a2981d8106509db81c07ef341ef496d6b..1e31a2576fcd8d1781fb5f0acb3d25170369928a 100644
--- a/src/plugins/postdominators/dune-project
+++ b/src/plugins/postdominators/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/postdominators/postdominators.ml b/src/plugins/postdominators/postdominators.ml
index a182c3e78447f00fabd1964aaa995dc243975f53..2ebc1ad9268c9e9928d1672c77fa3a01b8a733f6 100644
--- a/src/plugins/postdominators/postdominators.ml
+++ b/src/plugins/postdominators/postdominators.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/postdominators/postdominators.mli b/src/plugins/postdominators/postdominators.mli
index 8cdf15ad26b4273e437a3d35677270afc3bd37f9..a8786b4ba531903728c94deaaeb82595a9eb136a 100644
--- a/src/plugins/postdominators/postdominators.mli
+++ b/src/plugins/postdominators/postdominators.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/postdominators/postdominators_parameters.ml b/src/plugins/postdominators/postdominators_parameters.ml
index 66638ed0dc5514ee0052a222d907f7401c5fe18e..86b00634e808aaa74d8a21b2d9a393674f277b16 100644
--- a/src/plugins/postdominators/postdominators_parameters.ml
+++ b/src/plugins/postdominators/postdominators_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/postdominators/postdominators_parameters.mli b/src/plugins/postdominators/postdominators_parameters.mli
index 83bd8d599da9bbe915c050842e6c3e4f58f04e19..4e54382d36affe9be855bd01bb4107ecb88dff61 100644
--- a/src/plugins/postdominators/postdominators_parameters.mli
+++ b/src/plugins/postdominators/postdominators_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/postdominators/print.ml b/src/plugins/postdominators/print.ml
index 698fee2b848a3bac44d0fe767a1dbe93ab9b372a..40534a9b8b9c1b6411d257dffbab7843f0ca9cd7 100644
--- a/src/plugins/postdominators/print.ml
+++ b/src/plugins/postdominators/print.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/postdominators/print.mli b/src/plugins/postdominators/print.mli
index 61469ebf9e7b0def7bb52d3b4603f14d61a3f65c..95ea33441d9327a25a8634300dd49225e542b2dd 100644
--- a/src/plugins/postdominators/print.mli
+++ b/src/plugins/postdominators/print.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/Reduc.ml b/src/plugins/reduc/Reduc.ml
index ecc387f5e288a2a0482aa2edd666ec15de6135ab..b7edac8ed47558f64bce71b195e956b4c5d1a4c9 100644
--- a/src/plugins/reduc/Reduc.ml
+++ b/src/plugins/reduc/Reduc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/collect.ml b/src/plugins/reduc/collect.ml
index d2192b5df7a315447423a7d94d1c17d608232d0e..a250d6543e42e979378c319cdc720667dfabdb8b 100644
--- a/src/plugins/reduc/collect.ml
+++ b/src/plugins/reduc/collect.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/collect.mli b/src/plugins/reduc/collect.mli
index aad6e5a53134aa33e747c47cadc3cd0ef98d36a1..3a802b03f13f40d2822c69d092193d418306885b 100644
--- a/src/plugins/reduc/collect.mli
+++ b/src/plugins/reduc/collect.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/dune b/src/plugins/reduc/dune
index 5e988de32a89f062c6fde4eb0285e4f700f18bfa..66658c4a2799b60b5e1e706d6896da659d5ce9aa 100644
--- a/src/plugins/reduc/dune
+++ b/src/plugins/reduc/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/reduc/dune-project b/src/plugins/reduc/dune-project
index 7de282180a443b5e041713ae5a2a394b0642a728..08fc91aff446161630c9ef2b51fd4fea07777f89 100644
--- a/src/plugins/reduc/dune-project
+++ b/src/plugins/reduc/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/reduc/hyp.ml b/src/plugins/reduc/hyp.ml
index eeb438a1ef5a1a748091f78b5c69047c65f9f3e6..9e050cc72bcb4a5fc964d03aad67415582503354 100644
--- a/src/plugins/reduc/hyp.ml
+++ b/src/plugins/reduc/hyp.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/hyp.mli b/src/plugins/reduc/hyp.mli
index ce1ea351ca73d79e7fe4bf8a814e8c4bfa379b27..2b3ee2e8cb4bbeae580d15b70b4e0c1d8e3694a5 100644
--- a/src/plugins/reduc/hyp.mli
+++ b/src/plugins/reduc/hyp.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/misc.ml b/src/plugins/reduc/misc.ml
index 3da9fa5a851d0ecf20b91675bf46e110ed3323df..c945c12aaff8285fd4616d8433ba13b460ab97f5 100644
--- a/src/plugins/reduc/misc.ml
+++ b/src/plugins/reduc/misc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/misc.mli b/src/plugins/reduc/misc.mli
index 3d98ba57f8edcea3dd72f776d14607b350545417..dce91fdc76ee67147faa89e9bf8589c18c81b4d4 100644
--- a/src/plugins/reduc/misc.mli
+++ b/src/plugins/reduc/misc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/reduc_options.ml b/src/plugins/reduc/reduc_options.ml
index 9dafed56b371b4e4fc02ec2f39d4133af6a90160..47aca38f8eea97e8d03624e3760343fdb0802f83 100644
--- a/src/plugins/reduc/reduc_options.ml
+++ b/src/plugins/reduc/reduc_options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/reduc_options.mli b/src/plugins/reduc/reduc_options.mli
index 2666c14c3e765ed1a6b4ee68768c5427496b88ba..fe268f3ad69614610e565966a0fc50f54a5a5e84 100644
--- a/src/plugins/reduc/reduc_options.mli
+++ b/src/plugins/reduc/reduc_options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/register.ml b/src/plugins/reduc/register.ml
index 8c2c574f6b5bfcaed5c8bbdfd8c1a8a402c93483..bf49cb6cba8e9ad0533d59b79140c52aa46131a2 100644
--- a/src/plugins/reduc/register.ml
+++ b/src/plugins/reduc/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/register.mli b/src/plugins/reduc/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/reduc/register.mli
+++ b/src/plugins/reduc/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/value2acsl.ml b/src/plugins/reduc/value2acsl.ml
index ac2cbe954bfd88a95e938fa3aa3e26464ca80ac5..90a2a02c580f0b1b4fb28511856f691f5f0e5622 100644
--- a/src/plugins/reduc/value2acsl.ml
+++ b/src/plugins/reduc/value2acsl.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/reduc/value2acsl.mli b/src/plugins/reduc/value2acsl.mli
index a9104dc6a465ed6a2125b8ad822f984e58796a7d..05409a9d57e6b92b6e8cb1879a358102fc5b4381 100644
--- a/src/plugins/reduc/value2acsl.mli
+++ b/src/plugins/reduc/value2acsl.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/region/README.md b/src/plugins/region/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..02ef85649b845ce45b73275529c752a6e80524ae
--- /dev/null
+++ b/src/plugins/region/README.md
@@ -0,0 +1,58 @@
+# Region Analysis plugin (experimental)
+
+Region is a plugin for Frama-C that implements a new memory and alias analysis.
+This is a work in progress in early design stage.
+
+## Usage
+
+Regions are computed on demand from the registered Server requests.
+
+Command line option `-region` can be used to compute regions for all functions
+and dump on output the result analysis. With `-region-debug 1+` typed accesses
+are also reported.
+
+An API will be provided soon.
+
+## Annotations
+
+Behavior annotation `\region::region` and code annotation `\region::alias`
+can be used to specify supplementary aliases and to name regions.
+The syntax is the same:
+
+```
+//@ region [A:] lv, … , lv ;
+```
+
+Such a specification put all the l-values in the same region. A name can be
+given to the region, and reused later to put other l-values on the same region.
+Several regions can be specified in a single annotation.
+
+Unnamed regions from different annotations refer to _different_ regions unless
+they are aliased by sharing common l-values.
+
+L-values in region annotations use a similar syntax to ACSL terms.
+However, array access and pointer arithmetics must be specified with unlimited range, eg. `a[..]` or `*(p+(..))`.
+
+A syntax for specifying field aliasing and input/output array shapes will be provided soon.
+
+## Current Limitations
+
+Currently, ACSL contracts are not taken into account except for region
+annotations. Function calls are totally incomplete, and aliases that would be
+produces by function calls are not _yet_ taken into account. Use `//@alias` code-annotations as a temporary work around.
+
+## Ivette Support
+
+The Region Analysis component can be used to compute and visualize regions.
+Tooltips print access types to each regions.
+
+Colored regions means the following:
+ - _Red_ regions are those accessed with incompatible types
+ - _Yellow_ regions are constant pointers
+ - _Orange_ regions are written pointers
+ - _Green_ regions are RW regions
+ - _Pink_ regions are written-only regions (might be drop)
+ - _Grey_ regions are read-only regions (constant, no memory)
+
+Regions access and localization of currently selected marker will be
+provided soon.
diff --git a/src/plugins/region/Region.ml b/src/plugins/region/Region.ml
new file mode 100644
index 0000000000000000000000000000000000000000..2b8fce64aec5b2f1ee6fe423ba7feb30eaf6ff69
--- /dev/null
+++ b/src/plugins/region/Region.ml
@@ -0,0 +1,25 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* -------------------------------------------------------------------------- *)
+(* --- Region Analysis API                                                --- *)
+(* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/region/Region.mli b/src/plugins/region/Region.mli
new file mode 100644
index 0000000000000000000000000000000000000000..d9615a6fffe2e821fdbe14da1d0eed73de2bfc9c
--- /dev/null
+++ b/src/plugins/region/Region.mli
@@ -0,0 +1,23 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(** Interface for the Region plug-in. *)
diff --git a/src/plugins/region/access.ml b/src/plugins/region/access.ml
new file mode 100644
index 0000000000000000000000000000000000000000..5baa3096b5d7d24b5bcb9d4dd089fef236646816
--- /dev/null
+++ b/src/plugins/region/access.ml
@@ -0,0 +1,83 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+open Cil_datatype
+
+type acs =
+  | Exp of Stmt.t * exp
+  | Lval of Stmt.t * lval
+  | Init of Stmt.t * varinfo
+  | Term of Property.t * term_lval
+
+let compare (a : acs) (b : acs) : int =
+  match a, b with
+  | Init(sa,xa), Init(sb,xb) ->
+    let cmp = Stmt.compare sa sb in
+    if cmp <> 0 then cmp else Varinfo.compare xa xb
+  | Init _ , _ -> (-1)
+  | _ , Init _ -> (+1)
+
+  | Lval(sa,la), Lval(sb,lb) ->
+    let cmp = Stmt.compare sa sb in
+    if cmp <> 0 then cmp else Lval.compare la lb
+  | Lval _ , _ -> (-1)
+  | _ , Lval _ -> (+1)
+
+  | Exp(sa,ea), Exp(sb,eb) ->
+    let cmp = Stmt.compare sa sb in
+    if cmp <> 0 then cmp else Exp.compare ea eb
+  | Exp _ , _ -> (-1)
+  | _ , Exp _ -> (+1)
+
+  | Term(sa,ta), Term(sb,tb) ->
+    let cmp = Property.compare sa sb in
+    if cmp <> 0 then cmp else Term_lval.compare ta tb
+
+let pstmt fmt (s : stmt) =
+  match s.labels with
+  | Label(l,_,_)::_ -> Format.pp_print_string fmt l
+  | _ ->
+    let loc, _ = Stmt.loc s in
+    Format.fprintf fmt "L%d" loc.pos_lnum
+
+let pretty fmt = function
+  | Init(s,x) ->
+    Format.fprintf fmt "%a@%a" Varinfo.pretty x pstmt s
+  | Exp(s,e) ->
+    Format.fprintf fmt "%a@%a" Exp.pretty e pstmt s
+  | Lval(s,l) ->
+    Format.fprintf fmt "%a@%a" Lval.pretty l pstmt s
+  | Term(s,l) ->
+    Format.fprintf fmt "%a@%s" Term_lval.pretty l
+      (Property.Names.get_prop_name_id s)
+
+let typeof = function
+  | Init(_,x) -> x.vtype
+  | Lval(_,lv) -> Cil.typeOfLval lv
+  | Exp(_,e) -> Cil.typeOf e
+  | Term(_,lt) ->
+    match Cil.typeOfTermLval lt with
+    | Ctype ty -> ty
+    | _ -> Cil.voidType
+
+module Set = Set.Make(struct type t = acs let compare = compare end)
diff --git a/src/plugins/region/access.mli b/src/plugins/region/access.mli
new file mode 100644
index 0000000000000000000000000000000000000000..cadb24bc098a9b3908f67308bf3cd0bc39f1b7be
--- /dev/null
+++ b/src/plugins/region/access.mli
@@ -0,0 +1,36 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+
+type acs =
+  | Exp of stmt * exp
+  | Lval of stmt * lval
+  | Init of stmt * varinfo
+  | Term of Property.t * term_lval
+
+val compare : acs -> acs -> int
+val pretty : Format.formatter -> acs -> unit
+
+val typeof : acs -> typ
+
+module Set : Set.S with type elt = acs
diff --git a/src/plugins/region/analysis.ml b/src/plugins/region/analysis.ml
new file mode 100644
index 0000000000000000000000000000000000000000..b64c6571bc83fbfa648159d1701a12bf6e597a33
--- /dev/null
+++ b/src/plugins/region/analysis.ml
@@ -0,0 +1,74 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_datatype
+
+(* -------------------------------------------------------------------------- *)
+(* ---  Projectification                                                  --- *)
+(* -------------------------------------------------------------------------- *)
+
+module DOMAIN : Datatype.S with type t = Code.domain =
+  Datatype.Make
+    (struct
+      type t = Code.domain
+      include Datatype.Undefined
+      let name = "Region.Analysis.MEMORY"
+      let mem_project = Datatype.never_any_project
+      let reprs =
+        let m = Memory.create () in
+        Code.[{ map = m; body = Stmt.Map.empty ; spec = Property.Map.empty }]
+    end)
+
+module STATE = State_builder.Hashtbl(Kernel_function.Hashtbl)(DOMAIN)
+    (struct
+      let size = 0
+      let name = "Region.Analysis.STATE"
+      let dependencies = [Ast.self]
+    end)
+
+(* -------------------------------------------------------------------------- *)
+(* ---  Memoized Access                                                   --- *)
+(* -------------------------------------------------------------------------- *)
+
+let find = STATE.find
+
+let get kf =
+  try STATE.find kf with Not_found ->
+    Options.feedback ~ontty:`Transient "Function %a…" Kernel_function.pretty kf ;
+    let domain = Code.domain kf in
+    STATE.add kf domain ;
+    Options.result "@[<v 2>Function %a:%t@]@."
+      Kernel_function.pretty kf
+      begin fun fmt ->
+        Memory.iter domain.map
+          begin fun r ->
+            Format.pp_print_newline fmt () ;
+            Memory.pp_region fmt r ;
+          end
+      end ;
+    domain
+
+let compute kf = ignore @@ get kf
+
+let add_hook f = STATE.add_hook_on_change (fun _ -> f())
+
+(* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/region/analysis.mli b/src/plugins/region/analysis.mli
new file mode 100644
index 0000000000000000000000000000000000000000..e9279b47420bc40e87fef33265d8a9e86a15febc
--- /dev/null
+++ b/src/plugins/region/analysis.mli
@@ -0,0 +1,35 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+
+(** @raises Not_found *)
+val find : kernel_function -> Code.domain
+
+(** Memoized *)
+val get : kernel_function -> Code.domain
+
+(** Memoized *)
+val compute : kernel_function -> unit
+
+(** Hook on update *)
+val add_hook : (unit -> unit) -> unit
diff --git a/src/plugins/region/annot.ml b/src/plugins/region/annot.ml
new file mode 100644
index 0000000000000000000000000000000000000000..825ebf5ce8f52c2fd19a66e55adf11ef979814a4
--- /dev/null
+++ b/src/plugins/region/annot.ml
@@ -0,0 +1,256 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Logic_ptree
+open Cil_types
+open Cil_datatype
+
+(* -------------------------------------------------------------------------- *)
+(* ---  Region Specifications                                             --- *)
+(* -------------------------------------------------------------------------- *)
+
+type path = {
+  loc : location ;
+  typ : typ ;
+  step: step ;
+}
+
+and step =
+  | Var of varinfo
+  | AddrOf of path
+  | Star of path
+  | Index of path
+  | Shift of path
+  | Field of path * fieldinfo
+  | Cast of typ * path
+
+type region = {
+  rname: string option ;
+  rpath: path list ;
+}
+
+(* -------------------------------------------------------------------------- *)
+(* ---  Printers                                                          --- *)
+(* -------------------------------------------------------------------------- *)
+
+let atomic = function
+  | Var _ | AddrOf _ | Star _ | Index _ | Field _ -> true
+  | Shift _ | Cast _ -> false
+
+let rec pp_step fmt = function
+  | Var x -> Varinfo.pretty fmt x
+  | Field(p,f) -> pfield p f fmt
+  | Index a -> Format.fprintf fmt "%a[..]" pp_atom a
+  | Shift a -> Format.fprintf fmt "%a+(..)" pp_atom a
+  | Star a -> Format.fprintf fmt "*%a" pp_atom a
+  | AddrOf a -> Format.fprintf fmt "&%a" pp_atom a
+  | Cast(t,a) -> Format.fprintf fmt "(%a)@,%a" Typ.pretty t pp_atom a
+
+and pfield p fd fmt =
+  match p.step with
+  | Star p -> Format.fprintf fmt "%a->%a" pp_atom p Fieldinfo.pretty fd
+  | _ -> Format.fprintf fmt "%a.%a" pp_atom p Fieldinfo.pretty fd
+
+and pp_atom fmt a =
+  if atomic a.step then pp_step fmt a.step
+  else Format.fprintf fmt "@[<hov 2>(%a)@]" pp_step a.step
+
+and pp_path fmt a = pp_step fmt a.step
+
+let pp_named fmt = function None -> () | Some a -> Format.fprintf fmt "%s: " a
+
+let pp_region fmt r =
+  match r.rpath with
+  | [] -> Format.pp_print_string fmt "\null"
+  | p::ps ->
+    begin
+      Format.fprintf fmt "@[<hov 2>" ;
+      pp_named fmt r.rname ;
+      pp_path fmt p ;
+      List.iter (Format.fprintf fmt ",@ %a" pp_path) ps ;
+      Format.fprintf fmt "@]" ;
+    end
+
+let pp_regions fmt = function
+  | [] -> Format.pp_print_string fmt "\null"
+  | r::rs ->
+    begin
+      Format.fprintf fmt "@[<hv 0>" ;
+      pp_region fmt r ;
+      List.iter (Format.fprintf fmt ",@ %a" pp_region) rs ;
+      Format.fprintf fmt "@]" ;
+    end
+
+(* -------------------------------------------------------------------------- *)
+(* ---  Parsers                                                           --- *)
+(* -------------------------------------------------------------------------- *)
+
+type env = {
+  context: Logic_typing.typing_context ;
+  mutable named: string option ;
+  mutable paths: path list ;
+  mutable specs: region list ;
+}
+
+let error (env:env) ~loc msg = env.context.error loc msg
+
+let parse_variable (env:env) ~loc x =
+  match env.context.find_var x with
+  | { lv_origin = Some v } -> { loc ; typ = v.vtype ; step = Var v }
+  | _ -> error env ~loc "Variable '%s' is not a C-variable" x
+
+let parse_field env ~loc comp f =
+  try Cil.getCompField comp f with Not_found ->
+    error env ~loc "No field '%s' in compound type '%s'" f comp.cname
+
+let parse_compinfo env ~loc typ =
+  try Cil.getCompType typ with Not_found ->
+    error env ~loc "Expected compound type for term"
+
+let parse_lrange (env: env) (e : lexpr) =
+  match e.lexpr_node with
+  | PLrange(None,None) -> ()
+  | _ ->
+    error env ~loc:e.lexpr_loc "Unexpected index (use unspecified range only)"
+
+let parse_typ env ~loc t =
+  let open Logic_typing in
+  let g = env.context in
+  let t = g.logic_type g loc g.pre_state t in
+  match Logic_utils.unroll_type t with
+  | Ctype typ -> typ
+  | _ -> error env ~loc "C-type expected for casting l-values"
+
+let rec parse_lpath (env:env) (e: lexpr) =
+  let loc = e.lexpr_loc in
+  match e.lexpr_node with
+  | PLvar x -> parse_variable env ~loc x
+  | PLunop( Ustar , p ) ->
+    let lv = parse_lpath env p in
+    if Cil.isPointerType lv.typ then
+      let te = Cil.typeOf_pointed lv.typ in
+      { loc ; step = Star lv ; typ = te }
+    else
+      error env ~loc "Pointer-type expected for operator '*'"
+  | PLunop( Uamp , p ) ->
+    let lv = parse_lpath env p in
+    let typ = TPtr( lv.typ , [] ) in
+    { loc ; step = AddrOf lv ; typ }
+  | PLbinop( p , Badd , rg ) ->
+    parse_lrange env rg ;
+    let { typ } as lv = parse_lpath env p in
+    if Cil.isPointerType typ then
+      { loc ; step = Shift lv ; typ = typ }
+    else
+    if Cil.isArrayType typ then
+      let te = Cil.typeOf_array_elem typ in
+      { loc ; step = Shift lv ; typ = TPtr(te,[]) }
+    else
+      error env ~loc "Pointer-type expected for operator '+'"
+  | PLdot( p , f ) ->
+    let lv = parse_lpath env p in
+    let comp = parse_compinfo env ~loc:lv.loc lv.typ in
+    let fd = parse_field env ~loc comp f in
+    { loc ; step = Field(lv,fd) ; typ = fd.ftype }
+  | PLarrow( p , f ) ->
+    let sp = { lexpr_loc = loc ; lexpr_node = PLunop(Ustar,p) } in
+    let pf = { lexpr_loc = loc ; lexpr_node = PLdot(sp,f) } in
+    parse_lpath env pf
+  | PLarrget( p , rg ) ->
+    parse_lrange env rg ;
+    let { typ } as lv = parse_lpath env p in
+    if Cil.isPointerType typ then
+      let pointed = Cil.typeOf_pointed typ in
+      let ls = { loc ; step = Shift lv ; typ } in
+      { loc ; step = Star ls ; typ = pointed }
+    else
+    if Cil.isArrayType typ then
+      let elt = Cil.typeOf_array_elem typ in
+      { loc ; step = Index lv ; typ = elt }
+    else
+      error env ~loc:lv.loc "Pointer or array type expected"
+  | PLcast( t , a ) ->
+    let lv = parse_lpath env a in
+    let ty = parse_typ env ~loc t in
+    { loc ; step = Cast(ty,lv) ; typ = ty }
+  | _ ->
+    error env ~loc "Unexpected expression for region spec"
+
+let rec parse_named_lpath (env:env) p =
+  match p.lexpr_node with
+  | PLnamed( name , p ) ->
+    if env.named <> None && env.paths <> [] then
+      begin
+        env.specs <- { rname = env.named ; rpath = env.paths } :: env.specs ;
+        env.paths <- [] ;
+      end ;
+    env.named <- Some name ;
+    parse_named_lpath env p
+  | _ ->
+    let path = parse_lpath env p in
+    env.paths <- path :: env.paths
+
+(* -------------------------------------------------------------------------- *)
+(* --- Spec Typechecking & Printing                                       --- *)
+(* -------------------------------------------------------------------------- *)
+
+let kspec = ref 0
+let registry = Hashtbl.create 0
+
+let of_extid id = try Hashtbl.find registry id with Not_found -> []
+let of_extension = function
+  | { ext_name="region" ; ext_kind = Ext_id k } -> of_extid k
+  | _ -> []
+let of_code_annot = function
+  | { annot_content = AExtended(_,_,e) } -> of_extension e
+  | _ -> []
+
+let of_behavior bhv = List.concat_map of_extension bhv.b_extended
+
+let typecheck typing_context _loc ps =
+  let env = {
+    named = None ;
+    context = typing_context ;
+    paths = [] ; specs = [] ;
+  } in
+  List.iter (parse_named_lpath env) ps ;
+  let id = !kspec in incr kspec ;
+  let specs = { rname = env.named ; rpath = env.paths } :: env.specs in
+  Hashtbl.add registry id @@ List.rev specs ;
+  Ext_id id
+
+let printer _pp fmt = function
+  | Ext_id k ->
+    let rs  = try Hashtbl.find registry k with Not_found -> [] in
+    pp_regions fmt rs
+  | _ -> ()
+
+let () =
+  begin
+    Acsl_extension.register_behavior
+      ~plugin:"region" "region" typecheck ~printer false ;
+    Acsl_extension.register_code_annot
+      ~plugin:"region" "alias" typecheck ~printer false ;
+  end
+
+
+(* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/region/annot.mli b/src/plugins/region/annot.mli
new file mode 100644
index 0000000000000000000000000000000000000000..a2fd8bc531f698f97515c6d863fe5b3ba2f241ee
--- /dev/null
+++ b/src/plugins/region/annot.mli
@@ -0,0 +1,53 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+
+type path = {
+  loc : location ;
+  typ : typ ;
+  step: step ;
+}
+
+and step =
+  | Var of varinfo
+  | AddrOf of path
+  | Star of path
+  | Index of path
+  | Shift of path
+  | Field of path * fieldinfo
+  | Cast of typ * path
+
+type region = {
+  rname: string option ;
+  rpath: path list ;
+}
+
+val pp_step : Format.formatter -> step -> unit
+val pp_atom : Format.formatter -> path -> unit
+val pp_path : Format.formatter -> path -> unit
+val pp_region : Format.formatter -> region -> unit
+val pp_regions : Format.formatter -> region list -> unit
+
+val of_extension : acsl_extension -> region list
+val of_code_annot : code_annotation -> region list
+val of_behavior : behavior -> region list
diff --git a/src/plugins/region/code.ml b/src/plugins/region/code.ml
new file mode 100644
index 0000000000000000000000000000000000000000..93bbc497df42f1f637b9fd2c72e4fcc29719c54a
--- /dev/null
+++ b/src/plugins/region/code.ml
@@ -0,0 +1,251 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+open Cil_datatype
+open Memory
+
+(* -------------------------------------------------------------------------- *)
+(* ---  L-Values & Expressions                                            --- *)
+(* -------------------------------------------------------------------------- *)
+
+type value = { from : node option ; ptr : node option }
+let integral = { from = None ; ptr = None }
+let pointer m v =
+  match v.ptr with
+  | Some p -> v, p
+  | None ->
+    let p = add_cell m () in
+    Option.iter (fun s -> Memory.add_points_to m s p) v.from ;
+    { v with ptr = Some p }, p
+
+let rec add_lval (m:map) (s:stmt) (lv:lval) : node =
+  let h = fst lv in
+  add_loffset m s (add_lhost m s h) (Cil.typeOfLhost h) (snd lv)
+
+and add_lhost (m:map) (s:stmt) = function
+  | Var x -> Memory.add_root m x
+  | Mem e -> snd @@ pointer m @@ add_exp m s e
+
+and add_loffset (m:map) (s:stmt) (r:node) (ty:typ)= function
+  | NoOffset -> r
+  | Field(fd,ofs) ->
+    add_loffset m s (add_field m r fd) fd.ftype ofs
+  | Index(_,ofs) ->
+    add_loffset m s (add_index m r ty) (Cil.typeOf_array_elem ty) ofs
+
+and add_value m s e = ignore (add_exp m s e)
+
+and add_exp (m: map) (s:stmt) (e:exp) : value =
+  match e.enode with
+
+  | AddrOf lv | StartOf lv ->
+    let rv = Some (add_lval m s lv) in
+    { from = rv ; ptr = rv }
+
+  | Lval lv ->
+    let rv = add_lval m s lv in
+    Memory.read m rv (Lval(s,lv)) ;
+    let ptr = Memory.add_value m rv @@ Cil.typeOfLval lv in
+    { from = Some rv ; ptr }
+
+  | BinOp((PlusPI|MinusPI),p,k,_) ->
+    add_value m s k ;
+    let v = add_exp m s p in
+    Option.iter (fun r -> Memory.shift m r (Exp(s,e))) v.from ; v
+
+  | UnOp(_,e,_) ->
+    add_value m s e ; integral
+
+  | BinOp(_,a,b,_) ->
+    add_value m s a ; add_value m s b ; integral
+
+  | CastE(ty,p) ->
+    let v = add_exp m s p in
+    if Cil.isPointerType ty then
+      fst @@ pointer m @@ v
+    else
+      integral
+
+  | Const _
+  | SizeOf _ | SizeOfE _ | SizeOfStr _
+  | AlignOf _ | AlignOfE _
+    -> integral
+
+(* -------------------------------------------------------------------------- *)
+(* --- Initializers                                                       --- *)
+(* -------------------------------------------------------------------------- *)
+
+let rec add_init (m:map) (s:stmt) (acs:Access.acs) (lv:lval) (iv:init) =
+  match iv with
+
+  | SingleInit e ->
+    let r = add_lval m s lv in
+    Memory.write m r acs ;
+    Option.iter (Memory.add_points_to m r) (add_exp m s e).ptr
+
+  | CompoundInit(_,fvs) ->
+    List.iter
+      (fun (ofs,iv) ->
+         let lv = Cil.addOffsetLval ofs lv in
+         add_init m s acs lv iv
+      ) fvs
+
+(* -------------------------------------------------------------------------- *)
+(* --- Instructions                                                       --- *)
+(* -------------------------------------------------------------------------- *)
+
+let add_instr (m:map) (s:stmt) (instr:instr) =
+  match instr with
+  | Skip _ | Code_annot _ -> ()
+
+  | Set(lv,e,_) ->
+    let r = add_lval m s lv in
+    let v = add_exp m s e in
+    Memory.write m r (Lval(s,lv)) ;
+    Option.iter (Memory.add_points_to m r) v.ptr
+
+  | Local_init(x,AssignInit iv,_) ->
+    let acs = Access.Init(s,x) in
+    add_init m s acs (Var x,NoOffset) iv
+
+  | Call(lr,e,es,_) ->
+    add_value m s e ;
+    List.iter (add_value m s) es ;
+    Option.iter
+      (fun lv ->
+         let r = add_lval m s lv in
+         Memory.write m r (Lval(s,lv))
+      ) lr ;
+    Options.warning ~source:(fst @@ Stmt.loc s) "Incomplete call analysis"
+
+  | Local_init(_,ConsInit _,_) ->
+    Options.warning ~source:(fst @@ Stmt.loc s)
+      "Constructor init not yet implemented"
+  | Asm _ ->
+    Options.warning ~source:(fst @@ Stmt.loc s)
+      "Inline assembly not supported (ignored)"
+
+(* -------------------------------------------------------------------------- *)
+(* --- Statements                                                         --- *)
+(* -------------------------------------------------------------------------- *)
+
+type rmap = Memory.map Stmt.Map.t ref
+
+let store rmap m s =
+  rmap := Stmt.Map.add s (Memory.copy ~locked:true m) !rmap
+
+let rec add_stmt (r:rmap) (m:map) (s:stmt) =
+  let annots = Annotations.code_annot s in
+  if annots <> [] then
+    Options.warning ~source:(fst @@ Stmt.loc s)
+      "Annotations not analyzed" ;
+  match s.skind with
+  | Instr ki -> add_instr m s ki ; store r m s
+  | Return(Some e,_) -> add_value m s e ; store r m s
+  | Goto _ | Break _ | Continue _ | Return(None,_) -> store r m s
+  | If(e,st,se,_) ->
+    add_value m s e ;
+    store r m s ;
+    add_block r m st ;
+    add_block r m se ;
+  | Switch(e,b,_,_) ->
+    add_value  m s e ;
+    store r m s ;
+    add_block r m b ;
+  | Block b | Loop(_,b,_,_,_) -> add_block r m b
+  | UnspecifiedSequence s -> add_block r m @@ Cil.block_from_unspecified_sequence s
+  | Throw(exn,_) -> Option.iter (fun (e,_) -> add_value  m s e) exn
+  | TryCatch(b,hs,_)  ->
+    add_block r m b ;
+    List.iter (fun (c,b) -> add_catch r m c ; add_block r m b) hs ;
+  | TryExcept(a,(ks,e),b,_) ->
+    add_block r m a ;
+    List.iter (add_instr m s) ks ;
+    add_value  m s e ;
+    add_block r m b ;
+  | TryFinally(a,b,_) ->
+    add_block r m a ;
+    add_block r m b ;
+
+and add_catch (r:rmap) (m:map) (c:catch_binder) =
+  match c with
+  | Catch_all -> ()
+  | Catch_exn(_,xbs) -> List.iter (fun (_,b) -> add_block r m b) xbs
+
+and add_block (r:rmap) (m:map) (b:block) =
+  List.iter (add_stmt r m) b.bstmts
+
+(* -------------------------------------------------------------------------- *)
+(* --- Behavior                                                           --- *)
+(* -------------------------------------------------------------------------- *)
+
+type imap = Memory.map Property.Map.t ref
+
+let istore imap m ip =
+  imap := Property.Map.add ip (Memory.copy ~locked:true m) !imap
+
+let add_bhv ~kf (s:imap) (m:map) (bhv:behavior) =
+  List.iter
+    (fun e ->
+       let rs = Annot.of_extension e in
+       if rs <> [] then
+         begin
+           List.iter (Logic.add_region m) rs ;
+           let ip = Property.ip_of_extended (ELContract kf) e in
+           istore s m ip ;
+         end
+    ) bhv.b_extended
+
+(* -------------------------------------------------------------------------- *)
+(* --- Function                                                           --- *)
+(* -------------------------------------------------------------------------- *)
+
+type domain = {
+  map : map ;
+  body : map Stmt.Map.t ;
+  spec : map Property.Map.t ;
+}
+
+let domain ?global kf =
+  let m = match global with Some g -> g | None -> Memory.create () in
+  let r = ref Stmt.Map.empty in
+  let s = ref Property.Map.empty in
+  begin
+    try
+      let funspec = Annotations.funspec kf in
+      List.iter (add_bhv ~kf s m) funspec.spec_behavior ;
+    with Annotations.No_funspec _ -> ()
+  end ;
+  begin
+    try
+      let fundec = Kernel_function.get_definition kf in
+      add_block r m fundec.sbody ;
+    with Kernel_function.No_Definition -> ()
+  end ;
+  {
+    map = Memory.copy ~locked:true m ;
+    body = !r ;
+    spec = !s ;
+  }
+
+(* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/region/code.mli b/src/plugins/region/code.mli
new file mode 100644
index 0000000000000000000000000000000000000000..46cea3a9d8da0e6fc089aab9755498c699a2b022
--- /dev/null
+++ b/src/plugins/region/code.mli
@@ -0,0 +1,35 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+open Cil_datatype
+open Memory
+
+(** All the provided maps are locked. *)
+type domain = {
+  map : map ;
+  body : map Stmt.Map.t ;
+  spec : map Property.Map.t ;
+}
+
+(** The global map, if provided, is used as an accumulator. *)
+val domain : ?global:map -> kernel_function -> domain
diff --git a/src/plugins/region/dune b/src/plugins/region/dune
new file mode 100644
index 0000000000000000000000000000000000000000..f4f00f77e3abbaac66d5fb72b9b59018d629a236
--- /dev/null
+++ b/src/plugins/region/dune
@@ -0,0 +1,49 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;                                                                        ;;
+;;  This file is part of Frama-C.                                         ;;
+;;                                                                        ;;
+;;  Copyright (C) 2007-2024                                               ;;
+;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
+;;         alternatives)                                                  ;;
+;;                                                                        ;;
+;;  you can redistribute it and/or modify it under the terms of the GNU   ;;
+;;  Lesser General Public License as published by the Free Software       ;;
+;;  Foundation, version 2.1.                                              ;;
+;;                                                                        ;;
+;;  It is distributed in the hope that it will be useful,                 ;;
+;;  but WITHOUT ANY WARRANTY; without even the implied warranty of        ;;
+;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         ;;
+;;  GNU Lesser General Public License for more details.                   ;;
+;;                                                                        ;;
+;;  See the GNU Lesser General Public License version 2.1                 ;;
+;;  for more details (enclosed in the file licenses/LGPLv2.1).            ;;
+;;                                                                        ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(rule
+ (alias frama-c-configure)
+ (deps (universe))
+ (action
+  (progn
+   (echo "Region:" %{lib-available:frama-c-region.core} "\n")
+   (echo "  - Server:" %{lib-available:frama-c-server.core} "\n")
+   (echo "  - UnionFind:" %{lib-available:unionFind} "\n"))))
+
+(env
+ (release
+  (flags -noassert)))
+
+(library
+ (name Region)
+ (public_name frama-c-region.core)
+ (flags -open Frama_c_kernel :standard -w -9)
+ (libraries frama-c.kernel frama-c-server.core unionFind)
+ (instrumentation (backend landmarks))
+ (instrumentation (backend bisect_ppx)))
+
+(plugin
+ (optional)
+ (name region)
+ (libraries frama-c-region.core)
+ (site
+  (frama-c plugins)))
diff --git a/src/plugins/region/dune-project b/src/plugins/region/dune-project
new file mode 100644
index 0000000000000000000000000000000000000000..cbfcc90d4ec4c33141700984567ea75170a167cb
--- /dev/null
+++ b/src/plugins/region/dune-project
@@ -0,0 +1,25 @@
+(lang dune 3.7)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;                                                                        ;;
+;;  This file is part of Frama-C.                                         ;;
+;;                                                                        ;;
+;;  Copyright (C) 2007-2024                                               ;;
+;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
+;;         alternatives)                                                  ;;
+;;                                                                        ;;
+;;  you can redistribute it and/or modify it under the terms of the GNU   ;;
+;;  Lesser General Public License as published by the Free Software       ;;
+;;  Foundation, version 2.1.                                              ;;
+;;                                                                        ;;
+;;  It is distributed in the hope that it will be useful,                 ;;
+;;  but WITHOUT ANY WARRANTY; without even the implied warranty of        ;;
+;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         ;;
+;;  GNU Lesser General Public License for more details.                   ;;
+;;                                                                        ;;
+;;  See the GNU Lesser General Public License version 2.1                 ;;
+;;  for more details (enclosed in the file licenses/LGPLv2.1).            ;;
+;;                                                                        ;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(name frama-c-region)
+(using dune_site 0.1)
diff --git a/src/plugins/region/frama-c-region.opam b/src/plugins/region/frama-c-region.opam
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/plugins/region/logic.ml b/src/plugins/region/logic.ml
new file mode 100644
index 0000000000000000000000000000000000000000..6e68710a47566de2ab8c01fb50d348c2365e3707
--- /dev/null
+++ b/src/plugins/region/logic.ml
@@ -0,0 +1,54 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Annot
+open Memory
+
+let rec add_lval (m:map) (p:path): node =
+  match p.step with
+  | Var x -> add_root m x
+  | Field(lv,fd) -> Memory.add_field m (add_lval m lv) fd
+  | Index lv -> Memory.add_index m (add_lval m lv) lv.typ
+  | Star e | Cast(_,e) -> add_pointer m e
+  | Shift _ | AddrOf _ ->
+    Options.error ~source:(fst p.loc)
+      "Unexpected expression (l-value expected)" ;
+    Memory.add_cell m ()
+and add_pointer  (m:map) (p:path): Memory.node =
+  match add_exp m p with
+  | None -> add_cell m ()
+  | Some r -> r
+
+and add_exp (m:map) (p:path): Memory.node option =
+  match p.step with
+  | (Var _ | Field _ | Index _ | Star _ | Cast _) ->
+    let r = add_lval m p in
+    add_value m r p.typ
+  | AddrOf p -> Some (add_lval m p)
+  | Shift p -> add_exp m p
+
+let add_region (m: map) (r : Annot.region) =
+  let rs = List.map (add_lval m) r.rpath in
+  merge_all m @@
+  match r.rname with
+  | None -> rs
+  | Some a -> add_label m a :: rs
diff --git a/src/plugins/region/logic.mli b/src/plugins/region/logic.mli
new file mode 100644
index 0000000000000000000000000000000000000000..e5fb991d29aa65367eec51046aa0e15c3b86e6cf
--- /dev/null
+++ b/src/plugins/region/logic.mli
@@ -0,0 +1,27 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Memory
+
+val add_lval : map -> Annot.path -> node
+val add_exp : map -> Annot.path -> node option
+val add_region : map -> Annot.region -> unit
diff --git a/src/plugins/region/memory.ml b/src/plugins/region/memory.ml
new file mode 100644
index 0000000000000000000000000000000000000000..ac29123b225b9979e8d3ae8f8da320ce756307a4
--- /dev/null
+++ b/src/plugins/region/memory.ml
@@ -0,0 +1,513 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+open Cil_datatype
+module Ufind = UnionFind.Make(Store)
+module Vmap = Varinfo.Map
+module Vset = Varinfo.Set
+module Lmap = Map.Make(String)
+module Lset = Set.Make(String)
+
+(* -------------------------------------------------------------------------- *)
+(* --- Region Maps                                                        --- *)
+(* -------------------------------------------------------------------------- *)
+
+(* All offsets in bits *)
+
+type node = chunk Ufind.rref
+
+and layout =
+  | Blob
+  | Cell of int * node option
+  | Compound of int * node Ranges.t
+
+and chunk = {
+  cparents: node list ;
+  croots: Vset.t ;
+  clabels: Lset.t ;
+  creads: Access.Set.t ;
+  cwrites: Access.Set.t ;
+  cshifts: Access.Set.t ;
+  clayout: layout ;
+}
+
+type rg = node Ranges.range
+
+type map = {
+  store: chunk Ufind.store ;
+  mutable locked: bool ;
+  mutable roots: node Vmap.t ;
+  mutable labels: node Lmap.t ;
+}
+
+(* -------------------------------------------------------------------------- *)
+(* --- Accessors                                                          --- *)
+(* -------------------------------------------------------------------------- *)
+
+let sizeof = function Blob -> 0 | Cell(s,_) | Compound(s,_) -> s
+let ranges = function Blob | Cell _ -> [] | Compound(_,R rs) -> rs
+let pointed = function Blob | Compound _ -> None | Cell(_,p) -> p
+
+let types (m : chunk) : typ list =
+  let pool = ref Typ.Set.empty in
+  let add acs =
+    pool := Typ.Set.add (Cil.unrollType @@ Access.typeof acs) !pool in
+  Access.Set.iter add m.creads ;
+  Access.Set.iter add m.cwrites ;
+  Typ.Set.elements !pool
+
+let failwith_locked m fn =
+  if m.locked then raise (Invalid_argument fn)
+
+let lock m = m.locked <- true
+let unlock m = m.locked <- false
+
+(* -------------------------------------------------------------------------- *)
+(* --- Printers                                                           --- *)
+(* -------------------------------------------------------------------------- *)
+
+let pp_node fmt (n : node) = Format.fprintf fmt "R%04x" @@ Store.id n
+
+let pp_layout fmt = function
+  | Blob -> Format.pp_print_string fmt "<blob>"
+  | Cell(s,None) -> Format.fprintf fmt "<%04d>" s
+  | Cell(s,Some n) -> Format.fprintf fmt "<%04d>(*%a)" s pp_node n
+  | Compound(s,rg) ->
+    Format.fprintf fmt "@[<hv 0>{%04d" s ;
+    Ranges.iteri
+      (fun (rg : rg) ->
+         Format.fprintf fmt "@ | %a: %a" Ranges.pp_range rg pp_node rg.data
+      ) rg ;
+    Format.fprintf fmt "@ }@]"
+
+let pp_chunk fmt (n: node) (m: chunk) =
+  begin
+    let acs r s = if Access.Set.is_empty s then '-' else r in
+    Format.fprintf fmt "@[<hov 2>%a: %c%c%c" pp_node n
+      (acs 'R' m.creads) (acs 'W' m.cwrites) (acs 'A' m.cshifts) ;
+    List.iter (Format.fprintf fmt "@ (%a)" Typ.pretty) (types m) ;
+    Lset.iter (Format.fprintf fmt "@ %s:") m.clabels ;
+    Vset.iter (Format.fprintf fmt "@ %a" Varinfo.pretty) m.croots ;
+    if Options.debug_atleast 1 then
+      begin
+        Access.Set.iter (Format.fprintf fmt "@ R:%a" Access.pretty) m.creads ;
+        Access.Set.iter (Format.fprintf fmt "@ W:%a" Access.pretty) m.cwrites ;
+        Access.Set.iter (Format.fprintf fmt "@ A:%a" Access.pretty) m.cshifts ;
+      end ;
+    Format.fprintf fmt "@ %a ;@]" pp_layout m.clayout ;
+  end
+[@@ warning "-32"]
+
+(* -------------------------------------------------------------------------- *)
+(* --- Map Constructors                                                   --- *)
+(* -------------------------------------------------------------------------- *)
+
+let create () = {
+  locked = false ;
+  store = Ufind.new_store () ;
+  roots = Vmap.empty ;
+  labels = Lmap.empty ;
+}
+
+let copy ?locked m = {
+  locked = (match locked with None -> m.locked | Some l -> l) ;
+  store = Ufind.copy m.store ;
+  roots = m.roots ;
+  labels = m.labels ;
+}
+
+let empty = {
+  cparents = [] ;
+  croots = Vset.empty ;
+  clabels = Lset.empty ;
+  creads = Access.Set.empty ;
+  cwrites = Access.Set.empty ;
+  cshifts = Access.Set.empty ;
+  clayout = Blob ;
+}
+
+(* -------------------------------------------------------------------------- *)
+(* --- Map                                                                --- *)
+(* -------------------------------------------------------------------------- *)
+
+let id = Store.id
+let forge = Store.forge
+
+let node map node =
+  try Ufind.find map.store node
+  with Not_found -> node
+
+let nodes map ns = Store.list @@ List.map (node map) ns
+
+let get map node =
+  try Ufind.get map.store node
+  with Not_found -> empty
+
+(* -------------------------------------------------------------------------- *)
+(* --- Chunk Constructors                                                 --- *)
+(* -------------------------------------------------------------------------- *)
+
+let add_cell (m: map) ?size ?ptr ?root ?label () =
+  failwith_locked m "Region.Memory.add_cell" ;
+  let clayout = match size, ptr with
+    | None, None -> Blob
+    | None, Some _ -> Cell(Cil.bitsSizeOf Cil.voidPtrType,ptr)
+    | Some s, _ -> Cell(s,ptr) in
+  let croots = Vset.(match root with None -> empty | Some v -> singleton v) in
+  let clabels = Lset.(match label with None -> empty | Some a -> singleton a) in
+  Ufind.make m.store { empty with clayout ; croots ; clabels }
+
+let update (m: map) (n: node) (f: chunk -> chunk) =
+  let r = get m n in
+  Ufind.set m.store n (f r)
+
+let add_range (m: map) ~size ~offset ~length ~data : node =
+  failwith_locked m "Region.Memory.add_range" ;
+  let last = offset + length in
+  if not (0 <= offset && offset < last && last <= size) then
+    raise (Invalid_argument "Region.Memory.add_range") ;
+  let clayout = Compound(size, Ranges.singleton { offset ; length ; data }) in
+  let n = Ufind.make m.store { empty with clayout } in
+  update m data (fun r -> { r with cparents = nodes m @@ n :: r.cparents }) ; n
+
+let add_root (m: map) v =
+  try Vmap.find v m.roots with Not_found ->
+    failwith_locked m "Region.Memory.add_root" ;
+    let n = add_cell m ~root:v () in
+    m.roots <- Vmap.add v n m.roots ; n
+
+let add_label (m: map) a =
+  try Lmap.find a m.labels with Not_found ->
+    failwith_locked m "Region.Memory.add_label" ;
+    let n = add_cell m ~label:a () in
+    m.labels <- Lmap.add a n m.labels ; n
+
+(* -------------------------------------------------------------------------- *)
+(* --- Iterator                                                           --- *)
+(* -------------------------------------------------------------------------- *)
+
+type range = {
+  offset: int ;
+  length: int ;
+  cells: int ;
+  data: node ;
+}
+
+type region = {
+  node: node ;
+  parents: node list ;
+  roots: varinfo list ;
+  labels: string list ;
+  types: typ list ;
+  reads: Access.acs list ;
+  writes: Access.acs list ;
+  shifts: Access.acs list ;
+  sizeof: int ;
+  ranges: range list ;
+  pointed: node option ;
+}
+
+let pp_range fmt (r: range) =
+  Format.fprintf fmt "%d..%d [%d]: %a"
+    r.offset (r.offset + r.length) r.cells pp_node r.data
+
+let pp_region fmt (m: region) =
+  begin
+    let acs r s = if s = [] then '-' else r in
+    Format.fprintf fmt "@[<hov 2>%a: %c%c%c"
+      pp_node m.node
+      (acs 'R' m.reads) (acs 'W' m.writes) (acs 'A' m.shifts) ;
+    List.iter (Format.fprintf fmt "@ %s:") m.labels ;
+    List.iter (Format.fprintf fmt "@ %a" Varinfo.pretty) m.roots ;
+    List.iter (Format.fprintf fmt "@ (%a)" Typ.pretty) m.types ;
+    Format.fprintf fmt "@ %db" m.sizeof ;
+    Option.iter (Format.fprintf fmt "@ (*%a)" pp_node) m.pointed ;
+    Format.fprintf fmt "@[<hv 0>" ;
+    List.iter (Format.fprintf fmt "@ %a" pp_range) m.ranges ;
+    Format.fprintf fmt "@]" ;
+    if Options.debug_atleast 1 then
+      begin
+        List.iter (Format.fprintf fmt "@ R:%a" Access.pretty) m.reads ;
+        List.iter (Format.fprintf fmt "@ W:%a" Access.pretty) m.writes ;
+        List.iter (Format.fprintf fmt "@ A:%a" Access.pretty) m.shifts ;
+      end ;
+    Format.fprintf fmt " ;@]" ;
+  end
+
+let make_range (m: map) (rg: rg) : range = {
+  offset = rg.offset ;
+  length = rg.length ;
+  cells = rg.length / sizeof (get m rg.data).clayout ;
+  data = node m rg.data ;
+}
+
+let make_region (m: map) (n: node) (r: chunk) : region = {
+  node = n ;
+  parents = nodes m r.cparents ;
+  roots = Vset.elements r.croots ;
+  labels = Lset.elements r.clabels ;
+  reads = Access.Set.elements r.creads ;
+  writes = Access.Set.elements r.cwrites ;
+  shifts = Access.Set.elements r.cshifts ;
+  types = types r ;
+  sizeof = sizeof r.clayout ;
+  ranges = List.map (make_range m) @@ ranges r.clayout ;
+  pointed = Option.map (node m) (pointed r.clayout) ;
+}
+
+let region map n = make_region map n (get map n)
+
+let rec walk h m f n =
+  let n = Ufind.find m.store n in
+  let id = Store.id n in
+  try Hashtbl.find h id with Not_found ->
+    Hashtbl.add h id () ;
+    let r = Ufind.get m.store n in
+    f (make_region m n r) ;
+    match r.clayout with
+    | Blob -> ()
+    | Cell(_,p) -> Option.iter (walk h m f) p
+    | Compound(_,rg) -> Ranges.iter (walk h m f) rg
+
+let iter (m:map) (f: region -> unit) =
+  let h = Hashtbl.create 0 in
+  Vmap.iter (fun _x n -> walk h m f n) m.roots
+
+let regions map =
+  let pool = ref [] in
+  iter map (fun r -> pool := r :: !pool) ;
+  List.rev !pool
+
+(* -------------------------------------------------------------------------- *)
+(* --- Merge                                                              --- *)
+(* -------------------------------------------------------------------------- *)
+
+type queue = (node * node) Queue.t
+
+let singleton ~size = function
+  | None -> Ranges.empty
+  | Some r -> Ranges.range ~length:size r
+
+let merge_node (m: map) (q: queue) (a: node) (b: node) : node =
+  if not @@ Ufind.eq m.store a b then Queue.push (a,b) q ;
+  Ufind.find m.store (min a b)
+
+let merge_opt (m: map) (q: queue)
+    (pa : node option) (pb : node option) : node option =
+  match pa, pb with
+  | None, p | p, None -> p
+  | Some pa, Some pb -> Some (merge_node m q pa pb)
+
+let merge_range (m: map) (q: queue) (ra : rg) (rb : rg) : node =
+  let na = ra.data in
+  let nb = rb.data in
+  let ma = ra.offset + ra.length in
+  let mb = rb.offset + rb.length in
+  let dp = ra.offset - rb.offset in
+  let dq = ma - mb in
+  let sa = sizeof (get m na).clayout in
+  let sb = sizeof (get m nb).clayout in
+  let size = Ranges.(sa %. sb %. dp %. dq) in
+  let data = merge_node m q na nb in
+  if size = sa && size = sb then data else
+    merge_node m q (add_cell m ~size ()) data
+
+let merge_ranges (m: map) (q: queue)
+    (sa : int) (wa : node Ranges.t)
+    (sb : int) (wb : node Ranges.t)
+  : layout =
+  if sa = sb then
+    Compound(sa, Ranges.merge (merge_range m q) wa wb)
+  else
+    let size = Ranges.gcd sa sb in
+    let ra = Ranges.squash (merge_node m q) wa in
+    let rb = Ranges.squash (merge_node m q) wb in
+    Compound(size, singleton ~size @@ merge_opt m q ra rb)
+
+let merge_layout (m: map) (q: queue) (a : layout) (b : layout) : layout =
+  match a, b with
+  | Blob, c | c, Blob -> c
+
+  | Cell(sa,pa) , Cell(sb,pb) -> Cell(Ranges.gcd sa sb, merge_opt m q pa pb)
+
+  | Compound(sa,wa), Compound(sb,wb) -> merge_ranges m q sa wa sb wb
+
+  | Compound(sr,wr), Cell(sx,None) | Cell(sx,None), Compound(sr,wr) ->
+    let size = Ranges.gcd sx sr in
+    Compound(size, singleton ~size @@ Ranges.squash (merge_node m q) wr)
+
+  | Compound(sr,wr), Cell(sx,Some ptr) | Cell(sx,Some ptr), Compound(sr,wr) ->
+    let rp = add_cell m ~size:sx ~ptr () in
+    let wx = Ranges.range ~length:sx rp in
+    merge_ranges m q sx wx sr wr
+
+let merge_region (m: map) (q: queue) (a : chunk) (b : chunk) : chunk = {
+  cparents = nodes m @@ Store.bag a.cparents b.cparents ;
+  clabels = Lset.union a.clabels b.clabels ;
+  croots = Vset.union a.croots b.croots ;
+  creads = Access.Set.union a.creads b.creads ;
+  cwrites = Access.Set.union a.cwrites b.cwrites ;
+  cshifts = Access.Set.union a.cshifts b.cshifts ;
+  clayout = merge_layout m q a.clayout b.clayout ;
+}
+
+let do_merge (m: map) (q: queue) (a: node) (b: node): unit =
+  begin
+    let ra = Ufind.get m.store a in
+    let rb = Ufind.get m.store b in
+    let rx = Ufind.union m.store a b in
+    let rc = merge_region m q ra rb in
+    Ufind.set m.store rx rc ;
+  end
+
+let merge_all (m:map) = function
+  | [] -> ()
+  | r::rs ->
+    let q = Queue.create () in
+    List.iter (fun r' -> ignore @@ merge_node m q r r') rs ;
+    while not @@ Queue.is_empty q do
+      let a,b = Queue.pop q in
+      do_merge m q a b ;
+    done
+
+let merge (m: map) (a: node) (b: node) : node =
+  failwith_locked m "Region.Memory.merge" ;
+  merge_all m [a;b] ; Ufind.find m.store (min a b)
+
+(* -------------------------------------------------------------------------- *)
+(* --- Offset                                                             --- *)
+(* -------------------------------------------------------------------------- *)
+
+let add_field (m:map) (r:node) (fd:fieldinfo) : node =
+  let ci = fd.fcomp in
+  if ci.cstruct then
+    let size = Cil.bitsSizeOf (TComp(ci,[])) in
+    let offset, length = Cil.fieldBitsOffset fd in
+    let data = add_cell m () in
+    let rc = add_range m ~size ~offset ~length ~data in
+    ignore @@ merge m r rc ; data
+  else r
+
+let add_index (m:map) (r:node) (ty:typ) : node =
+  let size = Cil.bitsSizeOf ty in
+  let data = add_cell m () in
+  let rc = add_range m ~size ~offset:0 ~length:size ~data in
+  ignore @@ merge m r rc ; data
+
+let add_points_to (m: map) (a: node) (b : node) =
+  failwith_locked m "Region.Memory.points_to" ;
+  ignore @@ merge m a @@ add_cell m ~ptr:b ()
+
+let add_value (m:map) (rv:node) (ty:typ) : node option =
+  if Cil.isPointerType ty then
+    let rp = add_cell m () in
+    add_points_to m rv rp ;
+    Some rp
+  else
+    None
+
+(* -------------------------------------------------------------------------- *)
+(* --- Access                                                             --- *)
+(* -------------------------------------------------------------------------- *)
+
+let access (m:map) (a:node) (ty: typ) =
+  let sr = sizeof (get m a).clayout in
+  let size = Ranges.gcd sr (Cil.bitsSizeOf ty) in
+  if sr <> size then ignore (merge m a (add_cell m ~size ()))
+
+let read (m: map) (a: node) from =
+  failwith_locked m "Region.Memory.read" ;
+  let r = get m a in
+  Ufind.set m.store a { r with creads = Access.Set.add from r.creads } ;
+  access m a (Access.typeof from)
+
+let write (m: map) (a: node) from =
+  failwith_locked m "Region.Memory.write" ;
+  let r = get m a in
+  Ufind.set m.store a { r with cwrites = Access.Set.add from r.cwrites } ;
+  access m a (Access.typeof from)
+
+let shift (m: map) (a: node) from =
+  failwith_locked m "Region.Memory.shift" ;
+  let r = get m a in
+  Ufind.set m.store a { r with cshifts = Access.Set.add from r.cshifts }
+(* no access *)
+
+(* -------------------------------------------------------------------------- *)
+(* --- Lookup                                                            ---- *)
+(* -------------------------------------------------------------------------- *)
+
+let cranges m r =
+  let rg = Ufind.get m.store r in
+  match rg.clayout with
+  | Blob | Cell _ -> raise Not_found
+  | Compound(s,rgs) -> s, rgs
+
+let cpointed m r =
+  let rg = Ufind.get m.store r in
+  match rg.clayout with
+  | Blob | Compound _ | Cell(_,None) -> None
+  | Cell(_,Some r) -> Some (Ufind.find m.store r)
+
+let rec lval (m: map) (lv: lval) : node =
+  let h = host m (fst lv) in
+  offset m h (snd lv)
+
+and host (m: map) (h: lhost) : node =
+  match h with
+  | Var x -> Ufind.find m.store @@ Vmap.find x m.roots
+  | Mem e ->
+    match exp m e with
+    | None -> raise Not_found
+    | Some r -> r
+
+and offset (m: map) (r: node) (ofs: offset) : node =
+  match ofs with
+  | NoOffset -> Ufind.find m.store r
+  | Field (fd, ofs) ->
+    if fd.fcomp.cstruct then
+      let _, rgs = cranges m r in
+      let (p,w) = Cil.fieldBitsOffset fd in
+      let rg = Ranges.find p rgs in
+      if rg.offset <= p && p+w <= rg.offset + rg.length then
+        offset m rg.data ofs
+      else raise Not_found
+    else r
+  | Index (_, ofs) ->
+    let s, rgs = cranges m r in
+    match rgs with
+    | R [rg] when rg.offset = 0 && rg.length = s ->
+      offset m rg.data ofs
+    | _ -> raise Not_found
+
+and exp (m: map) (e: exp) : node option =
+  match e.enode with
+  | Const _
+  | SizeOf _ | SizeOfE _ | SizeOfStr _ | AlignOf _ | AlignOfE _ -> None
+  | Lval lv -> cpointed m @@ lval m lv
+  | AddrOf lv | StartOf lv -> Some (lval m lv)
+  | CastE(_, e) -> exp m e
+  | BinOp((PlusPI|MinusPI),p,_,_) -> exp m p
+  | UnOp (_, _, _) | BinOp (_, _, _, _) -> None
+
+(* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/region/memory.mli b/src/plugins/region/memory.mli
new file mode 100644
index 0000000000000000000000000000000000000000..79a0543ef0d220ca2a4da29b4be20a8f570f899d
--- /dev/null
+++ b/src/plugins/region/memory.mli
@@ -0,0 +1,95 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_types
+
+type node
+
+type range = {
+  offset: int ;
+  length: int ;
+  cells: int ;
+  data: node ;
+}
+
+type region = {
+  node: node ;
+  parents: node list ;
+  roots: varinfo list ;
+  labels: string list ;
+  types: typ list ;
+  reads: Access.acs list ;
+  writes: Access.acs list ;
+  shifts: Access.acs list ;
+  sizeof: int ;
+  ranges: range list ;
+  pointed: node option ;
+}
+
+type map
+
+val pp_node : Format.formatter -> node -> unit
+val pp_range : Format.formatter -> range -> unit
+val pp_region : Format.formatter -> region -> unit
+
+(** Initially unlocked. *)
+val create : unit -> map
+
+(** Default locked status is inherited from the copied map. *)
+val copy : ?locked:bool -> map -> map
+
+(** Lock the map. No more access nor merge can be added into the map. *)
+val lock : map -> unit
+
+(** Unlock the map. *)
+val unlock : map -> unit
+
+val id : node -> int
+val forge : int -> node
+val node : map -> node -> node
+val nodes : map -> node list -> node list
+
+val iter : map -> (region -> unit) -> unit
+val region : map -> node -> region
+val regions : map -> region list
+
+val add_root : map -> Cil_types.varinfo -> node
+val add_label : map -> string -> node
+val add_cell : map -> ?size:int -> ?ptr:node -> ?root:varinfo -> ?label:string -> unit -> node
+val add_range : map -> size:int -> offset:int -> length:int -> data:node -> node
+val add_field : map -> node -> fieldinfo -> node
+val add_index : map -> node -> typ -> node
+val add_points_to : map -> node -> node -> unit
+val add_value : map -> node -> typ -> node option
+
+val read : map -> node -> Access.acs -> unit
+val write : map -> node -> Access.acs -> unit
+val shift : map -> node -> Access.acs -> unit
+
+val merge : map -> node -> node -> node
+val merge_all : map -> node list -> unit
+
+(** @raise Not_found *)
+val lval : map -> lval -> node
+
+(** @raise Not_found *)
+val exp : map -> exp -> node option
diff --git a/src/plugins/region/options.ml b/src/plugins/region/options.ml
new file mode 100644
index 0000000000000000000000000000000000000000..5bc8f5b2d7fef1402b6783e4975098876ecd6836
--- /dev/null
+++ b/src/plugins/region/options.ml
@@ -0,0 +1,38 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* -------------------------------------------------------------------------- *)
+(* --- Plugin Registration                                                --- *)
+(* -------------------------------------------------------------------------- *)
+
+include Plugin.Register
+    (struct
+      let name = "Region Analysis"
+      let help = "Memory Region Analysis (experimental)"
+      let shortname = "region"
+    end)
+
+module Enabled = False
+    (struct
+      let option_name = "-region"
+      let help = "Enable Region Analysis"
+    end)
diff --git a/src/plugins/region/options.mli b/src/plugins/region/options.mli
new file mode 100644
index 0000000000000000000000000000000000000000..8aba69998a130c61bbe960c3dda7fc546eb25e66
--- /dev/null
+++ b/src/plugins/region/options.mli
@@ -0,0 +1,28 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(** Region Command Line Interface *)
+
+open Parameter_sig
+include Log.Messages
+
+module Enabled : Bool
diff --git a/src/plugins/region/ranges.ml b/src/plugins/region/ranges.ml
new file mode 100644
index 0000000000000000000000000000000000000000..54e7cc2c43fc0d8864f4332f1de80d8006c647f3
--- /dev/null
+++ b/src/plugins/region/ranges.ml
@@ -0,0 +1,94 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+let rec gcd a b =
+  if a = 0 then abs b else
+  if b = 0 then abs a else
+    gcd b (a mod b)
+
+let (%.) = gcd
+
+(* -------------------------------------------------------------------------- *)
+(* --- Range Maps                                                         --- *)
+(* -------------------------------------------------------------------------- *)
+
+type 'a range = {
+  offset: int ;
+  length: int ;
+  data: 'a ;
+}
+
+let pp_range fmt r =
+  Format.fprintf fmt "%04d..%04d" r.offset (r.offset + r.length - 1)
+
+let pp_offset fmt r =
+  Format.fprintf fmt "%04d:%04d" r.offset r.length
+
+type 'a t = R of 'a range list (* sorted, no-overlap *)
+
+let empty = R []
+
+let singleton r =
+  if not (0 <= r.offset && 0 < r.length) then
+    raise (Invalid_argument "Region.Ranges.singleton") ;
+  R [r]
+
+let range ?(offset=0) ?(length=1) data = singleton { offset ; length ; data }
+
+let rec find (k: int) = function
+  | [] -> raise Not_found
+  | ({ offset ; length } as r) :: rs ->
+    if offset <= k && k <= offset + length then r else find k rs
+
+let find k (R rs) = find k rs
+
+let rec merge f ra rb =
+  match ra, rb with
+  | [], rs | rs, [] -> rs
+  | a :: wa, b :: wb ->
+    let a' = a.offset + a.length in
+    let b' = b.offset + b.length in
+    if a' <= b.offset then
+      a :: merge f wa rb
+    else
+    if b' < a.offset then
+      b :: merge f ra wb
+    else
+      let offset = min a.offset b.offset in
+      let length = max a' b' - offset in
+      let data = f a b in
+      let r = { offset ; length ; data } in
+      if a' < b'
+      then merge f wa (r::wb)
+      else merge f (r::wa) wb
+
+let merge f (R x) (R y) = R (merge f x y)
+
+let squash f = function
+  | R [] -> None
+  | R (x::xs) -> Some (List.fold_left (fun w r -> f w r.data) x.data xs)
+
+let iteri f (R xs) = List.iter f xs
+let iter f (R xs) = List.iter (fun r -> f r.data) xs
+let map f (R xs) = R (List.map (fun r -> { r with data = f r.data }) xs)
+
+(* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/region/ranges.mli b/src/plugins/region/ranges.mli
new file mode 100644
index 0000000000000000000000000000000000000000..b04c273feb06930e56c6d996efe8688f8519dd86
--- /dev/null
+++ b/src/plugins/region/ranges.mli
@@ -0,0 +1,44 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+val gcd : int -> int -> int
+val (%.) : int -> int -> int (** gcd *)
+
+type 'a range = { offset : int; length : int; data : 'a; }
+type 'a t = private R of 'a range list (* sorted, no overlap *)
+
+(** Prints [offset..last] formatted with [%04d] *)
+val pp_range : Format.formatter -> 'a range -> unit
+
+(** Prints [offset:length] formatted with [%04d] *)
+val pp_offset : Format.formatter -> 'a range -> unit
+
+val empty : 'a t
+val singleton : 'a range -> 'a t
+val range : ?offset:int -> ?length:int -> 'a -> 'a t
+val merge : ('a range -> 'a range -> 'a) -> 'a t -> 'a t -> 'a t
+val squash : ('a -> 'a -> 'a) -> 'a t -> 'a option
+
+val find : int -> 'a t -> 'a range
+val map : ('a -> 'b) -> 'a t -> 'b t
+val iter : ('a -> unit) -> 'a t -> unit
+val iteri : ('a range -> unit) -> 'a t -> unit
diff --git a/src/plugins/region/register.ml b/src/plugins/region/register.ml
new file mode 100644
index 0000000000000000000000000000000000000000..54cd5cdd62b1d0f0a2e294a2b7ebce49a6390fca
--- /dev/null
+++ b/src/plugins/region/register.ml
@@ -0,0 +1,37 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+module R = Options
+
+(* -------------------------------------------------------------------------- *)
+(* --- Region Analysis Main Entry Point                                   --- *)
+(* -------------------------------------------------------------------------- *)
+
+let main () =
+  if R.Enabled.get () then
+    begin
+      Ast.compute () ;
+      R.feedback "Analyzing regions" ;
+      Globals.Functions.iter Analysis.compute ;
+    end
+
+let () = Boot.Main.extend main
diff --git a/src/plugins/region/services.ml b/src/plugins/region/services.ml
new file mode 100644
index 0000000000000000000000000000000000000000..0b5ab56eeec696b105255e42145de87b0b25027d
--- /dev/null
+++ b/src/plugins/region/services.ml
@@ -0,0 +1,262 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Cil_datatype
+open Server
+module Md = Markdown
+
+let package = Package.package ~plugin:"region" ~title:"Region Analysis" ()
+
+(* -------------------------------------------------------------------------- *)
+(* --- Server Data                                                        --- *)
+(* -------------------------------------------------------------------------- *)
+
+module Node : Data.S with type t = Memory.node =
+struct
+  type t = Memory.node
+  let jtype = Data.declare ~package ~name:"node" (Jindex "node")
+  let to_json n = Json.of_int @@ Memory.id n
+  let of_json js = Memory.forge @@ Json.int js
+end
+
+module NodeOpt = Data.Joption(Node)
+module NodeList = Data.Jlist(Node)
+
+module Range : Data.S with type t = Memory.range =
+struct
+  type t = Memory.range
+  let jtype = Data.declare ~package ~name:"range" @@
+    Jrecord [
+      "offset", Jnumber ;
+      "length", Jnumber ;
+      "cells", Jnumber ;
+      "data", Node.jtype ;
+    ]
+  let to_json (rg : Memory.range) =
+    Json.of_fields [
+      "offset", Json.of_int rg.offset ;
+      "length", Json.of_int rg.length ;
+      "cells", Json.of_int rg.cells ;
+      "data", Node.to_json rg.data ;
+    ]
+  let of_json _ = failwith "Region.Range.of_json"
+end
+
+module Ranges = Data.Jlist(Range)
+
+module Region: Data.S with type t = Memory.region =
+struct
+  type t = Memory.region
+
+  let roots_to_json vs =
+    let open Cil_types in
+    Json.of_list @@ List.map (fun v -> Json.of_string v.vname) vs
+
+  let labels_to_json ls =
+    Json.of_list @@ List.map Json.of_string ls
+
+  let ikind_to_char (ikind : Cil_types.ikind) =
+    match ikind with
+    | IBool | IUChar -> 'b'
+    | IChar | ISChar -> 'c'
+    | IInt -> 'i'
+    | IUInt -> 'u'
+    | IShort -> 's'
+    | IUShort -> 'r'
+    | ILong | ILongLong -> 'l'
+    | IULong | IULongLong -> 'w'
+
+  let fkind_to_char (fkind : Cil_types.fkind) =
+    match fkind with
+    | FFloat -> 'f'
+    | FDouble | FLongDouble -> 'd'
+
+  let typ_to_char (ty: Cil_types.typ) =
+    match ty with
+    | TVoid _ -> 'b'
+    | TPtr _ -> 'p'
+    | TInt(ik,_) -> ikind_to_char ik
+    | TFloat(fk,_) -> fkind_to_char fk
+    | TComp({ cstruct }, _) -> if cstruct then 'S' else 'U'
+    | TArray _ -> 'A'
+    | TNamed _ -> 'T'
+    | TEnum _ -> 'E'
+    | TFun _ -> 'F'
+    | TBuiltin_va_list _ -> 'x'
+
+  let typs_to_char (typs : Cil_types.typ list) =
+    match typs with
+    | [] -> '-'
+    | [ty] -> typ_to_char ty
+    | _ -> 'x'
+
+  let label (m: Memory.region) =
+    let buffer = Buffer.create 4 in
+    if m.reads <> [] then Buffer.add_char buffer 'R' ;
+    if m.writes <> [] then Buffer.add_char buffer 'W' ;
+    if m.pointed <> None then Buffer.add_char buffer '*'
+    else if m.reads <> [] || m.writes <> [] then
+      begin
+        Buffer.add_char buffer '(' ;
+        Buffer.add_char buffer @@ typs_to_char m.types ;
+        Buffer.add_char buffer ')' ;
+      end ;
+    Buffer.contents buffer
+
+  let pp_typ_layout s0 fmt ty =
+    let s = Cil.bitsSizeOf ty in
+    if s <> s0 then
+      Format.fprintf fmt "(%a)%%%db" Typ.pretty ty s
+    else
+      Typ.pretty fmt ty
+
+  let title (m: Memory.region) =
+    Format.asprintf "%t (%db)"
+      begin fun fmt ->
+        match m.types with
+        | [] -> Format.pp_print_string fmt "Compound"
+        | [ty] -> pp_typ_layout m.sizeof fmt ty ;
+        | ty::ts ->
+          pp_typ_layout 0 fmt ty ;
+          List.iter (Format.fprintf fmt ", %a" (pp_typ_layout 0)) ts ;
+      end m.sizeof
+
+  let jtype = Data.declare ~package ~name:"region" @@
+    Jrecord [
+      "node", Node.jtype ;
+      "roots", Jarray Jalpha ;
+      "labels", Jarray Jalpha ;
+      "parents", NodeList.jtype ;
+      "sizeof", Jnumber ;
+      "ranges", Ranges.jtype ;
+      "pointed", NodeOpt.jtype ;
+      "reads", Jboolean ;
+      "writes", Jboolean ;
+      "bytes", Jboolean ;
+      "label", Jstring ;
+      "title", Jstring ;
+    ]
+
+  let to_json (m: Memory.region) =
+    Json.of_fields [
+      "node", Node.to_json m.node ;
+      "roots", roots_to_json m.roots ;
+      "labels", labels_to_json m.labels ;
+      "parents", NodeList.to_json m.parents ;
+      "sizeof", Json.of_int @@ m.sizeof ;
+      "ranges", Ranges.to_json @@ m.ranges ;
+      "pointed", NodeOpt.to_json @@ m.pointed ;
+      "reads", Json.of_bool (m.reads <> []) ;
+      "writes", Json.of_bool (m.writes <> []) ;
+      "bytes", Json.of_bool (List.length m.types > 1) ;
+      "label", Json.of_string @@ label m ;
+      "title", Json.of_string @@ title m ;
+    ]
+
+  let of_json _ = failwith "Region.Layout.of_json"
+end
+
+module Regions = Data.Jlist(Region)
+
+(* -------------------------------------------------------------------------- *)
+(* --- Server API                                                         --- *)
+(* -------------------------------------------------------------------------- *)
+
+let map_of_localizable ~local (loc : Printer_tag.localizable) =
+  let open Printer_tag in
+  match kf_of_localizable loc with
+  | None -> raise Not_found
+  | Some kf ->
+    let domain = Analysis.find kf in
+    if local then
+      match ki_of_localizable loc with
+      | Kglobal -> domain.map
+      | Kstmt s -> Stmt.Map.find s domain.body
+    else domain.map
+
+let region_of_localizable (m: Memory.map) (loc: Printer_tag.localizable) =
+  try
+    match loc with
+    | PExp(_,_,e) -> Memory.exp m e
+    | PLval(_,_,lv) -> Some (Memory.lval m lv)
+    | PVDecl(_,_,x) -> Some (Memory.lval m (Var x,NoOffset))
+    | PStmt _ | PStmtStart _
+    | PTermLval _ | PGlobal _ | PIP _ | PType _ -> None
+  with Not_found -> None
+
+let map_of_declaration (decl : Printer_tag.declaration) =
+  match decl with
+  | SFunction kf -> (Analysis.find kf).map
+  | _ -> raise Not_found
+
+let signal = Request.signal ~package ~name:"updated"
+    ~descr:(Md.plain "Region Analysis Updated")
+
+let () = Analysis.add_hook (fun () -> Request.emit signal)
+
+let () =
+  Request.register
+    ~package ~kind:`EXEC ~name:"compute"
+    ~descr:(Md.plain "Compute regions for the given declaration")
+    ~input:(module Kernel_ast.Decl)
+    ~output:(module Data.Junit)
+    (function SFunction kf -> Analysis.compute kf | _ -> ())
+
+let () =
+  Request.register
+    ~package ~kind:`GET ~name:"regions"
+    ~descr:(Md.plain "Returns computed regions for the given declaration")
+    ~input:(module Kernel_ast.Decl)
+    ~output:(module Regions)
+    ~signals:[signal]
+    begin fun decl ->
+      try Memory.regions @@ map_of_declaration decl
+      with Not_found -> []
+    end
+
+let () =
+  Request.register
+    ~package ~kind:`GET ~name:"regionsAt"
+    ~descr:(Md.plain "Compute regions at the given marker")
+    ~input:(module Data.Jpair(Kernel_ast.Marker)(Data.Jbool))
+    ~output:(module Regions)
+    ~signals:[signal]
+    begin fun (loc,local) ->
+      try Memory.regions @@ map_of_localizable ~local loc
+      with Not_found -> []
+    end
+
+let () =
+  Request.register
+    ~package ~kind:`GET ~name:"localize"
+    ~descr:(Md.plain "Localize in the local (true) or global map (false)")
+    ~input:(module Data.Jpair(Kernel_ast.Marker)(Data.Jbool))
+    ~output:(module NodeOpt)
+    ~signals:[signal]
+    begin fun (loc,local) ->
+      try
+        let map = map_of_localizable ~local loc in
+        region_of_localizable map loc
+      with Not_found -> None
+    end
+
+(* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/region/services.mli b/src/plugins/region/services.mli
new file mode 100644
index 0000000000000000000000000000000000000000..2507b13f97d60fac6b22584dd12c0d4bac2f15e5
--- /dev/null
+++ b/src/plugins/region/services.mli
@@ -0,0 +1,30 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+open Server
+open Request
+
+val package : Package.package
+
+module Node : Data.S with type t = Memory.node
+module Range : Output with type t = Memory.range
+module Region : Output with type t = Memory.region
diff --git a/src/plugins/region/store.ml b/src/plugins/region/store.ml
new file mode 100644
index 0000000000000000000000000000000000000000..4e964e42b373265fedea995c5665efd92e916e39
--- /dev/null
+++ b/src/plugins/region/store.ml
@@ -0,0 +1,51 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+(* -------------------------------------------------------------------------- *)
+(* --- UnionFind Store with explicit integer keys                         --- *)
+(* -------------------------------------------------------------------------- *)
+
+module Imap = Map.Make(Int)
+
+type 'a rref = int
+type 'a store = 'a Imap.t ref
+
+let new_store () = ref Imap.empty
+let copy r = ref !r
+let rid = ref 0
+
+let make s v =
+  let k = incr rid ; !rid in
+  s := Imap.add k v !s ; k
+
+let get s k = Imap.find k !s
+let set s k v = s := Imap.add k v !s
+
+let eq _s i j = (i == j)
+
+let id x = x
+let forge x = x
+let list = List.sort_uniq Int.compare
+let rec bag a b =
+  match a, b with
+  | [], c | c, [] -> c
+  | x::xs, y::ys -> x :: y :: bag xs ys
diff --git a/src/plugins/region/store.mli b/src/plugins/region/store.mli
new file mode 100644
index 0000000000000000000000000000000000000000..3d9b60a6e02e310ddfd3827ec2d2f872f304f93a
--- /dev/null
+++ b/src/plugins/region/store.mli
@@ -0,0 +1,35 @@
+(**************************************************************************)
+(*                                                                        *)
+(*  This file is part of Frama-C.                                         *)
+(*                                                                        *)
+(*  Copyright (C) 2007-2024                                               *)
+(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
+(*         alternatives)                                                  *)
+(*                                                                        *)
+(*  you can redistribute it and/or modify it under the terms of the GNU   *)
+(*  Lesser General Public License as published by the Free Software       *)
+(*  Foundation, version 2.1.                                              *)
+(*                                                                        *)
+(*  It is distributed in the hope that it will be useful,                 *)
+(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
+(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
+(*  GNU Lesser General Public License for more details.                   *)
+(*                                                                        *)
+(*  See the GNU Lesser General Public License version 2.1                 *)
+(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
+(*                                                                        *)
+(**************************************************************************)
+
+include UnionFind.STORE
+
+(** Global unique identifier *)
+val id : 'a rref -> int
+
+(** Unordered union *)
+val bag: 'a list -> 'a list -> 'a list
+
+(** Sorted, unique *)
+val list : 'a rref list -> 'a rref list
+
+(**/**)
+val forge : int -> 'a rref
diff --git a/src/plugins/region/tests/ptests_config b/src/plugins/region/tests/ptests_config
new file mode 100644
index 0000000000000000000000000000000000000000..316166170520da8ec5a4067d38647cf887490c58
--- /dev/null
+++ b/src/plugins/region/tests/ptests_config
@@ -0,0 +1 @@
+DEFAULT_SUITES= region
diff --git a/src/plugins/region/tests/region/array1.i b/src/plugins/region/tests/region/array1.i
new file mode 100644
index 0000000000000000000000000000000000000000..eac00551a13634c34e79f284c7a0bebb362b0591
--- /dev/null
+++ b/src/plugins/region/tests/region/array1.i
@@ -0,0 +1,8 @@
+//@ region *p, *q ;
+int job( int n, int * p , int * q )
+{
+  int s = 0 ;
+  for (int k = 0; k < n; k++)
+    s += p[k] * q[k] ;
+  return s ;
+}
diff --git a/src/plugins/region/tests/region/array2.i b/src/plugins/region/tests/region/array2.i
new file mode 100644
index 0000000000000000000000000000000000000000..a9cbb53d7fffb400ff1c5b11512d50550682a934
--- /dev/null
+++ b/src/plugins/region/tests/region/array2.i
@@ -0,0 +1,8 @@
+//@ region P: *p, Q: *q ;
+int job( int n, int * p , int * q )
+{
+  int s = 0 ;
+  for (int k = 0; k < n; k++)
+    s += p[k] * q[k] ;
+  return s ;
+}
diff --git a/src/plugins/region/tests/region/fb_ADD.i b/src/plugins/region/tests/region/fb_ADD.i
new file mode 100644
index 0000000000000000000000000000000000000000..8ceb168c7af4dbce81e6776ee4fffd4b2c838ae7
--- /dev/null
+++ b/src/plugins/region/tests/region/fb_ADD.i
@@ -0,0 +1,22 @@
+typedef struct N { double v ; int s ; } *SN ;
+typedef struct L { int v ; int s ; } *SL ;
+
+typedef struct Block {
+  SN prm ;
+  SN inp1 ;
+  SN inp2 ;
+  SN inp3 ;
+  SN out1 ;
+  SN out2 ;
+  SN out3 ;
+  SL idx1 ;
+  SL idx2 ;
+  SL idx3 ;
+  SN sum ;
+} FB ;
+
+void job(FB *fb)
+{
+  fb->out1->v = fb->out1->v + fb->out2->v ;
+  fb->out1->s = fb->out1->s | fb->out2->s ;
+}
diff --git a/src/plugins/region/tests/region/fb_SORT.i b/src/plugins/region/tests/region/fb_SORT.i
new file mode 100644
index 0000000000000000000000000000000000000000..4ef65d2cfb6145f4c3266320fbeed7b8c7eb4145
--- /dev/null
+++ b/src/plugins/region/tests/region/fb_SORT.i
@@ -0,0 +1,38 @@
+typedef struct N { double v ; int s ; } *SN ;
+typedef struct L { int v ; int s ; } *SL ;
+
+typedef struct Block {
+  SN prm ;
+  SN inp1 ;
+  SN inp2 ;
+  SN inp3 ;
+  SN out1 ;
+  SN out2 ;
+  SN out3 ;
+  SL idx1 ;
+  SL idx2 ;
+  SL idx3 ;
+  SN sum ;
+} FB ;
+
+void job(FB *fb)
+{
+  SN *inp = &(fb->inp1) ;
+  SN *out = &(fb->out1) ;
+  SL *idx = &(fb->idx1) ;
+
+  for (int i = 0; i < 3; i++) {
+    out[i]->v = inp[i]->v + fb->prm->v ;
+    out[i]->s = 0 ;
+    idx[i]->v = inp[i]->s ;
+    idx[i]->s = 0 ;
+  }
+
+  fb->sum->v =
+    fb->out1->v +
+    fb->out2->v +
+    fb->out3->v ;
+
+  fb->sum->s = 0 ;
+
+}
diff --git a/src/plugins/region/tests/region/garbled.i b/src/plugins/region/tests/region/garbled.i
new file mode 100644
index 0000000000000000000000000000000000000000..6b703ba4245ba130e45827ac182b69f5dd03dfdd
--- /dev/null
+++ b/src/plugins/region/tests/region/garbled.i
@@ -0,0 +1,6 @@
+
+
+float job(int *p,int *q)
+{
+  return *q + *(float*)p + *p ;
+}
diff --git a/src/plugins/region/tests/region/oracle/array1.res.oracle b/src/plugins/region/tests/region/oracle/array1.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..32aa817c98cb58cf497d73bf7b882b710c6f01aa
--- /dev/null
+++ b/src/plugins/region/tests/region/oracle/array1.res.oracle
@@ -0,0 +1,9 @@
+[kernel] Parsing array1.i (no preprocessing)
+[region] Analyzing regions
+[region] Function job:
+  R000b: R-- n (int) 32b ;
+  R0004: R-A p (int *) 64b (*R0002) ;
+  R0002: R-- (int) 32b ;
+  R0001: R-A q (int *) 64b (*R0002) ;
+  R0007: RW- s (int) 32b ;
+  R0009: RW- k (int) 32b ;
diff --git a/src/plugins/region/tests/region/oracle/array2.res.oracle b/src/plugins/region/tests/region/oracle/array2.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..03db359956cffee155c75a0a93f0336392dcd450
--- /dev/null
+++ b/src/plugins/region/tests/region/oracle/array2.res.oracle
@@ -0,0 +1,10 @@
+[kernel] Parsing array2.i (no preprocessing)
+[region] Analyzing regions
+[region] Function job:
+  R000d: R-- n (int) 32b ;
+  R0001: R-A p (int *) 64b (*R0004) ;
+  R0004: R-- P: (int) 32b ;
+  R0005: R-A q (int *) 64b (*R0008) ;
+  R0008: R-- Q: (int) 32b ;
+  R0009: RW- s (int) 32b ;
+  R000b: RW- k (int) 32b ;
diff --git a/src/plugins/region/tests/region/oracle/fb_ADD.res.oracle b/src/plugins/region/tests/region/oracle/fb_ADD.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..84e4fe84a136c3e51118270f99079d75072b4153
--- /dev/null
+++ b/src/plugins/region/tests/region/oracle/fb_ADD.res.oracle
@@ -0,0 +1,13 @@
+[kernel] Parsing fb_ADD.i (no preprocessing)
+[region] Analyzing regions
+[region] Function job:
+  R0001: R-- fb (FB *) 64b (*R0003) ;
+  R0003: --- 704b 256..320 [1]: R0005 320..384 [1]: R0018 ;
+  R0005: R-- (struct N *) 64b (*R0008) ;
+  R0008: --- 128b 0..64 [1]: R000a 64..96 [1]: R0027 ;
+  R000a: RW- (double) 64b ;
+  R0027: RW- (int) 32b ;
+  R0018: R-- (struct N *) 64b (*R001b) ;
+  R001b: --- 128b 0..64 [1]: R001d 64..96 [1]: R003a ;
+  R001d: R-- (double) 64b ;
+  R003a: R-- (int) 32b ;
diff --git a/src/plugins/region/tests/region/oracle/fb_SORT.res.oracle b/src/plugins/region/tests/region/oracle/fb_SORT.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..912201cee70ff9cb9ad26b705ce0a1674f0ab3e1
--- /dev/null
+++ b/src/plugins/region/tests/region/oracle/fb_SORT.res.oracle
@@ -0,0 +1,33 @@
+[kernel] Parsing fb_SORT.i (no preprocessing)
+[region] Analyzing regions
+[region] Function job:
+  R0003: R-- fb (FB *) 64b (*R0005) ;
+  R0005: ---
+    704b
+        0..128 [2]: R0007
+        256..320 [1]: R000e
+        320..384 [1]: R0066
+        384..512 [2]: R0015
+        640..704 [1]: R0053 ;
+  R0007: R-- (struct N *) 64b (*R0024) ;
+  R0024: --- 128b 0..64 [1]: R0026 64..96 [1]: R0046 ;
+  R0026: R-- (double) 64b ;
+  R0046: R-- (int) 32b ;
+  R000e: R-- (struct N *) 64b (*R001d) ;
+  R001d: --- 128b 0..64 [1]: R001f 64..96 [1]: R0038 ;
+  R001f: RW- (double) 64b ;
+  R0038: -W- (int) 32b ;
+  R0066: R-- (struct N *) 64b (*R0069) ;
+  R0069: --- 128b 0..64 [1]: R006b ;
+  R006b: R-- (double) 64b ;
+  R0015: R-- (struct N *) (struct L *) 64b (*R003e) ;
+  R003e: --- 64b 0..64 [2]: R0040 ;
+  R0040: RW- (int) (double) 32b ;
+  R0053: R-- (struct N *) 64b (*R0056) ;
+  R0056: --- 128b 0..64 [1]: R0058 64..96 [1]: R007f ;
+  R0058: -W- (double) 64b ;
+  R007f: -W- (int) 32b ;
+  R0001: RWA inp (SN *) 64b (*R0007) ;
+  R000a: RWA out (SN *) 64b (*R000e) ;
+  R0011: RWA idx (SL *) 64b (*R0015) ;
+  R0018: RW- i (int) 32b ;
diff --git a/src/plugins/region/tests/region/oracle/garbled.res.oracle b/src/plugins/region/tests/region/oracle/garbled.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..024e97e7a347465d0c35c9340e432a711cbe9d92
--- /dev/null
+++ b/src/plugins/region/tests/region/oracle/garbled.res.oracle
@@ -0,0 +1,8 @@
+[kernel] Parsing garbled.i (no preprocessing)
+[region] Analyzing regions
+[region] Function job:
+  R0007: R-- p (int *) 64b (*R0009) ;
+  R0009: R-- (int) (float) 32b ;
+  R0002: R-- q (int *) 64b (*R0004) ;
+  R0004: R-- (int) 32b ;
+  R0001: RW- __retres (float) 32b ;
diff --git a/src/plugins/region/tests/region/oracle/swap.res.oracle b/src/plugins/region/tests/region/oracle/swap.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..3117fb686d5ee476901cd95a19ab05fd51194ca0
--- /dev/null
+++ b/src/plugins/region/tests/region/oracle/swap.res.oracle
@@ -0,0 +1,13 @@
+[kernel] Parsing swap.i (no preprocessing)
+[region] Analyzing regions
+[region] Function swap_aliased:
+  R0004: R-- a (int *) 64b (*R0007) ;
+  R0007: RW- R: (int) 32b ;
+  R0001: R-- b (int *) 64b (*R0007) ;
+  R0008: RW- tmp (int) 32b ;
+[region] Function swap_separated:
+  R0013: R-- a (int *) 64b (*R0016) ;
+  R0016: RW- A: (int) 32b ;
+  R0017: R-- b (int *) 64b (*R001a) ;
+  R001a: RW- B: (int) 32b ;
+  R001b: RW- tmp (int) 32b ;
diff --git a/src/plugins/region/tests/region/swap.i b/src/plugins/region/tests/region/swap.i
new file mode 100644
index 0000000000000000000000000000000000000000..04816ea5fd84319d9dad1009e3cbdb643cea9272
--- /dev/null
+++ b/src/plugins/region/tests/region/swap.i
@@ -0,0 +1,29 @@
+/*@
+  requires \valid(a);
+  requires \valid(b);
+  region A: *a, B: *b;
+  ensures *a == \old(*b);
+  ensures *b == \old(*a);
+  assigns *a, *b;
+  */
+void swap_separated(int *a, int *b)
+{
+  int tmp = *a ;
+  *a = *b;
+  *b = tmp ;
+}
+
+/*@
+  requires \valid(a);
+  requires \valid(b);
+  region R: *a, *b;
+  ensures *a == \old(*b);
+  ensures *b == \old(*a);
+  assigns *a, *b;
+  */
+void swap_aliased(int *a, int *b)
+{
+  int tmp = *a ;
+  *a = *b;
+  *b = tmp ;
+}
diff --git a/src/plugins/region/tests/test_config b/src/plugins/region/tests/test_config
new file mode 100644
index 0000000000000000000000000000000000000000..4772d6b36660012dd7b95cfdc8bed12676c83fb1
--- /dev/null
+++ b/src/plugins/region/tests/test_config
@@ -0,0 +1,2 @@
+PLUGIN: region
+OPT: -region
diff --git a/src/plugins/report/Report.ml b/src/plugins/report/Report.ml
index ae9cba1c5e3545554f42fac47f84b94e1368003f..7d263ee719f25164617958fa8f86b6315788477d 100644
--- a/src/plugins/report/Report.ml
+++ b/src/plugins/report/Report.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/Report.mli b/src/plugins/report/Report.mli
index a01c34f9c6ecf3c03eea705d0285838c7456ea5a..f42cf90c09567bafaaf78f85b674013937834f78 100644
--- a/src/plugins/report/Report.mli
+++ b/src/plugins/report/Report.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/classify.ml b/src/plugins/report/classify.ml
index 8a6cf8b9e4decffdd36e809510c3ebafe2969a29..b4dc9b17d2e0b1782dd79cb0dd98380601f2fb72 100644
--- a/src/plugins/report/classify.ml
+++ b/src/plugins/report/classify.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/classify.mli b/src/plugins/report/classify.mli
index a679088e6461d44714c8b796b674116fce5b22e8..c6558919e1d4da224bbc339cbdf9bf4682cd8df5 100644
--- a/src/plugins/report/classify.mli
+++ b/src/plugins/report/classify.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/csv.ml b/src/plugins/report/csv.ml
index 6b0e644de4e98c55cd9d141c0cca34318b27fa5b..9bde2538f3b2b51a2b8da95360c283b359b5f0ae 100644
--- a/src/plugins/report/csv.ml
+++ b/src/plugins/report/csv.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/csv.mli b/src/plugins/report/csv.mli
index 758664419aea8358afdaa53510a03b4231c4901e..ee0eac6516e9b76914a0193f0d9d2427f2102690 100644
--- a/src/plugins/report/csv.mli
+++ b/src/plugins/report/csv.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/dump.ml b/src/plugins/report/dump.ml
index e0309b3f9be060a098011e0a12694ed387b2cdfe..5cb3587377482ef5ad72be5da152645e132642f8 100644
--- a/src/plugins/report/dump.ml
+++ b/src/plugins/report/dump.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/dump.mli b/src/plugins/report/dump.mli
index fa3056f33c865bd38070c4d37a6e0b318bdf135a..8b659526fe1d967dffdcd555fe7349c7de688d9d 100644
--- a/src/plugins/report/dump.mli
+++ b/src/plugins/report/dump.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/dune b/src/plugins/report/dune
index d13c79cc7ed3e19086fcaa781a50577073f8b505..77864ff0e1449188a3366e6fb611302447e0c463 100644
--- a/src/plugins/report/dune
+++ b/src/plugins/report/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/report/dune-project b/src/plugins/report/dune-project
index b39aaed81b3f5c7d088958936c6783004fcea2f4..861cc440be0aacc75045f790f15dae20781f62ee 100644
--- a/src/plugins/report/dune-project
+++ b/src/plugins/report/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/report/register.ml b/src/plugins/report/register.ml
index d19dc67fd9c8d531ddb7d2eb8ce2769472d273dc..61899e17a060f587acf934c4ac04899b461be1e3 100644
--- a/src/plugins/report/register.ml
+++ b/src/plugins/report/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/register.mli b/src/plugins/report/register.mli
index 926889a432c24b4c40d2bcc06f93b02f0bb3bef2..687abf6425a5d600c6e006fa46270f9e2b81ccf9 100644
--- a/src/plugins/report/register.mli
+++ b/src/plugins/report/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/report_parameters.ml b/src/plugins/report/report_parameters.ml
index 3f2b0be4ee4e26db7a80897ff4bdfa041c729037..1914d0a5c57f29bbf0838498b7dd1750e6ea8b99 100644
--- a/src/plugins/report/report_parameters.ml
+++ b/src/plugins/report/report_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/report_parameters.mli b/src/plugins/report/report_parameters.mli
index 5b180112b7d88aed2ac260a8646a45c19e85858a..ebd22664967639e96ea37023c773c47d204d2595 100644
--- a/src/plugins/report/report_parameters.mli
+++ b/src/plugins/report/report_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/scan.ml b/src/plugins/report/scan.ml
index e7c28026e6a13de377f8e617906f036c57b8399a..323ccec559321d64b7afccfe8cde7d6357cb4de5 100644
--- a/src/plugins/report/scan.ml
+++ b/src/plugins/report/scan.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/report/scan.mli b/src/plugins/report/scan.mli
index ebb9aba9fec9f8bae4304e130f568f440ffe2e0c..d6a28fc78ba0430a3600a10f30fee695b13b03ec 100644
--- a/src/plugins/report/scan.mli
+++ b/src/plugins/report/scan.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/RteGen.ml b/src/plugins/rte/RteGen.ml
index a9cbba719e332fd4ab2a3aec6e883dc9320ea734..b24193186fc53bb53a5f99e5a93cc2be0734f503 100644
--- a/src/plugins/rte/RteGen.ml
+++ b/src/plugins/rte/RteGen.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/RteGen.mli b/src/plugins/rte/RteGen.mli
index fc927c236f044cafed5879173e5e52dbbaf36457..71871bfd0d4e7a0079c459bd17ba3e993330539e 100644
--- a/src/plugins/rte/RteGen.mli
+++ b/src/plugins/rte/RteGen.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/api.ml b/src/plugins/rte/api.ml
index c60a17b3ef8cb64c61ca3d29e40564e61b776e7a..7141a556f09893d67f9503579532f54a90002d10 100644
--- a/src/plugins/rte/api.ml
+++ b/src/plugins/rte/api.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/api.mli b/src/plugins/rte/api.mli
index 0649aee8d4f52a1751fc7e591f1f19d8eca434a5..b5971fe77af8c3efd433c1899bae2aa1260374f3 100644
--- a/src/plugins/rte/api.mli
+++ b/src/plugins/rte/api.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/dune b/src/plugins/rte/dune
index d6212e907f0118c6f328dab14883bc8d3a2ef3cd..806e992ea768df9c39ed47173d4e24d46c25056c 100644
--- a/src/plugins/rte/dune
+++ b/src/plugins/rte/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/rte/dune-project b/src/plugins/rte/dune-project
index 72ffdbf93661446d00ef6ade9c67100630c0723a..27e831793dd287b0c68ab4215c9d7ec7a19abde5 100644
--- a/src/plugins/rte/dune-project
+++ b/src/plugins/rte/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/rte/flags.ml b/src/plugins/rte/flags.ml
index 9eb545c994862e21358e4cbe7239bb6d6bd4eaee..5592f3722591fed936c6e4cf303f37000cb39357 100644
--- a/src/plugins/rte/flags.ml
+++ b/src/plugins/rte/flags.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/flags.mli b/src/plugins/rte/flags.mli
index 873db78c4c837d5e9186806be52374f8d04de612..6e0f90f9d3452dc9ef0e8318358739e0a492dd28 100644
--- a/src/plugins/rte/flags.mli
+++ b/src/plugins/rte/flags.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/generator.ml b/src/plugins/rte/generator.ml
index 288739a7d7a014d8595d599a1fc694f450c58866..aa86114543d95a62dc85ea5202289d210f376f52 100644
--- a/src/plugins/rte/generator.ml
+++ b/src/plugins/rte/generator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/generator.mli b/src/plugins/rte/generator.mli
index 004f91c16e99a5cf299e60360b3be46d8eced08a..8ab83de5124fc7287731ae346f76670ff28283c3 100644
--- a/src/plugins/rte/generator.mli
+++ b/src/plugins/rte/generator.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/gui/dune b/src/plugins/rte/gui/dune
index 66300a2fe52a0a730ca3d9d5fa8c40d0003d16c4..94c1baacce105c2abda0d74ba7de853bc847000e 100644
--- a/src/plugins/rte/gui/dune
+++ b/src/plugins/rte/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/rte/gui/rtegen_gui.ml b/src/plugins/rte/gui/rtegen_gui.ml
index d968ce25f1c5601f1ac7b22054f3b634a77200cb..cc28045645e375fcbeecf021a84beb510daa8260 100644
--- a/src/plugins/rte/gui/rtegen_gui.ml
+++ b/src/plugins/rte/gui/rtegen_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/options.ml b/src/plugins/rte/options.ml
index a984e376780e9e364fe05c98634d40cf52ce9042..fd9e268e44bec57f5fec4fe5b6c27406c012d0af 100644
--- a/src/plugins/rte/options.ml
+++ b/src/plugins/rte/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/options.mli b/src/plugins/rte/options.mli
index 5610f3f96f9d2074e51672b459e8312d0283856d..f84f8925101f8fe8a6bf89cf654fbf38fb4e218b 100644
--- a/src/plugins/rte/options.mli
+++ b/src/plugins/rte/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/register.ml b/src/plugins/rte/register.ml
index 2019f62b4db49ceeccc28bb8f930d5def0d183b5..513038725157bceb3de01382654f1a020bb15477 100644
--- a/src/plugins/rte/register.ml
+++ b/src/plugins/rte/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/register.mli b/src/plugins/rte/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/rte/register.mli
+++ b/src/plugins/rte/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/rte.ml b/src/plugins/rte/rte.ml
index 2a19334341da557397c5a9307cfff9df141735c5..8104e697961bc09ee043e9ae140403d899514772 100644
--- a/src/plugins/rte/rte.ml
+++ b/src/plugins/rte/rte.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/rte.mli b/src/plugins/rte/rte.mli
index aae7c73a217004d449263169732d0f18f189ce1d..b3286ace28fa670e52bdc85e4ba2d128b4827b73 100644
--- a/src/plugins/rte/rte.mli
+++ b/src/plugins/rte/rte.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/visit.ml b/src/plugins/rte/visit.ml
index c92bf683b585155d67ef88c99292989ecde548e7..80db7522f948e78cb08114da69baa96f68494b1a 100644
--- a/src/plugins/rte/visit.ml
+++ b/src/plugins/rte/visit.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/rte/visit.mli b/src/plugins/rte/visit.mli
index 06fc1c1226bb4485c226096259a95f882a8eaf0e..476932555e3ffcf45d2269d57ed9bf19aa71193d 100644
--- a/src/plugins/rte/visit.mli
+++ b/src/plugins/rte/visit.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/datascope.ml b/src/plugins/scope/datascope.ml
index 6cc50602a3d17d0d1cbcd473be79b56e646ac181..a65f14d60462aaa3428c9e69e27e3fbd6405af58 100644
--- a/src/plugins/scope/datascope.ml
+++ b/src/plugins/scope/datascope.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/datascope.mli b/src/plugins/scope/datascope.mli
index 79659eebb68efe8dc413d802a0e48f12b2a8fa8e..a5de0b77c9bcf66eec2daefe8d11899f61b64c65 100644
--- a/src/plugins/scope/datascope.mli
+++ b/src/plugins/scope/datascope.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/defs.ml b/src/plugins/scope/defs.ml
index 0f701bf3015d83dd655f5a422a5c18969fdb3f41..edc5239160cdc7951fe67f42ef99669cda2854e6 100644
--- a/src/plugins/scope/defs.ml
+++ b/src/plugins/scope/defs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/defs.mli b/src/plugins/scope/defs.mli
index 531d55c938e3f8b6a26390499e7fdd3a360ef727..48643ef9b873133a999c5e1ded94381efc4750a2 100644
--- a/src/plugins/scope/defs.mli
+++ b/src/plugins/scope/defs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/dune b/src/plugins/scope/dune
index 8bcbfda8750ecf4a2e6731d2634c909d1b208aa0..18e1ca5e06647ef4339bed2c15bbbd21b32c4eb0 100644
--- a/src/plugins/scope/dune
+++ b/src/plugins/scope/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/scope/dune-project b/src/plugins/scope/dune-project
index c79c48253b8b6b937537a079a4925b10424d8688..70be0680fd7f4a86667591ffe3bfa1c843312de5 100644
--- a/src/plugins/scope/dune-project
+++ b/src/plugins/scope/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/scope/gui/dpds_gui.ml b/src/plugins/scope/gui/dpds_gui.ml
index 8e6820c22126bb11e9047232244b535d6c037674..b9987c0ce49cbb83ad040b24724970e24da6c28c 100644
--- a/src/plugins/scope/gui/dpds_gui.ml
+++ b/src/plugins/scope/gui/dpds_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/gui/dpds_gui.mli b/src/plugins/scope/gui/dpds_gui.mli
index fae5d3d1a3c51da3c1c58b8e97957a3615a72222..e6f7edcaa1ec6359c950c20fdc5df8ecbe5a41f8 100644
--- a/src/plugins/scope/gui/dpds_gui.mli
+++ b/src/plugins/scope/gui/dpds_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/gui/dune b/src/plugins/scope/gui/dune
index 32bd116e7468777f4d25bfd80cde1e2a46d0d8ea..f9f7370433b0c92e9175955105884d6161af9448 100644
--- a/src/plugins/scope/gui/dune
+++ b/src/plugins/scope/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/scope/scope.ml b/src/plugins/scope/scope.ml
index 1fee970281f71924b606c7f1f40185d7992dbc67..ca57a5cf2e9f271ead5ea4c051d03b6faa7b40fb 100644
--- a/src/plugins/scope/scope.ml
+++ b/src/plugins/scope/scope.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/scope.mli b/src/plugins/scope/scope.mli
index 1221840f6f274833dc4b3a376820b4897b7f9995..973aea1e3dc62d4a46fc7ee1706a04358ddb6f57 100644
--- a/src/plugins/scope/scope.mli
+++ b/src/plugins/scope/scope.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/zones.ml b/src/plugins/scope/zones.ml
index 3c2ecaa401f5672483771b620db63c95b9c8dea9..918c18391b61eec0aaacea221624b71e7abf9cfb 100644
--- a/src/plugins/scope/zones.ml
+++ b/src/plugins/scope/zones.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/scope/zones.mli b/src/plugins/scope/zones.mli
index 0a9d7de9f0c9ec26a5b78e8f99f88a7f88b372e6..91b79b7352cd6e4b388de2a2cfbdc5fa0ac30946 100644
--- a/src/plugins/scope/zones.mli
+++ b/src/plugins/scope/zones.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/security_slicing/Security_slicing.ml b/src/plugins/security_slicing/Security_slicing.ml
index 278a3b67b730b34a78361cbb7ae9ecc12f2ccfe1..10a690bd9cb89af37c8a5f35120efef43d47b95c 100644
--- a/src/plugins/security_slicing/Security_slicing.ml
+++ b/src/plugins/security_slicing/Security_slicing.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/security_slicing/components.ml b/src/plugins/security_slicing/components.ml
index d6de1db2c174ed7ac4c78b2b3a4aea41f00ade51..74349068d997ef140efa8e179dca5482a075810a 100644
--- a/src/plugins/security_slicing/components.ml
+++ b/src/plugins/security_slicing/components.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/security_slicing/components.mli b/src/plugins/security_slicing/components.mli
index 2e3a8867019f3fb45a014e5fbc64b98f6de1af67..d4303e072ee87f138731477d199e9465779779b3 100644
--- a/src/plugins/security_slicing/components.mli
+++ b/src/plugins/security_slicing/components.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/security_slicing/dune b/src/plugins/security_slicing/dune
index c54b7cb8820d41975d354c8e2fac3c62038ebaca..d8bc18a2e2a23394bfebb761d1aa84bc815248b5 100644
--- a/src/plugins/security_slicing/dune
+++ b/src/plugins/security_slicing/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/security_slicing/dune-project b/src/plugins/security_slicing/dune-project
index d783cf326e69185ff9cadd580d0d8f13b8b473cc..fd98d9be06de757ffb633fe9c471591c0e4600c9 100644
--- a/src/plugins/security_slicing/dune-project
+++ b/src/plugins/security_slicing/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/security_slicing/gui/dune b/src/plugins/security_slicing/gui/dune
index fba3f19c1e9057e2e2892567fb8cb7a9ae96a0a8..8ee7fc500f71d1846f66cf12df46b7b92902ddd4 100644
--- a/src/plugins/security_slicing/gui/dune
+++ b/src/plugins/security_slicing/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/security_slicing/gui/register_gui.ml b/src/plugins/security_slicing/gui/register_gui.ml
index 7f8056091d3e54603ec6be2b556853d0ae128a8a..d149da2fefbc5440fc283b02757a4ccba48eeb80 100644
--- a/src/plugins/security_slicing/gui/register_gui.ml
+++ b/src/plugins/security_slicing/gui/register_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/security_slicing/gui/register_gui.mli b/src/plugins/security_slicing/gui/register_gui.mli
index b36b0978c3b48281e116cc5028af3e1f67703472..8b4f7779fdb3f369b6638dde682d2c4569e7b2b4 100644
--- a/src/plugins/security_slicing/gui/register_gui.mli
+++ b/src/plugins/security_slicing/gui/register_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/security_slicing/security_slicing_parameters.ml b/src/plugins/security_slicing/security_slicing_parameters.ml
index b4f03f6956e0080240394e9e5795c7f863be0edf..717c9d891bb0b282185155a1c01dcc261303d909 100644
--- a/src/plugins/security_slicing/security_slicing_parameters.ml
+++ b/src/plugins/security_slicing/security_slicing_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/security_slicing/security_slicing_parameters.mli b/src/plugins/security_slicing/security_slicing_parameters.mli
index 958f6a35666a0f95c67a5b80b52e9619778f2609..b5d279f38bfb7501c7fc57b800157dd9cbe58c3b 100644
--- a/src/plugins/security_slicing/security_slicing_parameters.mli
+++ b/src/plugins/security_slicing/security_slicing_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/data.ml b/src/plugins/server/data.ml
index f0a4d30ba5673413bc03d959c94606c2c38164c1..365ac6ec02a55a33b4f1376f5540718658d92d64 100644
--- a/src/plugins/server/data.ml
+++ b/src/plugins/server/data.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -88,16 +88,14 @@ module Joption(A : S) : S with type t = A.t option =
 struct
   type t = A.t option
 
-  let nullable = try ignore (A.of_json `Null) ; true with _ -> false
-  let jtype = Joption (if not nullable then A.jtype else Jtuple [A.jtype])
+  let jtype = Joption A.jtype
 
   let to_json = function
     | None -> `Null
-    | Some v -> if nullable then `List [A.to_json v] else A.to_json v
+    | Some v -> A.to_json v
 
   let of_json = function
     | `Null -> None
-    | `List [js] when nullable -> Some (A.of_json js)
     | js -> Some (A.of_json js)
 
 end
diff --git a/src/plugins/server/data.mli b/src/plugins/server/data.mli
index 0b40b0a728c13e74f263bc8314ebbf96dc199fb8..c3942f7262fe016e4151aedd137febb3c6f00ab8 100644
--- a/src/plugins/server/data.mli
+++ b/src/plugins/server/data.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/dune b/src/plugins/server/dune
index ff5efd4e2cad124c23a78a44bee412679689cf7e..b05a896327f32e10806fb77d72cce3c89fba9533 100644
--- a/src/plugins/server/dune
+++ b/src/plugins/server/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/server/dune-project b/src/plugins/server/dune-project
index e7da76c1c52028b88af99da369a2eb117d9974c1..51d9316c42d0bf7c7da45fae9ba446d52daf29fa 100644
--- a/src/plugins/server/dune-project
+++ b/src/plugins/server/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/server/jbuffer.ml b/src/plugins/server/jbuffer.ml
index eab0ce3c842766d0232a84674039048de5e056b6..f083f79bd869e8de9a0537b4ffab324d05cd7b01 100644
--- a/src/plugins/server/jbuffer.ml
+++ b/src/plugins/server/jbuffer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/jbuffer.mli b/src/plugins/server/jbuffer.mli
index 5c5a507bd89b51b38f24b1bc31dbd725e06f25d2..e6db3613f5d99d85ff3230fc3c043a610fbcb1c8 100644
--- a/src/plugins/server/jbuffer.mli
+++ b/src/plugins/server/jbuffer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/kernel_ast.ml b/src/plugins/server/kernel_ast.ml
index 5e9c740f8e09959a733ce577ef7665e949604caf..ca3325915e0d6fda718104550dc6e5ddaefd40e4 100644
--- a/src/plugins/server/kernel_ast.ml
+++ b/src/plugins/server/kernel_ast.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/kernel_ast.mli b/src/plugins/server/kernel_ast.mli
index cbeea24344ac20fea164ffac2f366ec6f90a7429..117dd0340de3376a14fca4b3399c1f98d17eb148 100644
--- a/src/plugins/server/kernel_ast.mli
+++ b/src/plugins/server/kernel_ast.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/kernel_main.ml b/src/plugins/server/kernel_main.ml
index 609c8a29f14f93cf3bfae7548e1df3300084e6e4..22447227dfafb69e298f36ced5df7ea94864068a 100644
--- a/src/plugins/server/kernel_main.ml
+++ b/src/plugins/server/kernel_main.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/kernel_main.mli b/src/plugins/server/kernel_main.mli
index 0366be1d99acf9e41cf6566885a9e8d11bac871a..59e3d393ba9091743dbd735619bd97c1aab81d74 100644
--- a/src/plugins/server/kernel_main.mli
+++ b/src/plugins/server/kernel_main.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/kernel_project.ml b/src/plugins/server/kernel_project.ml
index 91252b560d956180b82515a9c981336412c4137b..2d909f9ab99545121b80acae771f46a8a758fc9f 100644
--- a/src/plugins/server/kernel_project.ml
+++ b/src/plugins/server/kernel_project.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/kernel_project.mli b/src/plugins/server/kernel_project.mli
index 99b3014dd15d2ab177838bb6bbb546e424dbd69b..62775848d2f9eb5336e0b9346455d7539f652d12 100644
--- a/src/plugins/server/kernel_project.mli
+++ b/src/plugins/server/kernel_project.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/kernel_properties.ml b/src/plugins/server/kernel_properties.ml
index 191ed90373138fe2d067f5519ea26fae49eb3375..8d84bb2874a334504e69b69415ce4f252d27f479 100644
--- a/src/plugins/server/kernel_properties.ml
+++ b/src/plugins/server/kernel_properties.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/kernel_properties.mli b/src/plugins/server/kernel_properties.mli
index 3a828a88139363c9351b09c5809aeac692420a97..314e54f8522c5671c5dae9858d0e676418a29550 100644
--- a/src/plugins/server/kernel_properties.mli
+++ b/src/plugins/server/kernel_properties.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/main.ml b/src/plugins/server/main.ml
index 8e5c71255249e55f85e0ba1f708a8c1d572ffd68..26ee92e40da3d479df6a923bde052d980016a62d 100644
--- a/src/plugins/server/main.ml
+++ b/src/plugins/server/main.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/main.mli b/src/plugins/server/main.mli
index 94bf6707567fe04c70e9e3b174887e2658b45161..5f7e8b0165d3bedee00cf447727f826537286398 100644
--- a/src/plugins/server/main.mli
+++ b/src/plugins/server/main.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/package.ml b/src/plugins/server/package.ml
index a61a1319f211fa6c7959e785734d7a65d4af8be6..24df8bf4fa205b6d67af579476b882570a9a5690 100644
--- a/src/plugins/server/package.ml
+++ b/src/plugins/server/package.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/package.mli b/src/plugins/server/package.mli
index 34a878af92122b8bcd514e0cc6834815e2345f06..59a617843d882f15d9f31f06ebc7942032e0d1fc 100644
--- a/src/plugins/server/package.mli
+++ b/src/plugins/server/package.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/request.ml b/src/plugins/server/request.ml
index 31630d5e2a205f4e2782c1a3129ec9fa0cd5e98d..bf98c1dc180a13d2aecc3facfd5ca2c144ead6f5 100644
--- a/src/plugins/server/request.ml
+++ b/src/plugins/server/request.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/request.mli b/src/plugins/server/request.mli
index c5eede0f14cd7fe6bd4a49b9f17bcdf22811a1a4..97f6f460be05321ffe4cdf8fc752bf9a3b5b3f1b 100644
--- a/src/plugins/server/request.mli
+++ b/src/plugins/server/request.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_batch.ml b/src/plugins/server/server_batch.ml
index 855dbe38cfd397c89b10a1516bf7d3195d73100a..f1b0c86035b47f6419f6afed9daec20af9638338 100644
--- a/src/plugins/server/server_batch.ml
+++ b/src/plugins/server/server_batch.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_batch.mli b/src/plugins/server/server_batch.mli
index 150c4c155e9715af9758f50cc5e63facad031316..962062e862d5d07adb597d38791cf8e807b2ae7e 100644
--- a/src/plugins/server/server_batch.mli
+++ b/src/plugins/server/server_batch.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_doc.ml b/src/plugins/server/server_doc.ml
index 7a6617155ee3f52357b04063a1a9992e344f6003..7b65b2bc32f1a8600ceb304f2ee399f07559124f 100644
--- a/src/plugins/server/server_doc.ml
+++ b/src/plugins/server/server_doc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_doc.mli b/src/plugins/server/server_doc.mli
index 9643170c0704d1e3cca89cea6540eafa479bed13..7b558f918d5c2d13802edbf45a0a02244b4c5366 100644
--- a/src/plugins/server/server_doc.mli
+++ b/src/plugins/server/server_doc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_parameters.ml b/src/plugins/server/server_parameters.ml
index 7a4634f8757f4a90d3838828ca6182da9ec0437b..c70f051abcc3dcc49a6fab012c3a334f13bd9bd8 100644
--- a/src/plugins/server/server_parameters.ml
+++ b/src/plugins/server/server_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_parameters.mli b/src/plugins/server/server_parameters.mli
index ec3797ff0e6a3db0991c1c4915e26b05881d9613..9108fe0f451d228080e8e176fee12d2b0a107633 100644
--- a/src/plugins/server/server_parameters.mli
+++ b/src/plugins/server/server_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_socket.ml b/src/plugins/server/server_socket.ml
index 74394943bb2f274858574210d3d09ac18c8d42cc..5d47c07cde7bf27e7ae6555ad819e3100016945b 100644
--- a/src/plugins/server/server_socket.ml
+++ b/src/plugins/server/server_socket.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_socket.mli b/src/plugins/server/server_socket.mli
index 150c4c155e9715af9758f50cc5e63facad031316..962062e862d5d07adb597d38791cf8e807b2ae7e 100644
--- a/src/plugins/server/server_socket.mli
+++ b/src/plugins/server/server_socket.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_zmq.ko.ml b/src/plugins/server/server_zmq.ko.ml
index 14207880c6263d2e85a2992f62c80dd8cc23cd2e..202a80229ae5e0c84ff38339552eb53b00af1890 100644
--- a/src/plugins/server/server_zmq.ko.ml
+++ b/src/plugins/server/server_zmq.ko.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_zmq.mli b/src/plugins/server/server_zmq.mli
index 150c4c155e9715af9758f50cc5e63facad031316..962062e862d5d07adb597d38791cf8e807b2ae7e 100644
--- a/src/plugins/server/server_zmq.mli
+++ b/src/plugins/server/server_zmq.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/server_zmq.ok.ml b/src/plugins/server/server_zmq.ok.ml
index 340aec48868f73b4dc44e0ab1c994676692d07f6..ae85ab7db404364c0f35dfbf33114ce5889fc06a 100644
--- a/src/plugins/server/server_zmq.ok.ml
+++ b/src/plugins/server/server_zmq.ok.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/states.ml b/src/plugins/server/states.ml
index b7cfc0b2018bffb1107cbd114cdff273cf5dd714..3c0c94383a9ec352ab926375bdd0ca9fe181cfd1 100644
--- a/src/plugins/server/states.ml
+++ b/src/plugins/server/states.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/server/states.mli b/src/plugins/server/states.mli
index 1d73e64cf1e57c3026063b50eed84d716251f3eb..2cb91a776ae2d3146915f6e8853a4bd63684c243 100644
--- a/src/plugins/server/states.mli
+++ b/src/plugins/server/states.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/api.ml b/src/plugins/slicing/api.ml
index 3365f6b2852c35e61a32a8485de04698d57beef8..9aed03d7b4100f72cb8cb9b396181ed3515b90f3 100644
--- a/src/plugins/slicing/api.ml
+++ b/src/plugins/slicing/api.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/api.mli b/src/plugins/slicing/api.mli
index 9b36bbdb6b32e38f47fdaa55de167f0f70b37f02..6caebd7a71ce6bd8bce2257d35acd94d4fd074d0 100644
--- a/src/plugins/slicing/api.mli
+++ b/src/plugins/slicing/api.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/dune b/src/plugins/slicing/dune
index fda67cdea22236078676792d469515d6aad8b479..e7aa50cbdc513f47e2073971a175ed1a656cb15c 100644
--- a/src/plugins/slicing/dune
+++ b/src/plugins/slicing/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/slicing/dune-project b/src/plugins/slicing/dune-project
index 1790588b89177ef7c8fb4c8472ec830b87e5d84a..d2e273767bd1409201c4931c04c3e52877a82844 100644
--- a/src/plugins/slicing/dune-project
+++ b/src/plugins/slicing/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/slicing/fct_slice.ml b/src/plugins/slicing/fct_slice.ml
index 3818ca7685f0adc7a2601a704c4a7b0b55e51904..cc877cd73935a9447c21f2f13bcd681ff756cd16 100644
--- a/src/plugins/slicing/fct_slice.ml
+++ b/src/plugins/slicing/fct_slice.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/fct_slice.mli b/src/plugins/slicing/fct_slice.mli
index 64d88d35b7f7e78eea8115bd6228a5e14a877377..dc05e7e2c6f6c6365d7223f0e83699d80bd363c2 100644
--- a/src/plugins/slicing/fct_slice.mli
+++ b/src/plugins/slicing/fct_slice.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/gui/dune b/src/plugins/slicing/gui/dune
index 804ee3cdeec15ab5bdc367e8a1cca94e8f3d483b..ea496d13705f7e3af705326e0ca47fb2bbc9a560 100644
--- a/src/plugins/slicing/gui/dune
+++ b/src/plugins/slicing/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/slicing/gui/register_gui.ml b/src/plugins/slicing/gui/register_gui.ml
index 79fadce7cc702f6d82352d838bc4ccf9474ce56e..abb1e1ba87b776d87e861d373e435a6a097bfb1c 100644
--- a/src/plugins/slicing/gui/register_gui.ml
+++ b/src/plugins/slicing/gui/register_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/gui/register_gui.mli b/src/plugins/slicing/gui/register_gui.mli
index b5e91412448e104281ed793b426b1f513fb76487..87e13c443a15ef8a009741846b18cdb6dcce2058 100644
--- a/src/plugins/slicing/gui/register_gui.mli
+++ b/src/plugins/slicing/gui/register_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/printSlice.ml b/src/plugins/slicing/printSlice.ml
index 8ed3f9a3449087fdc5f7f4c00d42d8b12698c613..296f42f0c0d1bb3e7ae482078ed5dc914cf153e4 100644
--- a/src/plugins/slicing/printSlice.ml
+++ b/src/plugins/slicing/printSlice.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/printSlice.mli b/src/plugins/slicing/printSlice.mli
index 6e921f09f06be11d0367aff4c5df4668737b9593..fead7bfd7f55086505778e91d6589c4572ce3ec4 100644
--- a/src/plugins/slicing/printSlice.mli
+++ b/src/plugins/slicing/printSlice.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/register.ml b/src/plugins/slicing/register.ml
index 716d0e00e99ceaff9a1e4f7665ae73fd123c1d3d..4186fd464761c4d5f03d3a5dbfc33c2e63d14dc6 100644
--- a/src/plugins/slicing/register.ml
+++ b/src/plugins/slicing/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/register.mli b/src/plugins/slicing/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/slicing/register.mli
+++ b/src/plugins/slicing/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingActions.ml b/src/plugins/slicing/slicingActions.ml
index 056b13ac5f9650b9440f708d503738c92e9c3fc7..2e3b8ebb9c885b96cf30e315d616d3454ef24e7f 100644
--- a/src/plugins/slicing/slicingActions.ml
+++ b/src/plugins/slicing/slicingActions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingActions.mli b/src/plugins/slicing/slicingActions.mli
index 0e56465cbe4c961698061f5ad6aabc1d07e522ca..b314dd7352a92aefee2a30500d66d0b454814fe1 100644
--- a/src/plugins/slicing/slicingActions.mli
+++ b/src/plugins/slicing/slicingActions.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingCmds.ml b/src/plugins/slicing/slicingCmds.ml
index b5b773dad33e63574c1ff48cc081abcde0767ecf..cfde40037732f72791c945dcd45f57623a1e9a74 100644
--- a/src/plugins/slicing/slicingCmds.ml
+++ b/src/plugins/slicing/slicingCmds.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingCmds.mli b/src/plugins/slicing/slicingCmds.mli
index 1643eef87f1a9137962404ddaafb208ce1250e48..f14ca457d1feb2ab16b056431080bf25f12280b0 100644
--- a/src/plugins/slicing/slicingCmds.mli
+++ b/src/plugins/slicing/slicingCmds.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingInternals.ml b/src/plugins/slicing/slicingInternals.ml
index 9e7741cb519bfcd145c92572329ba22b2b61700f..5b6a35da35db0211a6ecb8feb749f71a7ebba820 100644
--- a/src/plugins/slicing/slicingInternals.ml
+++ b/src/plugins/slicing/slicingInternals.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingInternals.mli b/src/plugins/slicing/slicingInternals.mli
index 7019d516155668f1c031fb98eb18bcab5f8dd5fb..2155cec2581e815c0ee363d693fca479756828d7 100644
--- a/src/plugins/slicing/slicingInternals.mli
+++ b/src/plugins/slicing/slicingInternals.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingMacros.ml b/src/plugins/slicing/slicingMacros.ml
index 8a02ef6302158107f2d32d08410e29469abe29c6..1c7f1bf86280b04f12649eca6a34b3cf1422d726 100644
--- a/src/plugins/slicing/slicingMacros.ml
+++ b/src/plugins/slicing/slicingMacros.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingMacros.mli b/src/plugins/slicing/slicingMacros.mli
index ed6b324ce925ec3d8169f584617f6dff9680b5b5..16bcdcbd9828f34061775ab410799e92b3d9135a 100644
--- a/src/plugins/slicing/slicingMacros.mli
+++ b/src/plugins/slicing/slicingMacros.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingMarks.ml b/src/plugins/slicing/slicingMarks.ml
index f8481dd1f2aeabee96f3ce38145f14debb859bc3..dd4abd735c9f738b5a54d1aacffa65a2cd80a6bc 100644
--- a/src/plugins/slicing/slicingMarks.ml
+++ b/src/plugins/slicing/slicingMarks.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingMarks.mli b/src/plugins/slicing/slicingMarks.mli
index e28d03bf5c168fbe390888889f1bbd71f9005902..8db910e22410ff5c77738ee8d909dcf4eddf6aa7 100644
--- a/src/plugins/slicing/slicingMarks.mli
+++ b/src/plugins/slicing/slicingMarks.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingParameters.ml b/src/plugins/slicing/slicingParameters.ml
index 126468c48f60f66e7117a177c26e21cf8538661d..99606df8d84f6eb1b4b4c2514f70be21f6ecbc05 100644
--- a/src/plugins/slicing/slicingParameters.ml
+++ b/src/plugins/slicing/slicingParameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingParameters.mli b/src/plugins/slicing/slicingParameters.mli
index 2bd85406594ab8f47cc52c829e51278fe52d0dcb..fb6007173eacc8dff52ccc1a64693b1b5e7500ce 100644
--- a/src/plugins/slicing/slicingParameters.mli
+++ b/src/plugins/slicing/slicingParameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingProject.ml b/src/plugins/slicing/slicingProject.ml
index b99af0b7ae31da55ac0223e23ba83ebc4e2cd350..56be59fb5d4243af01dea6635d38ce79fdf24418 100644
--- a/src/plugins/slicing/slicingProject.ml
+++ b/src/plugins/slicing/slicingProject.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingProject.mli b/src/plugins/slicing/slicingProject.mli
index 2a5d5773824c643425e10fe7b8a9ddc24b3e74b6..04c8b27bca9e88539c78ce978e30c1d25657c791 100644
--- a/src/plugins/slicing/slicingProject.mli
+++ b/src/plugins/slicing/slicingProject.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingSelect.ml b/src/plugins/slicing/slicingSelect.ml
index 37e516e25343dab0052e79f230ab1d94c10532c1..33f27a295af0c1197269367770c5b5ef317e435f 100644
--- a/src/plugins/slicing/slicingSelect.ml
+++ b/src/plugins/slicing/slicingSelect.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingSelect.mli b/src/plugins/slicing/slicingSelect.mli
index 16ecc10392a47c0839a600d6f5fc931791d093e0..60ea880bb88399f17e5d5194fd43178d883e1cff 100644
--- a/src/plugins/slicing/slicingSelect.mli
+++ b/src/plugins/slicing/slicingSelect.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingState.ml b/src/plugins/slicing/slicingState.ml
index a95aa8e3435f45d3d682eeea2285bcd151b55241..6b7e3593061c59c3cb4c1f4e948f62ee3b0a11f8 100644
--- a/src/plugins/slicing/slicingState.ml
+++ b/src/plugins/slicing/slicingState.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingState.mli b/src/plugins/slicing/slicingState.mli
index 2e5fbafc5bc5c1e89d56b3aafc8e378765905ac9..95a87b7167359c4d44d093a9beb64d8f20904a62 100644
--- a/src/plugins/slicing/slicingState.mli
+++ b/src/plugins/slicing/slicingState.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingTransform.ml b/src/plugins/slicing/slicingTransform.ml
index e773d250b6f5b243c396a5f66c8fb19c45ccb640..db09d7a892565d2790e8913a5b11626138f8c902 100644
--- a/src/plugins/slicing/slicingTransform.ml
+++ b/src/plugins/slicing/slicingTransform.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingTransform.mli b/src/plugins/slicing/slicingTransform.mli
index f5879d8a39ac895af5a29ce230cbdd22ca46c803..06363af614c14b792dae2bb37a1deb8e483ee4e5 100644
--- a/src/plugins/slicing/slicingTransform.mli
+++ b/src/plugins/slicing/slicingTransform.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingTypes.ml b/src/plugins/slicing/slicingTypes.ml
index 3428bc56ee040dfd3f5fecee4ab52dc47ee87934..a56a1a9bd6b6c547f07f59a7a40475253901e2dc 100644
--- a/src/plugins/slicing/slicingTypes.ml
+++ b/src/plugins/slicing/slicingTypes.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/slicing/slicingTypes.mli b/src/plugins/slicing/slicingTypes.mli
index c8be622febe9d45e68dee7b40ad84117768d2a81..846da663e8511c0bced8965a494994511ca78170 100644
--- a/src/plugins/slicing/slicingTypes.mli
+++ b/src/plugins/slicing/slicingTypes.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/Sparecode.ml b/src/plugins/sparecode/Sparecode.ml
index cdc03e60cc1ea56c08c6bd698104b4857a881bb3..5f40820f9025e0024f4dfd2570f9e5469ed58ab6 100644
--- a/src/plugins/sparecode/Sparecode.ml
+++ b/src/plugins/sparecode/Sparecode.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/Sparecode.mli b/src/plugins/sparecode/Sparecode.mli
index c94f08f967e15cb044c024193d56057a1c1dbb00..6ed9b48f3a7f2551af06e4516b868a983256f165 100644
--- a/src/plugins/sparecode/Sparecode.mli
+++ b/src/plugins/sparecode/Sparecode.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/dune b/src/plugins/sparecode/dune
index 24bba5862e67904a689a51d4e4a8c46a50102954..3366ae3722ba8a4f1ddfe3ea2f4c88d14fafa71f 100644
--- a/src/plugins/sparecode/dune
+++ b/src/plugins/sparecode/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/sparecode/dune-project b/src/plugins/sparecode/dune-project
index 44da4597850926a6fdc1d729da6944ca7e6b6ec2..4520a1a9f2760cf6e6388acdf1d49f81fed2eec3 100644
--- a/src/plugins/sparecode/dune-project
+++ b/src/plugins/sparecode/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/sparecode/globs.ml b/src/plugins/sparecode/globs.ml
index a55dbb45410a574f2162e3be54943a54ad8cddf3..de859165ee08832a6b8e1c9f234bce9626622de6 100644
--- a/src/plugins/sparecode/globs.ml
+++ b/src/plugins/sparecode/globs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/globs.mli b/src/plugins/sparecode/globs.mli
index 5030e687bd9036f776ebcf7cde2e5dadde235842..441164e5a9e4656d3e69b61fd4d2e289fa3aff4a 100644
--- a/src/plugins/sparecode/globs.mli
+++ b/src/plugins/sparecode/globs.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/register.ml b/src/plugins/sparecode/register.ml
index 9cfc87fef111b9a9d01dec19534ffa4ed8eea314..77ca976d5c5e8429da5eb7c37eb6d33ff5551f70 100644
--- a/src/plugins/sparecode/register.ml
+++ b/src/plugins/sparecode/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/register.mli b/src/plugins/sparecode/register.mli
index d1faacb554f83d6b165078b0d2856464a47ab1dc..40470cd52d97cffa2356d577d95f5081657e96da 100644
--- a/src/plugins/sparecode/register.mli
+++ b/src/plugins/sparecode/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/spare_marks.ml b/src/plugins/sparecode/spare_marks.ml
index 271a330669b6f55678c44c16a5fbb629fb8e6a45..b1a786c3f0752b3415c6fb912ea6f4fe31c341e2 100644
--- a/src/plugins/sparecode/spare_marks.ml
+++ b/src/plugins/sparecode/spare_marks.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/spare_marks.mli b/src/plugins/sparecode/spare_marks.mli
index d8545cac8557ff9e9e8987af2fad3dcf2cec71da..e0e594a8d220546a93e1596cab1c32897569b38c 100644
--- a/src/plugins/sparecode/spare_marks.mli
+++ b/src/plugins/sparecode/spare_marks.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/sparecode_params.ml b/src/plugins/sparecode/sparecode_params.ml
index 1b7da06422b08dea530453778d40d160d23747ed..d79553c424be897b4f208f7b39e8cace14ff6ff3 100644
--- a/src/plugins/sparecode/sparecode_params.ml
+++ b/src/plugins/sparecode/sparecode_params.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/sparecode_params.mli b/src/plugins/sparecode/sparecode_params.mli
index 0a316e0becb6bb2ed10c29e3169b604c0116ac79..352052dfed397dc769d2ab644540eb7d9e884583 100644
--- a/src/plugins/sparecode/sparecode_params.mli
+++ b/src/plugins/sparecode/sparecode_params.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/transform.ml b/src/plugins/sparecode/transform.ml
index 74808ab49e8e10d7611565b8e93ed47889d5b903..99657bc2c8a83b82fdcbcb5ee8599426e4cc20c4 100644
--- a/src/plugins/sparecode/transform.ml
+++ b/src/plugins/sparecode/transform.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/sparecode/transform.mli b/src/plugins/sparecode/transform.mli
index 26a2181cf60cdfd364e021a224ffc09537d8a111..8c96ae890b5556b8b9a41c9c866dfabbb200f3bc 100644
--- a/src/plugins/sparecode/transform.mli
+++ b/src/plugins/sparecode/transform.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/Studia.ml b/src/plugins/studia/Studia.ml
index d7eeebd84a2d6ce4bafe8045e92447f70790eb3d..d13b3a4b5eac407b68c24063a84ad9247c375fee 100644
--- a/src/plugins/studia/Studia.ml
+++ b/src/plugins/studia/Studia.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/dune b/src/plugins/studia/dune
index daf095129ec7c1fea7828907d703631b3cc8fac5..cb37e7b5c61a1ff8824b39414046db9b72861f8a 100644
--- a/src/plugins/studia/dune
+++ b/src/plugins/studia/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/studia/dune-project b/src/plugins/studia/dune-project
index ec50963ba4768deff38cd4563069d876b66ff3e2..ee09597caa5fd7c717638113a249d70a529ad8b8 100644
--- a/src/plugins/studia/dune-project
+++ b/src/plugins/studia/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/studia/gui/dune b/src/plugins/studia/gui/dune
index 804fda488c2a6d69651af8a88e1d83396373e983..8f6837d249a99bec4fdcfa0e6cbf57388ee6f415 100644
--- a/src/plugins/studia/gui/dune
+++ b/src/plugins/studia/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/studia/gui/studia_gui.ml b/src/plugins/studia/gui/studia_gui.ml
index ac71b45402b35c43c9b1dfdcbeb63232a9ce56ca..9699a7a9332a56426dc13c6afe487f9c94a52732 100644
--- a/src/plugins/studia/gui/studia_gui.ml
+++ b/src/plugins/studia/gui/studia_gui.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/gui/studia_gui.mli b/src/plugins/studia/gui/studia_gui.mli
index 98116467218d280066f062e939f7ad2f8c2b5fa9..300fa45474d120d10c4d42d2d91930bf2b61dfe0 100644
--- a/src/plugins/studia/gui/studia_gui.mli
+++ b/src/plugins/studia/gui/studia_gui.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/options.ml b/src/plugins/studia/options.ml
index 70b4b4c03e4cd7090e07c260a9622d4ae6aef1d6..f088db8ca520c200ae4b71ee3fd6ba970f0dbeff 100644
--- a/src/plugins/studia/options.ml
+++ b/src/plugins/studia/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/options.mli b/src/plugins/studia/options.mli
index 10051dc6657069cad6509103136d0a3b0ee4ba6c..e2f536f2c15d2a13126ced711636c9fd93d59359 100644
--- a/src/plugins/studia/options.mli
+++ b/src/plugins/studia/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/reads.ml b/src/plugins/studia/reads.ml
index 058691cd35cfaba5343dd7bbbd8ada79029b0270..497b916ae66ad3f008d2a657406064ed37508f32 100644
--- a/src/plugins/studia/reads.ml
+++ b/src/plugins/studia/reads.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/reads.mli b/src/plugins/studia/reads.mli
index e632f51cb9c51a04101e61343b1a6167163b566c..1bd46a70f1276a4df9032fba2a87391e3f9c0b1d 100644
--- a/src/plugins/studia/reads.mli
+++ b/src/plugins/studia/reads.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/studia_request.ml b/src/plugins/studia/studia_request.ml
index 2861a5a3f9768ee81e3a5c67654dc3f56e1736e5..b79ea812ffe3922e1fed520a07b0a2546a517dac 100644
--- a/src/plugins/studia/studia_request.ml
+++ b/src/plugins/studia/studia_request.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/studia_request.mli b/src/plugins/studia/studia_request.mli
index f8527f003a83cf65fc90a3c44671918f21e54b4c..d93b4d91453cb269307fae5cd958b75737543f70 100644
--- a/src/plugins/studia/studia_request.mli
+++ b/src/plugins/studia/studia_request.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/writes.ml b/src/plugins/studia/writes.ml
index 4d566dfcc6430db48ec456b18d8cf68b4238070b..1e883fb773dc6e8541d7806b541306a2b7661ebe 100644
--- a/src/plugins/studia/writes.ml
+++ b/src/plugins/studia/writes.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/studia/writes.mli b/src/plugins/studia/writes.mli
index 8bb6e8bdb9732463f60e92ce9ec39662f4d92d7d..ab8239935f6357772603b7c84fd1f740b0d7c749 100644
--- a/src/plugins/studia/writes.mli
+++ b/src/plugins/studia/writes.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/users/Users.ml b/src/plugins/users/Users.ml
index a46d7f6d00e8417a4dd63ee90266c8fd0734b464..cfe30a54fc28b2e346c55b60ee97f1a9cc958e4c 100644
--- a/src/plugins/users/Users.ml
+++ b/src/plugins/users/Users.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/users/Users.mli b/src/plugins/users/Users.mli
index 962ae86f83d93a78cc93e729da2bf91cf7cfbdb7..3744739c89f5ab555ac76295c213932107b6833f 100644
--- a/src/plugins/users/Users.mli
+++ b/src/plugins/users/Users.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/users/dune b/src/plugins/users/dune
index 3bdf049483ba12ae10818bb061766d9c25538f91..8e2ad504bfa54661d360373a94580c70fc8b4433 100644
--- a/src/plugins/users/dune
+++ b/src/plugins/users/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/users/dune-project b/src/plugins/users/dune-project
index eddf8bd67593b3823f0e79afced203e4bdaa6b9e..3fac43ea59c17a81d8cef3eb5a892d10838d72e4 100644
--- a/src/plugins/users/dune-project
+++ b/src/plugins/users/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/users/users_register.ml b/src/plugins/users/users_register.ml
index 9cb63d7e0d9696da87f1086abcbb54771e8e5313..250f4346a8ba5913d402291645938b2f455b42b7 100644
--- a/src/plugins/users/users_register.ml
+++ b/src/plugins/users/users_register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/users/users_register.mli b/src/plugins/users/users_register.mli
index 8b123bf685626ec5f989bc1dbe02eb0259edd245..ac3b4f8c863fe8a90e8f015afea4011d92b7dcfa 100644
--- a/src/plugins/users/users_register.mli
+++ b/src/plugins/users/users_register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/Variadic.ml b/src/plugins/variadic/Variadic.ml
index 9598a3362dd977efc7b11a77d9234e76e476266f..b27a354be8832705ef6d44c0d7a7de29dec589c2 100644
--- a/src/plugins/variadic/Variadic.ml
+++ b/src/plugins/variadic/Variadic.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/builder.ml b/src/plugins/variadic/builder.ml
index e1e966e63d20c7349069d1efd359b9806cfb44c8..45b4644c71630ad245664413f4abf73ba6a7341f 100644
--- a/src/plugins/variadic/builder.ml
+++ b/src/plugins/variadic/builder.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/classify.ml b/src/plugins/variadic/classify.ml
index 7717ee908379ed0e830a06ec4b92ec6be8d108d2..06690edd43b1774fe4a713e0ec4e6ee5bf5abadd 100644
--- a/src/plugins/variadic/classify.ml
+++ b/src/plugins/variadic/classify.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/classify.mli b/src/plugins/variadic/classify.mli
index d4b0b05f02bf614f0178861e496bf801b5bf29a4..f704cd9e4d80f9391e014c4ff09682fb7d161c82 100644
--- a/src/plugins/variadic/classify.mli
+++ b/src/plugins/variadic/classify.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/dune b/src/plugins/variadic/dune
index 573b69bdd08ee569948ed1bca825c221d5fd749a..805d06b94c0cd9e21c00ac86ab6ab8a1297c74e2 100644
--- a/src/plugins/variadic/dune
+++ b/src/plugins/variadic/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/variadic/dune-project b/src/plugins/variadic/dune-project
index f1708b34d534e6c01e6888b9c252ad6eb9a2e5a0..cb78e6ac14f6edb3f04ed62413b476f515d601c0 100644
--- a/src/plugins/variadic/dune-project
+++ b/src/plugins/variadic/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/variadic/environment.ml b/src/plugins/variadic/environment.ml
index e561d19a840790e654362ed126dcde9c1018556b..b295d3cc9e8cbd40066196d25e58328ed5241708 100644
--- a/src/plugins/variadic/environment.ml
+++ b/src/plugins/variadic/environment.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/environment.mli b/src/plugins/variadic/environment.mli
index d8e54a24f77c9bf0ff48d574824ef0823fa820d1..120316817de45d276d01e9449ed9c3005ab7854a 100644
--- a/src/plugins/variadic/environment.mli
+++ b/src/plugins/variadic/environment.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/extends.ml b/src/plugins/variadic/extends.ml
index ed6fe513160e09ba954c26e3118f384ceb1b9243..305843a68d71515654caaa6bfa9b2f80a38a88bf 100644
--- a/src/plugins/variadic/extends.ml
+++ b/src/plugins/variadic/extends.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/extends.mli b/src/plugins/variadic/extends.mli
index 784c6f230eaf0eb36ab33d349797335d126a62b9..15203d73319fdc53be3405699830780df1964f97 100644
--- a/src/plugins/variadic/extends.mli
+++ b/src/plugins/variadic/extends.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_parser.ml b/src/plugins/variadic/format_parser.ml
index 1d347778349bd32dca483343649dc99404b324de..cfcd2d4e4c2f86d3b6180c4f81bcb3f2a34fae09 100644
--- a/src/plugins/variadic/format_parser.ml
+++ b/src/plugins/variadic/format_parser.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_parser.mli b/src/plugins/variadic/format_parser.mli
index 9d6f788f705a49e252898c584589519abee20482..4b561064a88ddb87d43472083d146b1961352565 100644
--- a/src/plugins/variadic/format_parser.mli
+++ b/src/plugins/variadic/format_parser.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_pprint.ml b/src/plugins/variadic/format_pprint.ml
index 3f9da0f611f059e9a9db0706af6607b038eeb82a..3eff6e5c032852f31a283ca4046d65ff04ac3a5d 100644
--- a/src/plugins/variadic/format_pprint.ml
+++ b/src/plugins/variadic/format_pprint.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_pprint.mli b/src/plugins/variadic/format_pprint.mli
index 64d286bbeb75ad6bb88b83b8aa241136a60acf56..45dcc3dd121fc88982c48cf03cb79a4ac5695dc6 100644
--- a/src/plugins/variadic/format_pprint.mli
+++ b/src/plugins/variadic/format_pprint.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_string.ml b/src/plugins/variadic/format_string.ml
index e0355ff7d368cdf5567878b923ca4c0bcabef6f5..d3f6e992da60ce75582bb46b1e6fe73fb374b00e 100644
--- a/src/plugins/variadic/format_string.ml
+++ b/src/plugins/variadic/format_string.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_string.mli b/src/plugins/variadic/format_string.mli
index a08adbb426c0cf3b78e6a06443021c374e7f1a00..5d43e06a5e023afb926974aa736fb1989a1b6473 100644
--- a/src/plugins/variadic/format_string.mli
+++ b/src/plugins/variadic/format_string.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_typer.ml b/src/plugins/variadic/format_typer.ml
index d5f60a7ee7853b0f8da0754a4bc6158f9fb59d49..57ca6fae86a6d2096ad0843cc5bd504e77f5ce13 100644
--- a/src/plugins/variadic/format_typer.ml
+++ b/src/plugins/variadic/format_typer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_typer.mli b/src/plugins/variadic/format_typer.mli
index dfde09460c5248cb5e18c068e3aa470533f3fc52..95e686aadb7caf81963b1c009e409c449ebb5233 100644
--- a/src/plugins/variadic/format_typer.mli
+++ b/src/plugins/variadic/format_typer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/format_types.ml b/src/plugins/variadic/format_types.ml
index 6fe19fa39cf4fbcafe67a05b4ff6b5cabc07da8a..295ce18f7cfb421f9b71bb9862b23d32c9f1cd74 100644
--- a/src/plugins/variadic/format_types.ml
+++ b/src/plugins/variadic/format_types.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/generic.ml b/src/plugins/variadic/generic.ml
index 162a74b294d035492dc8a16ba686d52f2e1a297a..1042673127e20e1d5b0a1b23decfeb49bad7498d 100644
--- a/src/plugins/variadic/generic.ml
+++ b/src/plugins/variadic/generic.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/generic.mli b/src/plugins/variadic/generic.mli
index 09edf87f1d060f8c97ec1081a09c39c3b57eead6..378b884e053f880071a48ecd167b08ec8f6839e8 100644
--- a/src/plugins/variadic/generic.mli
+++ b/src/plugins/variadic/generic.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/options.ml b/src/plugins/variadic/options.ml
index cd89063954dd92b18d23c5832016d8947b399c98..0213a1b3815dded5def136c6b0db78a16efb4e9c 100644
--- a/src/plugins/variadic/options.ml
+++ b/src/plugins/variadic/options.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/options.mli b/src/plugins/variadic/options.mli
index 48083f16573930ace724418b926ed99c67b23003..4a67c7ac3c63bfe7d55508b7a753c976dfe21b99 100644
--- a/src/plugins/variadic/options.mli
+++ b/src/plugins/variadic/options.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/register.ml b/src/plugins/variadic/register.ml
index 6411c22b730c332011c45abc7c52fedcb56c6df3..425e8454b086204c4e7ef5df341a74139b13f5c5 100644
--- a/src/plugins/variadic/register.ml
+++ b/src/plugins/variadic/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/register.mli b/src/plugins/variadic/register.mli
index 297da3eb394ab648696630993141f5f678a7b1ef..9cdb0a5e5be3286bf22b3ab7d958523d102dffe5 100644
--- a/src/plugins/variadic/register.mli
+++ b/src/plugins/variadic/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/replacements.ml b/src/plugins/variadic/replacements.ml
index 19c35a7f1e529a4878f74440e676c32ea1c6f73f..f57ab48f7fd219a1950ff0252713d3b58ddc2b70 100644
--- a/src/plugins/variadic/replacements.ml
+++ b/src/plugins/variadic/replacements.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/replacements.mli b/src/plugins/variadic/replacements.mli
index 76669f8509942a01c7784a1c0844c2f41b5b489b..339d32d942e169b11b840088e2be17b69ad3c711 100644
--- a/src/plugins/variadic/replacements.mli
+++ b/src/plugins/variadic/replacements.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/standard.ml b/src/plugins/variadic/standard.ml
index 366a587f94f596452fb982aca1898b06d3db61ba..964ef79b02beeb52c2144ad316eef76ef3c00864 100644
--- a/src/plugins/variadic/standard.ml
+++ b/src/plugins/variadic/standard.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/standard.mli b/src/plugins/variadic/standard.mli
index f7350aa4a112e9a89ef42eb1ba96199b3d1cfbce..b1e35240299ed66a290057f12296a4b633973908 100644
--- a/src/plugins/variadic/standard.mli
+++ b/src/plugins/variadic/standard.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/tests/known/oracle/printf.res.oracle b/src/plugins/variadic/tests/known/oracle/printf.res.oracle
index 7b945647be0216ee15d342ea55494da9642fb01b..00a916d66f04b9e80fda0b2e932f9c9f0f0f693a 100644
--- a/src/plugins/variadic/tests/known/oracle/printf.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/printf.res.oracle
@@ -1,14 +1,14 @@
-[variadic] FRAMAC_SHARE/libc/wchar.h:272: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:294: 
   Declaration of variadic function fwprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:274: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:296: 
   Declaration of variadic function swprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:276: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:298: 
   Declaration of variadic function wprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:279: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:301: 
   Declaration of variadic function wscanf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:281: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:303: 
   Declaration of variadic function fwscanf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:283: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:305: 
   Declaration of variadic function swscanf.
 [variadic] FRAMAC_SHARE/libc/stdio.h:207: 
   Declaration of variadic function fprintf.
diff --git a/src/plugins/variadic/tests/known/oracle/printf_wrong_arity.res.oracle b/src/plugins/variadic/tests/known/oracle/printf_wrong_arity.res.oracle
index 4bc1b2c08cd50b61c5c8daf12624e722166eac3b..99fb90220628d73ce5c536af4f37862117360fc0 100644
--- a/src/plugins/variadic/tests/known/oracle/printf_wrong_arity.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/printf_wrong_arity.res.oracle
@@ -42,6 +42,7 @@
 #include "errno.h"
 #include "stdarg.h"
 #include "stddef.h"
+#include "stdint.h"
 #include "stdio.c"
 #include "stdio.h"
 #include "stdlib.h"
diff --git a/src/plugins/variadic/tests/known/oracle/snprintf.res.oracle b/src/plugins/variadic/tests/known/oracle/snprintf.res.oracle
index d02dcac5510941570a258d4eb2a201b8be69f6d4..ed5803742848fec0b861d13f8868bd34fda7bedf 100644
--- a/src/plugins/variadic/tests/known/oracle/snprintf.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/snprintf.res.oracle
@@ -21,7 +21,7 @@
 [variadic] snprintf.c:15: 
   Translating call to snprintf to a call to the specialized version snprintf_va_2.
 [eva] Analyzing a complete application starting at main
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] using specification for function snprintf_va_1
 [eva] FRAMAC_SHARE/libc/stdio.h:213: 
diff --git a/src/plugins/variadic/tests/known/oracle/swprintf.res.oracle b/src/plugins/variadic/tests/known/oracle/swprintf.res.oracle
index 346dd2a50c7cf708e909cba481810d818a33ed59..dc5aa4bc442e933bfd48886bf346e8db86cd04ff 100644
--- a/src/plugins/variadic/tests/known/oracle/swprintf.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/swprintf.res.oracle
@@ -1,14 +1,14 @@
-[variadic] FRAMAC_SHARE/libc/wchar.h:272: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:294: 
   Declaration of variadic function fwprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:274: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:296: 
   Declaration of variadic function swprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:276: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:298: 
   Declaration of variadic function wprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:279: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:301: 
   Declaration of variadic function wscanf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:281: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:303: 
   Declaration of variadic function fwscanf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:283: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:305: 
   Declaration of variadic function swscanf.
 [variadic] FRAMAC_SHARE/libc/stdio.h:207: 
   Declaration of variadic function fprintf.
@@ -35,7 +35,7 @@
 [eva] Analyzing a complete application starting at main
 [eva] using specification for function wmemset
 [eva] using specification for function swprintf_va_1
-[eva] FRAMAC_SHARE/libc/wchar.h:274: 
+[eva] FRAMAC_SHARE/libc/wchar.h:296: 
   Cannot evaluate range bound wformat_length(format) - 1
   (unsupported ACSL construct: logic function wformat_length). Approximating
 [eva:alarm] swprintf.c:12: Warning: 
@@ -55,6 +55,7 @@
 #include "errno.h"
 #include "signal.h"
 #include "stdarg.h"
+#include "stddef.h"
 #include "stdio.h"
 #include "string.h"
 #include "strings.h"
diff --git a/src/plugins/variadic/tests/known/oracle/wchar.res.oracle b/src/plugins/variadic/tests/known/oracle/wchar.res.oracle
index defbdf84a051614e4391d7148f3ae23bb9116f7d..e845bbf02f0ea226aabc42339cdb937ebb3eadc2 100644
--- a/src/plugins/variadic/tests/known/oracle/wchar.res.oracle
+++ b/src/plugins/variadic/tests/known/oracle/wchar.res.oracle
@@ -1,14 +1,14 @@
-[variadic] FRAMAC_SHARE/libc/wchar.h:272: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:294: 
   Declaration of variadic function fwprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:274: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:296: 
   Declaration of variadic function swprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:276: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:298: 
   Declaration of variadic function wprintf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:279: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:301: 
   Declaration of variadic function wscanf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:281: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:303: 
   Declaration of variadic function fwscanf.
-[variadic] FRAMAC_SHARE/libc/wchar.h:283: 
+[variadic] FRAMAC_SHARE/libc/wchar.h:305: 
   Declaration of variadic function swscanf.
 [variadic] FRAMAC_SHARE/libc/stdio.h:207: 
   Declaration of variadic function fprintf.
@@ -84,6 +84,7 @@
 #include "errno.h"
 #include "signal.h"
 #include "stdarg.h"
+#include "stddef.h"
 #include "stdio.h"
 #include "string.h"
 #include "strings.h"
diff --git a/src/plugins/variadic/translate.ml b/src/plugins/variadic/translate.ml
index 95778a48f085fb1313b855c324d699fcbae8d43d..1d23d76ac296a7b03c5ada844ff5902a848bf58e 100644
--- a/src/plugins/variadic/translate.ml
+++ b/src/plugins/variadic/translate.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/translate.mli b/src/plugins/variadic/translate.mli
index 259b4926ce6204fe2b60baf0852a9ddb80e6eb9f..9b6a3d57ebdfe2a177a228981d34134bdad9cfb5 100644
--- a/src/plugins/variadic/translate.mli
+++ b/src/plugins/variadic/translate.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/variadic/va_types.ml b/src/plugins/variadic/va_types.ml
index c25a49369f708cd9b84bdd275b50a738ebc29c9a..34899e1786d8e86fbff7e010b45421b99d64ba44 100644
--- a/src/plugins/variadic/va_types.ml
+++ b/src/plugins/variadic/va_types.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/AssignsCompleteness.ml b/src/plugins/wp/AssignsCompleteness.ml
index 1592c64b198f82ab0cc38306fbfc1190ea3903ff..067c0432d668820cb9f858608a1540b625e2f62f 100644
--- a/src/plugins/wp/AssignsCompleteness.ml
+++ b/src/plugins/wp/AssignsCompleteness.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/AssignsCompleteness.mli b/src/plugins/wp/AssignsCompleteness.mli
index 82e056f56ba962ebf6fe1a3bb190ad03f1701acc..6ee5960176df15f7414e42283fd5e42649be70b6 100644
--- a/src/plugins/wp/AssignsCompleteness.mli
+++ b/src/plugins/wp/AssignsCompleteness.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Auto.ml b/src/plugins/wp/Auto.ml
index e2e040243ca5d34c14d347c4978dc086ec4fc813..b0677e463beb502a030200a9e823d7bcf372caa9 100644
--- a/src/plugins/wp/Auto.ml
+++ b/src/plugins/wp/Auto.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Auto.mli b/src/plugins/wp/Auto.mli
index a5329fad4848a4ff9b6c56bd62983aa5fa11d1f1..556f179960676c4ff0b52bfae45a30d20d5b018e 100644
--- a/src/plugins/wp/Auto.mli
+++ b/src/plugins/wp/Auto.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cache.ml b/src/plugins/wp/Cache.ml
index 090482b711c92fca8f90279b30762822e69779d1..3e79eb86f7bf18e5a531cc58bb58aa0109935485 100644
--- a/src/plugins/wp/Cache.ml
+++ b/src/plugins/wp/Cache.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cache.mli b/src/plugins/wp/Cache.mli
index 5ee0e5deec01408f4c1c2c5e1d9f00b1f33576e3..0cac4ddff95a5f4b007113184a1bef8a92289ff8 100644
--- a/src/plugins/wp/Cache.mli
+++ b/src/plugins/wp/Cache.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/CfgCompiler.ml b/src/plugins/wp/CfgCompiler.ml
index 5b129ba4aeb2b776b37e3c4f42c53ea607e57c08..8e0dd74072ee29902f82367327544f4be0a2d294 100644
--- a/src/plugins/wp/CfgCompiler.ml
+++ b/src/plugins/wp/CfgCompiler.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/CfgCompiler.mli b/src/plugins/wp/CfgCompiler.mli
index 7f1f5e4543f985bfa2ac821932b6154379cb43a0..718af8fe6fb02f2ba33ee6f67db6b51c98b9a3ff 100644
--- a/src/plugins/wp/CfgCompiler.mli
+++ b/src/plugins/wp/CfgCompiler.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cfloat.ml b/src/plugins/wp/Cfloat.ml
index 65eb612183f0b51f998a3532b43bd51bce5f41ec..2dfe89528a82bccef033b2254a533c0e8ba259d9 100644
--- a/src/plugins/wp/Cfloat.ml
+++ b/src/plugins/wp/Cfloat.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cfloat.mli b/src/plugins/wp/Cfloat.mli
index cf76dcf137b28dc513d8916ee70013813e045e5d..21ea1ca7303ed613bbd2b693c5605cdea7cb1219 100644
--- a/src/plugins/wp/Cfloat.mli
+++ b/src/plugins/wp/Cfloat.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Changelog b/src/plugins/wp/Changelog
index 98675f9071e26568945b029c8f1ab51997678a51..fd106bfdd805723459da066371407fc91ed51114 100644
--- a/src/plugins/wp/Changelog
+++ b/src/plugins/wp/Changelog
@@ -24,11 +24,20 @@
 Plugin WP <next-release>
 ###############################################################################
 
+###############################################################################
+Plugin WP 29.0 (Copper)
+###############################################################################
+
+
+- WP          [2024-04-16] Fix interactive prover startup when the script already
+                           exists
+- WP          [2024-03-29] Type logic function calls when they have C types
 - WP          [2024-03-26] wp_nullable_args is renamed \wp::nullable_args to
                            follow kernel changes
 - WP          [2024-01-24] Introduce counter examples via the new option
                            -wp-counter-examples. Also introduce an ACSL extension
                            to create probes on terms for counter examples.
+- Gui         [2023-12-05] Introduce goal visualization and tactics in Ivette
 
 ###############################################################################
 Plugin WP 28.1 (Nickel)
diff --git a/src/plugins/wp/Cint.ml b/src/plugins/wp/Cint.ml
index 4ecda9a19025ed96a63c26844e0c26053f9991ca..772bffedf5deb531c7548eabcb47226a71048b02 100644
--- a/src/plugins/wp/Cint.ml
+++ b/src/plugins/wp/Cint.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cint.mli b/src/plugins/wp/Cint.mli
index 835fc4f423e23568f99bfc3dec262f70ea4f235a..27bc1d98e5810595b507add206a8de7cd03318b1 100644
--- a/src/plugins/wp/Cint.mli
+++ b/src/plugins/wp/Cint.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cleaning.ml b/src/plugins/wp/Cleaning.ml
index 6343457d294e1e33596314f5bfbe4373d0d05730..7dca56e7b1b9958bd9d7b60e901d3607a27d36a5 100644
--- a/src/plugins/wp/Cleaning.ml
+++ b/src/plugins/wp/Cleaning.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cleaning.mli b/src/plugins/wp/Cleaning.mli
index e849aeb991ebac991c142dbc9ea81a5133af8232..38b1006f3b1f8b838863949b0e3b68bd701d7799 100644
--- a/src/plugins/wp/Cleaning.mli
+++ b/src/plugins/wp/Cleaning.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cmath.ml b/src/plugins/wp/Cmath.ml
index 241b0f1995e23ce343dfbcebd30507f56ad4432b..7e42d5c1b3b7e296b2022db469bc38fa1d3ad45c 100644
--- a/src/plugins/wp/Cmath.ml
+++ b/src/plugins/wp/Cmath.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cmath.mli b/src/plugins/wp/Cmath.mli
index 852434bfa2444e7e9f08190d98e7621fce5b3fed..40107cb4a2c6bba137c0e95c3a94c9e067be5677 100644
--- a/src/plugins/wp/Cmath.mli
+++ b/src/plugins/wp/Cmath.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/CodeSemantics.ml b/src/plugins/wp/CodeSemantics.ml
index df85da95bfd739a9db2ed4c29d477d83b9c43898..ce024d4c0f5ba6f35f6cd9829dec6d07b1d2f567 100644
--- a/src/plugins/wp/CodeSemantics.ml
+++ b/src/plugins/wp/CodeSemantics.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/CodeSemantics.mli b/src/plugins/wp/CodeSemantics.mli
index 358e390b2af98d6c61c08490d6d5d1bb0f67c4d6..88e6ba595797e73f30b4bd78f23d3fb345658645 100644
--- a/src/plugins/wp/CodeSemantics.mli
+++ b/src/plugins/wp/CodeSemantics.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Conditions.ml b/src/plugins/wp/Conditions.ml
index 461d4303122d3a9b69f716b5b366c9e53eb4afc8..95eab2516161c5b6790641daf375257467e96a85 100644
--- a/src/plugins/wp/Conditions.ml
+++ b/src/plugins/wp/Conditions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Conditions.mli b/src/plugins/wp/Conditions.mli
index 4f314f0ac7168d74110139900a53a246f197d994..18c920feae269de6974487dbdd36b49bffe3aa53 100644
--- a/src/plugins/wp/Conditions.mli
+++ b/src/plugins/wp/Conditions.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Context.ml b/src/plugins/wp/Context.ml
index 7125d3e988e48332bbd990bdb07ed58f14bb5223..8ff81368fc1a48e4509a59c79055f18e89a0089e 100644
--- a/src/plugins/wp/Context.ml
+++ b/src/plugins/wp/Context.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Context.mli b/src/plugins/wp/Context.mli
index 73d3baa335a6eed325939e67b217d0f115a3866f..46777daf4a46a55ce3a0c1ceeda2d38b8a9356b1 100644
--- a/src/plugins/wp/Context.mli
+++ b/src/plugins/wp/Context.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cstring.ml b/src/plugins/wp/Cstring.ml
index 650d292ebdff39966315f85fdeb8372d2a7c21c0..d1baba17090123058eb33a22b097d82cf4fe6075 100644
--- a/src/plugins/wp/Cstring.ml
+++ b/src/plugins/wp/Cstring.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cstring.mli b/src/plugins/wp/Cstring.mli
index 4e7d3eb9d8a163523d3a277dbb583abfaa96597b..6c61a235af094d692dbbc80317ad60748154bb67 100644
--- a/src/plugins/wp/Cstring.mli
+++ b/src/plugins/wp/Cstring.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cvalues.ml b/src/plugins/wp/Cvalues.ml
index eb5550382a16e41c745b25763a32a690c7147d6b..c0af767bbf0912e5d74308d3d58028222dde7437 100644
--- a/src/plugins/wp/Cvalues.ml
+++ b/src/plugins/wp/Cvalues.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Cvalues.mli b/src/plugins/wp/Cvalues.mli
index e27a2e58e5d8ff4f89ec39520eb650f1ed343893..20302650872ba4ea3318fcda7462c5a69adf2f61 100644
--- a/src/plugins/wp/Cvalues.mli
+++ b/src/plugins/wp/Cvalues.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Definitions.ml b/src/plugins/wp/Definitions.ml
index 13d6a1c3f164d20db405ed225574ccab1a1ab442..d3fc19a0fe83999b5718ac44b73b9ed1465391a1 100644
--- a/src/plugins/wp/Definitions.ml
+++ b/src/plugins/wp/Definitions.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Definitions.mli b/src/plugins/wp/Definitions.mli
index 418e9dbbe88147fe985730ebccab60a0ac8d3404..16ce71cef4f28702dd3e6d76c80c066f0fbf4f37 100644
--- a/src/plugins/wp/Definitions.mli
+++ b/src/plugins/wp/Definitions.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Factory.ml b/src/plugins/wp/Factory.ml
index e99020163ddf696e3603a308075f787aba7b3804..6c66a582bf1367a4012415a32b106f6c75267bb4 100644
--- a/src/plugins/wp/Factory.ml
+++ b/src/plugins/wp/Factory.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Factory.mli b/src/plugins/wp/Factory.mli
index 4381e4bd72cec84e66a71db0b768cd783e919d5d..eaa02b38e678049a00ff835a010c649e115e3b88 100644
--- a/src/plugins/wp/Factory.mli
+++ b/src/plugins/wp/Factory.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Filtering.ml b/src/plugins/wp/Filtering.ml
index a586f8820eb613fa0eeb946924d308f880c69a5e..581b172de744e114617e84099e7e91fb1892d889 100644
--- a/src/plugins/wp/Filtering.ml
+++ b/src/plugins/wp/Filtering.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Filtering.mli b/src/plugins/wp/Filtering.mli
index 1f522d270fb7f4495eb8a434dc0564f426d815df..bd07733bf5d0d9e7a8b6d3bfadd01fbf0d3ad702 100644
--- a/src/plugins/wp/Filtering.mli
+++ b/src/plugins/wp/Filtering.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Footprint.ml b/src/plugins/wp/Footprint.ml
index c5671173e3f222b340036ab5446644af6bcbf638..f0c57ce17dfd0f52a1fb1f0d6c2863c42882ffee 100644
--- a/src/plugins/wp/Footprint.ml
+++ b/src/plugins/wp/Footprint.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Footprint.mli b/src/plugins/wp/Footprint.mli
index f972a4fe3d973461c431d976a485657471e5765e..f92af9dded8e843122eb55e18ef546e7b299ed28 100644
--- a/src/plugins/wp/Footprint.mli
+++ b/src/plugins/wp/Footprint.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Generator.ml b/src/plugins/wp/Generator.ml
index 90b1376ad36aad5e1a9c0f1975b85d1ca0859483..fa35b58d6c31408b40576afd7bb9ee8e7f9b61a7 100644
--- a/src/plugins/wp/Generator.ml
+++ b/src/plugins/wp/Generator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Generator.mli b/src/plugins/wp/Generator.mli
index 3cbae65937013e258cd950f4c8ca6a6c08fed635..b69d2e8dcd33fe329d23355b01aa898908a1a19d 100644
--- a/src/plugins/wp/Generator.mli
+++ b/src/plugins/wp/Generator.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Lang.ml b/src/plugins/wp/Lang.ml
index ffaa58035207fd130a77ecd550412877bcc76402..f8924443306b6cdcc99d6ecdf844a4a5039c8a19 100644
--- a/src/plugins/wp/Lang.ml
+++ b/src/plugins/wp/Lang.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Lang.mli b/src/plugins/wp/Lang.mli
index abad0dc5df2372e8431329c04e11ad9b3fd85da7..ecf24e45abda4f7f5c9b706c2d947915de152c0f 100644
--- a/src/plugins/wp/Lang.mli
+++ b/src/plugins/wp/Lang.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Layout.ml b/src/plugins/wp/Layout.ml
index 645575e651ebcebf44d607313973e9d1b05a2796..39b59cd426aa54145b25cf23dbd39b524abe6358 100644
--- a/src/plugins/wp/Layout.ml
+++ b/src/plugins/wp/Layout.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Layout.mli b/src/plugins/wp/Layout.mli
index 4387f29979b5be54a66052b27fb855e6923782e6..5370aa2299e1ca43c79644f52c12c27e6815f7ac 100644
--- a/src/plugins/wp/Layout.mli
+++ b/src/plugins/wp/Layout.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Letify.ml b/src/plugins/wp/Letify.ml
index a10eb79cfdbe2c303e8cc99cf505b4caf116a4f7..7e1c5a45c1d0b76019a9d271f7d856737a656f50 100644
--- a/src/plugins/wp/Letify.ml
+++ b/src/plugins/wp/Letify.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Letify.mli b/src/plugins/wp/Letify.mli
index 5444f3a104d88514aa95dfdc540b176bf5e1beed..0ea31de4299294796c7770937780c51870df7cf7 100644
--- a/src/plugins/wp/Letify.mli
+++ b/src/plugins/wp/Letify.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicAssigns.ml b/src/plugins/wp/LogicAssigns.ml
index b149c864ea88513d74b189aea11fd5ea3fb23a44..5b2fa169e22aba14061e6eea5dd1da540750cb91 100644
--- a/src/plugins/wp/LogicAssigns.ml
+++ b/src/plugins/wp/LogicAssigns.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicAssigns.mli b/src/plugins/wp/LogicAssigns.mli
index 4b3ebbf55f582151b153d6f261eee7308d451be2..4e06766264d8ab2730b6cfd336ca12d6f845a5c4 100644
--- a/src/plugins/wp/LogicAssigns.mli
+++ b/src/plugins/wp/LogicAssigns.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicBuiltins.ml b/src/plugins/wp/LogicBuiltins.ml
index 035e819e32211860865f56b936936b4a38bc14de..20a6f81500acda300c516d1980d85e3d35849c5f 100644
--- a/src/plugins/wp/LogicBuiltins.ml
+++ b/src/plugins/wp/LogicBuiltins.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicBuiltins.mli b/src/plugins/wp/LogicBuiltins.mli
index 274b8c774849eafea23891a74ae51ecea11895c6..504bd54799b54d0221a031e157494710e58f6002 100644
--- a/src/plugins/wp/LogicBuiltins.mli
+++ b/src/plugins/wp/LogicBuiltins.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicCompiler.ml b/src/plugins/wp/LogicCompiler.ml
index 399a5abea2e8384b3fda22a6358e30a2e1405b1a..7f264061d967929e24742ee0bce6e75e10974da8 100644
--- a/src/plugins/wp/LogicCompiler.ml
+++ b/src/plugins/wp/LogicCompiler.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicCompiler.mli b/src/plugins/wp/LogicCompiler.mli
index 4df07b8e67987ad8ffcaa4ac734a2a4dac295c47..34698394d683380804f130a09c2475bacd4d7778 100644
--- a/src/plugins/wp/LogicCompiler.mli
+++ b/src/plugins/wp/LogicCompiler.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicSemantics.ml b/src/plugins/wp/LogicSemantics.ml
index aac2295277c1a6dd9d9d60176dfe5a7d57192afe..bb695d8c004a37c4eb8aeeefe2d1f848dd7c240c 100644
--- a/src/plugins/wp/LogicSemantics.ml
+++ b/src/plugins/wp/LogicSemantics.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicSemantics.mli b/src/plugins/wp/LogicSemantics.mli
index a723e172ac2ef59074401902abb6ff183eac57dd..8be1ac7634617ff85a44cda3312658f5b5a171c3 100644
--- a/src/plugins/wp/LogicSemantics.mli
+++ b/src/plugins/wp/LogicSemantics.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicUsage.ml b/src/plugins/wp/LogicUsage.ml
index 800f68faa67d635fa88e182fec42cf387307e25c..7cebbc5d2e4051eb6dc3d648356aa4a4d6502af5 100644
--- a/src/plugins/wp/LogicUsage.ml
+++ b/src/plugins/wp/LogicUsage.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/LogicUsage.mli b/src/plugins/wp/LogicUsage.mli
index 2650640095fe937c099623de24805889641630b0..41a079d1471e98357b3fcac346c7e39aa7cac385 100644
--- a/src/plugins/wp/LogicUsage.mli
+++ b/src/plugins/wp/LogicUsage.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Matrix.ml b/src/plugins/wp/Matrix.ml
index af5bdcceeadde3fc694fc55509534b51b54ad02e..bbf397bd496c728946bebfa301fddce6faf7e769 100644
--- a/src/plugins/wp/Matrix.ml
+++ b/src/plugins/wp/Matrix.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Matrix.mli b/src/plugins/wp/Matrix.mli
index fa518a59ab91c19f1f1d818ffaf0e29779439d68..47e8d0f42016d6758cbf20f1ef1f93b473d4776b 100644
--- a/src/plugins/wp/Matrix.mli
+++ b/src/plugins/wp/Matrix.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemAddr.ml b/src/plugins/wp/MemAddr.ml
index 325ee2b04bfa2b52c0b896a7adaaf18b583c64cd..a043d41b134bd872e4b49c34efb7157def92c93d 100644
--- a/src/plugins/wp/MemAddr.ml
+++ b/src/plugins/wp/MemAddr.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemAddr.mli b/src/plugins/wp/MemAddr.mli
index 38f30863eaffcb38353aa83fddbd8afbeb0572f5..1b97aa438030a65e67c78b57361bfb5cbf94dc20 100644
--- a/src/plugins/wp/MemAddr.mli
+++ b/src/plugins/wp/MemAddr.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -26,7 +26,7 @@ open Lang.F
     symbols. Types indicates in the documentation are Why3 types, not OCaml
     types.
 
-    @since Frama-C+dev
+    @since 29.0-Copper
 *)
 
 val t_addr : Lang.tau
diff --git a/src/plugins/wp/MemDebug.ml b/src/plugins/wp/MemDebug.ml
index 5fb5618554b42f4b7150ca7b20a5fb0ed88972e3..2032dfc1821fad0446671d81f384c9c073469aea 100644
--- a/src/plugins/wp/MemDebug.ml
+++ b/src/plugins/wp/MemDebug.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemDebug.mli b/src/plugins/wp/MemDebug.mli
index 856d1084a22c2b40448ced3983e4e416681db1d4..1cb131457bf0845d54607ba22413ad6d2895074e 100644
--- a/src/plugins/wp/MemDebug.mli
+++ b/src/plugins/wp/MemDebug.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemEmpty.ml b/src/plugins/wp/MemEmpty.ml
index 6daf96cbd40607f1b9b8e5478e762939874e0959..c6094ccad6de0c0bf4ded1018df837b67cee7ed1 100644
--- a/src/plugins/wp/MemEmpty.ml
+++ b/src/plugins/wp/MemEmpty.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemEmpty.mli b/src/plugins/wp/MemEmpty.mli
index d79595c26ce6e3822cc45cfae7e8cfca28b4554d..ab78db145f0b52ef58a3e5ee367c4e94d1750d92 100644
--- a/src/plugins/wp/MemEmpty.mli
+++ b/src/plugins/wp/MemEmpty.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemLoader.ml b/src/plugins/wp/MemLoader.ml
index 233e222e0a8a6a77bc56c2406fbfe5e3f3b6e6ff..7004c6c5ce66f479476dc23cedc2a85b2687e5c6 100644
--- a/src/plugins/wp/MemLoader.ml
+++ b/src/plugins/wp/MemLoader.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemLoader.mli b/src/plugins/wp/MemLoader.mli
index daa3dd7617feebf109dba57d93fde64b7a391aaf..c460d3cae0b7142459d996efffc3453cac2c48c8 100644
--- a/src/plugins/wp/MemLoader.mli
+++ b/src/plugins/wp/MemLoader.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemMemory.ml b/src/plugins/wp/MemMemory.ml
index 8ad0a096b7583126cd52c328954968b306f2d9fe..e14a7d13efe28adb718de76de1e2e63fc5285991 100644
--- a/src/plugins/wp/MemMemory.ml
+++ b/src/plugins/wp/MemMemory.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemMemory.mli b/src/plugins/wp/MemMemory.mli
index 220b4e82b881c14817dc2280ed79f5abd38d7b7e..f52c7f832a13788e3437b15b9afdfac79e7b0e8f 100644
--- a/src/plugins/wp/MemMemory.mli
+++ b/src/plugins/wp/MemMemory.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemRegion.ml b/src/plugins/wp/MemRegion.ml
index 0c1f75690761fb479909a7b6a646b2a79dc2d8f2..9ff7c488921994ae1b68c5b8908b621a091713ea 100644
--- a/src/plugins/wp/MemRegion.ml
+++ b/src/plugins/wp/MemRegion.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemRegion.mli b/src/plugins/wp/MemRegion.mli
index d79595c26ce6e3822cc45cfae7e8cfca28b4554d..ab78db145f0b52ef58a3e5ee367c4e94d1750d92 100644
--- a/src/plugins/wp/MemRegion.mli
+++ b/src/plugins/wp/MemRegion.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemTyped.ml b/src/plugins/wp/MemTyped.ml
index 24e7ddb49ea91e9ca78384e2b57770182557a1e0..94ac99b8edb5dad241bf3164e1779607c2c5d17e 100644
--- a/src/plugins/wp/MemTyped.ml
+++ b/src/plugins/wp/MemTyped.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemTyped.mli b/src/plugins/wp/MemTyped.mli
index 2b1f1279e414e5efa0b0857b0945870626278143..ccdbfbd0b9786393e0819d561a77ce899b49aecc 100644
--- a/src/plugins/wp/MemTyped.mli
+++ b/src/plugins/wp/MemTyped.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemVal.ml b/src/plugins/wp/MemVal.ml
index aa4045a1aab52cfb073990ef529007cdfed45361..5de8b671a9b6b6bcf7e302d4de6454f3ead5735d 100644
--- a/src/plugins/wp/MemVal.ml
+++ b/src/plugins/wp/MemVal.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemVal.mli b/src/plugins/wp/MemVal.mli
index 7e71f55246e6617a2ecca51bb9a88d6c1556ed92..f640f5d0342256bf63b140e6353468719816d43e 100644
--- a/src/plugins/wp/MemVal.mli
+++ b/src/plugins/wp/MemVal.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemVar.ml b/src/plugins/wp/MemVar.ml
index 27ff36508f3915436994ef43e643c5757c40f6e5..4a8fb7e6ba5e6be1ab99ab4ce1f89d274a6df309 100644
--- a/src/plugins/wp/MemVar.ml
+++ b/src/plugins/wp/MemVar.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemVar.mli b/src/plugins/wp/MemVar.mli
index b899ff59aa574329816d443d325fe4cce7a0bfa8..418e92802346f86cfcf7c1000b4002f32845ad99 100644
--- a/src/plugins/wp/MemVar.mli
+++ b/src/plugins/wp/MemVar.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemZeroAlias.ml b/src/plugins/wp/MemZeroAlias.ml
index b4a791a5eb7540b5264ef8bf57aea3db4d246abd..40502d01c426e38bd05f4d260432f274327ee96e 100644
--- a/src/plugins/wp/MemZeroAlias.ml
+++ b/src/plugins/wp/MemZeroAlias.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemZeroAlias.mli b/src/plugins/wp/MemZeroAlias.mli
index d79595c26ce6e3822cc45cfae7e8cfca28b4554d..ab78db145f0b52ef58a3e5ee367c4e94d1750d92 100644
--- a/src/plugins/wp/MemZeroAlias.mli
+++ b/src/plugins/wp/MemZeroAlias.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemoryContext.ml b/src/plugins/wp/MemoryContext.ml
index 5840be85cb81f75e9c49e20e31f37197217ed3eb..509027bee08370a83313bd1f8fd248a2adcda53d 100644
--- a/src/plugins/wp/MemoryContext.ml
+++ b/src/plugins/wp/MemoryContext.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/MemoryContext.mli b/src/plugins/wp/MemoryContext.mli
index 70abd122eb998b7add8a5e0279846912d9005793..52b19239ad9d7034a626965cab2e50094ba4af7a 100644
--- a/src/plugins/wp/MemoryContext.mli
+++ b/src/plugins/wp/MemoryContext.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Mstate.ml b/src/plugins/wp/Mstate.ml
index 3a48e6cf14f08bd3cce757deceec8885aaae0320..4344e2f83b57b5e2f3694e69a1d0349f26eae181 100644
--- a/src/plugins/wp/Mstate.ml
+++ b/src/plugins/wp/Mstate.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Mstate.mli b/src/plugins/wp/Mstate.mli
index 70a06aadf7f8fe1c21bdc90590d2e67e6ec23bb5..f0bf13f9c5b382844487403aedf929f2819df9a9 100644
--- a/src/plugins/wp/Mstate.mli
+++ b/src/plugins/wp/Mstate.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Passive.ml b/src/plugins/wp/Passive.ml
index f74a9797474d0edf1ff652c62d86d01108d55abb..4b5395911ea08fc0d676b65bc96b5053ca9f8f47 100644
--- a/src/plugins/wp/Passive.ml
+++ b/src/plugins/wp/Passive.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Passive.mli b/src/plugins/wp/Passive.mli
index c21c9ab585a847908ca8b6b185d12d9ed4543ad8..28b818358ed68ce1f32edb38b01dd1ed2754a280 100644
--- a/src/plugins/wp/Passive.mli
+++ b/src/plugins/wp/Passive.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Pattern.ml b/src/plugins/wp/Pattern.ml
index 35022166319bd93bfcc7b71abb650a168c605315..d33d01147ef6aa88226e239d17d4aeca06b090a9 100644
--- a/src/plugins/wp/Pattern.ml
+++ b/src/plugins/wp/Pattern.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Pattern.mli b/src/plugins/wp/Pattern.mli
index 14d9a7fadbb175cb95f3e818efa2cfc9a06f6b58..58a9b26b54efbd058e6ab20bd1b39db1c35eca0b 100644
--- a/src/plugins/wp/Pattern.mli
+++ b/src/plugins/wp/Pattern.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Pcfg.ml b/src/plugins/wp/Pcfg.ml
index 69d0ca8243784104d50ae8ab820a4ce27d419197..38acffdd38eb6d0a6e6eaf6bba5d89aa4d40dc7a 100644
--- a/src/plugins/wp/Pcfg.ml
+++ b/src/plugins/wp/Pcfg.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Pcfg.mli b/src/plugins/wp/Pcfg.mli
index 548f93ab7589ebaf42bfd31b2ab2e1b552375b21..5e38e5e0416a232b19398f16b331be9573c04995 100644
--- a/src/plugins/wp/Pcfg.mli
+++ b/src/plugins/wp/Pcfg.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Pcond.ml b/src/plugins/wp/Pcond.ml
index 471a236cd943c599d6ebf3ee6f2f9381bab1d560..375e3664ade522b129d9c2de3a4d5e053881b67b 100644
--- a/src/plugins/wp/Pcond.ml
+++ b/src/plugins/wp/Pcond.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Pcond.mli b/src/plugins/wp/Pcond.mli
index ef53b285566e780682d0121e3d9c2fe5710d8b3f..f4d77711e707d58c1dfd7940a957d9ad7d659998 100644
--- a/src/plugins/wp/Pcond.mli
+++ b/src/plugins/wp/Pcond.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Plang.ml b/src/plugins/wp/Plang.ml
index 99c4fa10fcedba46c6ee34df24028142dbc20503..3055bb9fb5b5e7112c1cbd615ca81f0bb13d32d0 100644
--- a/src/plugins/wp/Plang.ml
+++ b/src/plugins/wp/Plang.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Plang.mli b/src/plugins/wp/Plang.mli
index 488b4230176950c9270405c576d091c10bcda003..63e1a12d80f9cf94dbd82ed978801a26bbc3f523 100644
--- a/src/plugins/wp/Plang.mli
+++ b/src/plugins/wp/Plang.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Probe.ml b/src/plugins/wp/Probe.ml
index 4140b0ea540a8cb46b5550c63373b14cb3462f2c..71d1662a610159667a8326930b0f67ae581de87c 100644
--- a/src/plugins/wp/Probe.ml
+++ b/src/plugins/wp/Probe.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Probe.mli b/src/plugins/wp/Probe.mli
index 068dc0fa24d87d3b1a6f80490bccb2b2092729fc..6b103a6d61551fec3e44f75a3c3a896178684a77 100644
--- a/src/plugins/wp/Probe.mli
+++ b/src/plugins/wp/Probe.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProofEngine.ml b/src/plugins/wp/ProofEngine.ml
index f2b8583fdf6e9359e7084c203252befb03b22c62..fdac6f94c667a557c88aec2b8c9d63a06ec02cc2 100644
--- a/src/plugins/wp/ProofEngine.ml
+++ b/src/plugins/wp/ProofEngine.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProofEngine.mli b/src/plugins/wp/ProofEngine.mli
index 8e10e532600d53355127561f064e6d0f7458f19d..7d7f058396c136422b6da1eb3b1e9d21640ce01c 100644
--- a/src/plugins/wp/ProofEngine.mli
+++ b/src/plugins/wp/ProofEngine.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProofScript.ml b/src/plugins/wp/ProofScript.ml
index a6db6ea1b032bfaee6fa566c3abbde6f8fc9464c..4872e5dae231dd0cd9a1d9f8d585760917f05e69 100644
--- a/src/plugins/wp/ProofScript.ml
+++ b/src/plugins/wp/ProofScript.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProofScript.mli b/src/plugins/wp/ProofScript.mli
index 7c4ab83e58fbdbcf8b0eb7b7b24eea9f8a659846..0e8df177998bd8170beac4cfb223e72ea2736a90 100644
--- a/src/plugins/wp/ProofScript.mli
+++ b/src/plugins/wp/ProofScript.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProofSession.ml b/src/plugins/wp/ProofSession.ml
index e94af59550074b9c1afe8338d1db19f8b393f771..11a0db1e6c8036c284f669fc96d11348d4435c9f 100644
--- a/src/plugins/wp/ProofSession.ml
+++ b/src/plugins/wp/ProofSession.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProofSession.mli b/src/plugins/wp/ProofSession.mli
index 390c2b29ef4023c7341796952921635be64b678e..238427040652dc4ffd02c0f7386b9f8ec53ad711 100644
--- a/src/plugins/wp/ProofSession.mli
+++ b/src/plugins/wp/ProofSession.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProofStrategy.ml b/src/plugins/wp/ProofStrategy.ml
index a6552be06d36bdc341ce4e717f5c693b554e9962..595394f3b20496813ea21c71259ea8c92eb2c757 100644
--- a/src/plugins/wp/ProofStrategy.ml
+++ b/src/plugins/wp/ProofStrategy.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProofStrategy.mli b/src/plugins/wp/ProofStrategy.mli
index 127063bc5cea555634e06373db01d14dcdf20666..ce32eea9af2a680541ce6afb8053546471233d5c 100644
--- a/src/plugins/wp/ProofStrategy.mli
+++ b/src/plugins/wp/ProofStrategy.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProverScript.ml b/src/plugins/wp/ProverScript.ml
index 7f4a4c06386f9693d09b5ff0b2796cb3b10111aa..0f860f3a6beb951526490ca5c837afb3e8bee0b6 100644
--- a/src/plugins/wp/ProverScript.ml
+++ b/src/plugins/wp/ProverScript.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProverScript.mli b/src/plugins/wp/ProverScript.mli
index 022ffd6b573f9210ce481d0657eff67d0182e9fb..c2f1d5776ade5638d945154d75b630a8612c0aa6 100644
--- a/src/plugins/wp/ProverScript.mli
+++ b/src/plugins/wp/ProverScript.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProverSearch.ml b/src/plugins/wp/ProverSearch.ml
index f2872d66e8c98261d90699a1a7f498b8f6bc7fcf..8f9abb44125b4b7cf75a6948869599344c4e9735 100644
--- a/src/plugins/wp/ProverSearch.ml
+++ b/src/plugins/wp/ProverSearch.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProverSearch.mli b/src/plugins/wp/ProverSearch.mli
index 072717398b946971e4fdcd7fd888de952bf5800e..285cc06ad47fa9d4cf22ab2b86205ba76a742cf1 100644
--- a/src/plugins/wp/ProverSearch.mli
+++ b/src/plugins/wp/ProverSearch.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProverTask.ml b/src/plugins/wp/ProverTask.ml
index fbf8f5b414d5f4ea085673e13bd9e8114cb0e892..d918553e2265be0014e6dc8b3337b870f3cd3950 100644
--- a/src/plugins/wp/ProverTask.ml
+++ b/src/plugins/wp/ProverTask.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProverTask.mli b/src/plugins/wp/ProverTask.mli
index e617e446ed679722af845fa55773beef1ce6dbe9..9e5f38e30639fe2b782eba9e55e6413052108ace 100644
--- a/src/plugins/wp/ProverTask.mli
+++ b/src/plugins/wp/ProverTask.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProverWhy3.ml b/src/plugins/wp/ProverWhy3.ml
index 46700b024bbb668a92503d3782ea2aae1defc81f..ea4bc9329a43bd18eaf0c2b6ff25e17137c9615c 100644
--- a/src/plugins/wp/ProverWhy3.ml
+++ b/src/plugins/wp/ProverWhy3.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ProverWhy3.mli b/src/plugins/wp/ProverWhy3.mli
index 30e0a740ce98807909982ad89ca684c9539b06f1..b7b4ec14936bdd594d98c2edfc78922d65e57ca5 100644
--- a/src/plugins/wp/ProverWhy3.mli
+++ b/src/plugins/wp/ProverWhy3.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RefUsage.ml b/src/plugins/wp/RefUsage.ml
index 4f33131c032dc2eb946c02040192a9b186598d5f..ef3514c844b85d222bb7e2cb5142a3b9dca67e02 100644
--- a/src/plugins/wp/RefUsage.ml
+++ b/src/plugins/wp/RefUsage.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RefUsage.mli b/src/plugins/wp/RefUsage.mli
index d352de7c41e141d0bb86d8c90ac6bf1dc9f6b845..644547f88c970ee90de2675e04dd6a64346ebfe2 100644
--- a/src/plugins/wp/RefUsage.mli
+++ b/src/plugins/wp/RefUsage.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Region.ml b/src/plugins/wp/Region.ml
index d0a711683716d6a1578c8a65369a4ae6a838d83e..f2640d16056f7b3e17d3a2639a237d815424ebc9 100644
--- a/src/plugins/wp/Region.ml
+++ b/src/plugins/wp/Region.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Region.mli b/src/plugins/wp/Region.mli
index 4d9032394039b217de0fb1fba89d97a95f1bfb9e..1852732e5034a8e3f76b196b666b2fd3441bf2b4 100644
--- a/src/plugins/wp/Region.mli
+++ b/src/plugins/wp/Region.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RegionAccess.ml b/src/plugins/wp/RegionAccess.ml
index e79b487cdd34946bfc7f8c5eb578f0f1add1564c..d268d14ff6ed86c8c252cab81a59d2809a2e783a 100644
--- a/src/plugins/wp/RegionAccess.ml
+++ b/src/plugins/wp/RegionAccess.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RegionAccess.mli b/src/plugins/wp/RegionAccess.mli
index e3778fb570f49f172e6677402398301389aaa032..b422f3af429e2fd85d7c7b09ec2e39973733e0ac 100644
--- a/src/plugins/wp/RegionAccess.mli
+++ b/src/plugins/wp/RegionAccess.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RegionAnalysis.ml b/src/plugins/wp/RegionAnalysis.ml
index 50bc432573eac4fecacf885f01ec8c541c11f3cd..6a97a95abac711cf459f44063e4007314675d855 100644
--- a/src/plugins/wp/RegionAnalysis.ml
+++ b/src/plugins/wp/RegionAnalysis.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RegionAnalysis.mli b/src/plugins/wp/RegionAnalysis.mli
index 57d099bdfb0f01c469a22545d26ecdd60b93c417..d3d4b6998d5bee5ab060a3c3c96372066d5c0be8 100644
--- a/src/plugins/wp/RegionAnalysis.mli
+++ b/src/plugins/wp/RegionAnalysis.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RegionAnnot.ml b/src/plugins/wp/RegionAnnot.ml
index e01ea2a15353d0f55b9c452ad483d1f77b965631..f2697affd43569089fda263bbf4cb02213b1f987 100644
--- a/src/plugins/wp/RegionAnnot.ml
+++ b/src/plugins/wp/RegionAnnot.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -468,7 +468,7 @@ let typecheck typing_context _loc ps =
 
 let of_extid = Hashtbl.find registry
 let of_extrev = function
-  | { ext_name="region" ; ext_kind = Ext_id k } -> of_extid k
+  | { ext_name="wpregion" ; ext_kind = Ext_id k } -> of_extid k
   | _ -> raise Not_found
 let of_extension e = List.rev (of_extrev e)
 let of_behavior bhv =
@@ -498,7 +498,7 @@ let register () =
   then
     begin
       registered := true ;
-      Acsl_extension.register_behavior ~plugin:"wp" "region"
+      Acsl_extension.register_behavior ~plugin:"wp" "wpregion"
         typecheck ~printer:pp_extension false
     end
 
diff --git a/src/plugins/wp/RegionAnnot.mli b/src/plugins/wp/RegionAnnot.mli
index 67c6b04ddd75e588abb8b9f7491011dee393b2d0..7ebe1d8ed6247ccb8db8f12cd9ba0e48aa661fde 100644
--- a/src/plugins/wp/RegionAnnot.mli
+++ b/src/plugins/wp/RegionAnnot.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RegionDump.ml b/src/plugins/wp/RegionDump.ml
index 58b8de8c1ad57d8a0e49cff644d6f6d45e50f6e2..87ba674bee5ce22df81b134ea30a9a2248d3b739 100644
--- a/src/plugins/wp/RegionDump.ml
+++ b/src/plugins/wp/RegionDump.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/RegionDump.mli b/src/plugins/wp/RegionDump.mli
index ec94b43a492f890bb1f05045825753149bc048ce..ea54c4d40745762ccfb7421b16683695bdacefe8 100644
--- a/src/plugins/wp/RegionDump.mli
+++ b/src/plugins/wp/RegionDump.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Repr.ml b/src/plugins/wp/Repr.ml
index 9f33189d9705c70fed8aee6b5bcdcedc98f34e58..f1c552ac53050633d186aa98772940a37092b1eb 100644
--- a/src/plugins/wp/Repr.ml
+++ b/src/plugins/wp/Repr.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Repr.mli b/src/plugins/wp/Repr.mli
index 10d4fcda9e28bcad19bce78cd61d65a6d3a22f7d..e77ef836262f4cbafbfaa30d2071bb0fbd2da57d 100644
--- a/src/plugins/wp/Repr.mli
+++ b/src/plugins/wp/Repr.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Sigma.ml b/src/plugins/wp/Sigma.ml
index 9687f9e456b472fbbb64dc322f8494cd319d0ad8..9dbfa3f8d8a46c1e9faf21cc5394ee54c61428d0 100644
--- a/src/plugins/wp/Sigma.ml
+++ b/src/plugins/wp/Sigma.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Sigma.mli b/src/plugins/wp/Sigma.mli
index b805fbe08f8f2593cfaebbabfd819664d8db8f5a..43ba4d5162ab90034c19a44aa43a5427eb15e8db 100644
--- a/src/plugins/wp/Sigma.mli
+++ b/src/plugins/wp/Sigma.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Sigs.ml b/src/plugins/wp/Sigs.ml
index 535d80333b39e4541f7da554a7e2bdbc1a61b96f..1fa08a3da0a8c43ab4271d1bffa0065883883c18 100644
--- a/src/plugins/wp/Sigs.ml
+++ b/src/plugins/wp/Sigs.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Splitter.ml b/src/plugins/wp/Splitter.ml
index c2090c840991f5da2d4d15a84531bbe0b89cce27..83e249ce4e1f2466ace5480092d6218ec6f2926b 100644
--- a/src/plugins/wp/Splitter.ml
+++ b/src/plugins/wp/Splitter.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Splitter.mli b/src/plugins/wp/Splitter.mli
index 4fc82dab9269d959dc20159b16cd7591e3fc4230..cf9f2a50e1955f5385f3d57a8fa901bb522dc729 100644
--- a/src/plugins/wp/Splitter.mli
+++ b/src/plugins/wp/Splitter.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Stats.ml b/src/plugins/wp/Stats.ml
index f069f718f92f5dc651856eec2a38650bdcd117a3..8fdf369d65437a0e62b8ad48e79734b121e7fc6a 100644
--- a/src/plugins/wp/Stats.ml
+++ b/src/plugins/wp/Stats.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Stats.mli b/src/plugins/wp/Stats.mli
index ea1cd5dc478d992cba41d0702ae7bc1a41a7a63a..02e63aa80a6adeb1718d8b53802584e794c264db 100644
--- a/src/plugins/wp/Stats.mli
+++ b/src/plugins/wp/Stats.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/StmtSemantics.ml b/src/plugins/wp/StmtSemantics.ml
index 8511aa1adebc7e091e867dd4df54d7c54b472d9f..3db893803b7f00d75627c2983f5b2d7373fb0fb5 100644
--- a/src/plugins/wp/StmtSemantics.ml
+++ b/src/plugins/wp/StmtSemantics.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/StmtSemantics.mli b/src/plugins/wp/StmtSemantics.mli
index f02a28cefa61f7fdccca2a4b70bae38fceaad68a..3f712e77c7e1e85a202615dce2a541eb828be48a 100644
--- a/src/plugins/wp/StmtSemantics.mli
+++ b/src/plugins/wp/StmtSemantics.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Strategy.ml b/src/plugins/wp/Strategy.ml
index acdfb3c00a77dc3c03d637d06accf4fc7b6405d4..e93a46b1289a2f50f0c5ec85def4b10745f262d1 100644
--- a/src/plugins/wp/Strategy.ml
+++ b/src/plugins/wp/Strategy.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Strategy.mli b/src/plugins/wp/Strategy.mli
index 93ee6b42035d87b7bcf1186c33d6a38ee0502311..a8fad73488863cf2d67231777cd13dc1e0679c7b 100644
--- a/src/plugins/wp/Strategy.mli
+++ b/src/plugins/wp/Strategy.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacArray.ml b/src/plugins/wp/TacArray.ml
index ab01c284899fb4ac682129923a27292fb3450032..9a57007adf6170f075f802b308833ecf711912dc 100644
--- a/src/plugins/wp/TacArray.ml
+++ b/src/plugins/wp/TacArray.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacArray.mli b/src/plugins/wp/TacArray.mli
index 3a4c86382d38fa2fe9c6e8dc92281ddb8b7400d8..8ef363006a6779851c872489d1befe7b0a3c4f7d 100644
--- a/src/plugins/wp/TacArray.mli
+++ b/src/plugins/wp/TacArray.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacBitrange.ml b/src/plugins/wp/TacBitrange.ml
index 4bd424657a8e8169b14172cbe4d82029432b5676..79b730b9e4517e84f21e8554c75b0cafcebde1e5 100644
--- a/src/plugins/wp/TacBitrange.ml
+++ b/src/plugins/wp/TacBitrange.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacBitrange.mli b/src/plugins/wp/TacBitrange.mli
index 7e49f14a243ebf600f95397cab86df198c19c023..cdc7afdb644628d813076cc720bd6345a61c6d71 100644
--- a/src/plugins/wp/TacBitrange.mli
+++ b/src/plugins/wp/TacBitrange.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacBittest.ml b/src/plugins/wp/TacBittest.ml
index f71958c8110f001a45da83d5a739dabff94238a1..ba61d0900151881aa8189665abe1adb1b2bbd20d 100644
--- a/src/plugins/wp/TacBittest.ml
+++ b/src/plugins/wp/TacBittest.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacBittest.mli b/src/plugins/wp/TacBittest.mli
index 1beee1cb30aca3b55aad4cbb5cafc4e88bd622f1..db85f4478d32d4d6fe3cdcd82b3fa236af2c657c 100644
--- a/src/plugins/wp/TacBittest.mli
+++ b/src/plugins/wp/TacBittest.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacBitwised.ml b/src/plugins/wp/TacBitwised.ml
index 80ccfb200cc3a6f3f2a406e9330bd0db04827109..3fc2a401fdee637e9d76ab44708f203daca4c009 100644
--- a/src/plugins/wp/TacBitwised.ml
+++ b/src/plugins/wp/TacBitwised.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacBitwised.mli b/src/plugins/wp/TacBitwised.mli
index 1103a233d150f66caf7e8b41c9eae97ffe08e012..a2acd2c8c8dad45e3d6ad32cbcf7f5b2d04229b5 100644
--- a/src/plugins/wp/TacBitwised.mli
+++ b/src/plugins/wp/TacBitwised.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacChoice.ml b/src/plugins/wp/TacChoice.ml
index 47e2c544432a1c613b969daf6d041c21b87d3052..36054275884ed10cd8904bea2bb33c4ad31f3b90 100644
--- a/src/plugins/wp/TacChoice.ml
+++ b/src/plugins/wp/TacChoice.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacChoice.mli b/src/plugins/wp/TacChoice.mli
index fb4334a1048883f73cda10a08fcb96cdabb28ab8..29f7ac2dc19b38281a6c25160981d1d5d1f4a901 100644
--- a/src/plugins/wp/TacChoice.mli
+++ b/src/plugins/wp/TacChoice.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacClear.ml b/src/plugins/wp/TacClear.ml
index 111ab4645f771dfa7c9c5f06ba52e2baeef590b9..19188ce160e6cbcb6f2ff529a850123d3db17723 100644
--- a/src/plugins/wp/TacClear.ml
+++ b/src/plugins/wp/TacClear.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacClear.mli b/src/plugins/wp/TacClear.mli
index 305e9aaeb508356e0a0400f81da90ce7317eaf41..a3ee142a5441a9b780352c942f93808e5a4aa068 100644
--- a/src/plugins/wp/TacClear.mli
+++ b/src/plugins/wp/TacClear.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacCompound.ml b/src/plugins/wp/TacCompound.ml
index 5b0c1224e78a08d99e6d5bd2678a71557a8c8566..b6c353bbf722f86f678d226ff696967daea75e0c 100644
--- a/src/plugins/wp/TacCompound.ml
+++ b/src/plugins/wp/TacCompound.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacCompound.mli b/src/plugins/wp/TacCompound.mli
index 1546613eb74ff4c0fbf3316b2fcdf49017b2f379..602442fdee915ea775d9dcde85f19161a6314499 100644
--- a/src/plugins/wp/TacCompound.mli
+++ b/src/plugins/wp/TacCompound.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacCompute.ml b/src/plugins/wp/TacCompute.ml
index bc051433dd3f71553b90a7c7fd7f5f697f9ec862..4da3e4d862e2029dcf9383841fb12c009abe31ea 100644
--- a/src/plugins/wp/TacCompute.ml
+++ b/src/plugins/wp/TacCompute.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacCompute.mli b/src/plugins/wp/TacCompute.mli
index 40e616729898b7aba4ab65ce386e7c6f81ed8f19..f1b2860696b765c67dbf11b2317b96257fb82be5 100644
--- a/src/plugins/wp/TacCompute.mli
+++ b/src/plugins/wp/TacCompute.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacCongruence.ml b/src/plugins/wp/TacCongruence.ml
index a8fbfdad47457597d2ecaf180c925241ace632da..4cfa9175300718ef72ec7711c68a0e60e7793124 100644
--- a/src/plugins/wp/TacCongruence.ml
+++ b/src/plugins/wp/TacCongruence.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacCongruence.mli b/src/plugins/wp/TacCongruence.mli
index fa4d779f4bf75dccacaebe13d22a17e0100efccd..d45f6bdaf1f083023891a7f4d611d6b3e955961d 100644
--- a/src/plugins/wp/TacCongruence.mli
+++ b/src/plugins/wp/TacCongruence.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacCut.ml b/src/plugins/wp/TacCut.ml
index 424340d4bb4dbd58414993fbb5f497dcbfdc5883..3343647ba76b72438b71b0e9dd5e2543a9ea4edd 100644
--- a/src/plugins/wp/TacCut.ml
+++ b/src/plugins/wp/TacCut.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacCut.mli b/src/plugins/wp/TacCut.mli
index 1243340baf285b12b8604b59bcca07d16cfa8d85..d5b86b32bcc9538bf364dd1bdeabe045e963ba82 100644
--- a/src/plugins/wp/TacCut.mli
+++ b/src/plugins/wp/TacCut.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacFilter.ml b/src/plugins/wp/TacFilter.ml
index 3643f773c7301f96122c1131c88dbd40c823a172..8e5e9e6f4582a5894d8e6cc1bf2b4825204673b4 100644
--- a/src/plugins/wp/TacFilter.ml
+++ b/src/plugins/wp/TacFilter.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacFilter.mli b/src/plugins/wp/TacFilter.mli
index c430184227c6033847c8fac61dc9b54d8e4b88d4..450b3b11fbfb4fa479f44cf494ad9c9dcd87546e 100644
--- a/src/plugins/wp/TacFilter.mli
+++ b/src/plugins/wp/TacFilter.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacHavoc.ml b/src/plugins/wp/TacHavoc.ml
index 87cb011e34ce10ee3f8ed8426f1382dfced06449..23333e88224e1339d59dfda8f497eaf35c374c49 100644
--- a/src/plugins/wp/TacHavoc.ml
+++ b/src/plugins/wp/TacHavoc.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacHavoc.mli b/src/plugins/wp/TacHavoc.mli
index 1817055bbbba74e3885044045cd7f00a44598b57..aca7c659cbed7e0484406657becd222775f787f4 100644
--- a/src/plugins/wp/TacHavoc.mli
+++ b/src/plugins/wp/TacHavoc.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacInduction.ml b/src/plugins/wp/TacInduction.ml
index 316d9f2db8bb9658da5af70f1ce290d95a51b7c4..d441cdd373a1daaa2209d8907686d61a0620dca9 100644
--- a/src/plugins/wp/TacInduction.ml
+++ b/src/plugins/wp/TacInduction.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacInduction.mli b/src/plugins/wp/TacInduction.mli
index 305e9aaeb508356e0a0400f81da90ce7317eaf41..a3ee142a5441a9b780352c942f93808e5a4aa068 100644
--- a/src/plugins/wp/TacInduction.mli
+++ b/src/plugins/wp/TacInduction.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacInstance.ml b/src/plugins/wp/TacInstance.ml
index f9099ad4e314de47fffd5f2eb6776f95746890d6..8614b4615f0106284721367fa98e4ae09dee8801 100644
--- a/src/plugins/wp/TacInstance.ml
+++ b/src/plugins/wp/TacInstance.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacInstance.mli b/src/plugins/wp/TacInstance.mli
index de3b3497d1cbeade25456af13058f04accff7060..4f851793277aa87fc7679fecfccd6a560f38d487 100644
--- a/src/plugins/wp/TacInstance.mli
+++ b/src/plugins/wp/TacInstance.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacLemma.ml b/src/plugins/wp/TacLemma.ml
index 929660ba310bf714e0f20431992e478ee8386864..453e9daee5b0b6f0ce044d1ec9b19dea9fc27aa1 100644
--- a/src/plugins/wp/TacLemma.ml
+++ b/src/plugins/wp/TacLemma.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacLemma.mli b/src/plugins/wp/TacLemma.mli
index c25c62eae291feea9ad611e918c45d9161d3eaa5..4b876635d9f6fc2e08c0b44a9fc6851b3ec29036 100644
--- a/src/plugins/wp/TacLemma.mli
+++ b/src/plugins/wp/TacLemma.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacModMask.ml b/src/plugins/wp/TacModMask.ml
index d6b86ee987063db35037e28ede8feae3c04c71e6..879054551dbf250f809c0b31ca6933e4bd609f03 100644
--- a/src/plugins/wp/TacModMask.ml
+++ b/src/plugins/wp/TacModMask.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacModMask.mli b/src/plugins/wp/TacModMask.mli
index 487a33eff7f1988e62ea5a8a1832ef9fe2b08150..a9036c7de0cfad7205d38cc5ad43e1603a514184 100644
--- a/src/plugins/wp/TacModMask.mli
+++ b/src/plugins/wp/TacModMask.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacNormalForm.ml b/src/plugins/wp/TacNormalForm.ml
index dcddbdd06544a41192d364154e00fbc341cfc0aa..9a3081e983b5da2b21f12e389ce3f91ad42514d5 100644
--- a/src/plugins/wp/TacNormalForm.ml
+++ b/src/plugins/wp/TacNormalForm.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacNormalForm.mli b/src/plugins/wp/TacNormalForm.mli
index 13e7520be9cc24ced3619ea6a8d0bb6d274b6988..23123c51cfb75fb1398642d5edececd0938da18d 100644
--- a/src/plugins/wp/TacNormalForm.mli
+++ b/src/plugins/wp/TacNormalForm.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacOverflow.ml b/src/plugins/wp/TacOverflow.ml
index 8591c6d8f8b4b24a2e03795a71f6252ac15972db..21786b0b7286e3d25089d7524d66a2fb04ad805e 100644
--- a/src/plugins/wp/TacOverflow.ml
+++ b/src/plugins/wp/TacOverflow.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacOverflow.mli b/src/plugins/wp/TacOverflow.mli
index ed15d469f4503b86011b5a6764ddfe8e9caab9f9..b4be0d2d88d1531eb76b3cee02eee294024e8fd6 100644
--- a/src/plugins/wp/TacOverflow.mli
+++ b/src/plugins/wp/TacOverflow.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacRange.ml b/src/plugins/wp/TacRange.ml
index 6e4e8362682eca7b6d88e8fed658c4ccc0a13596..6ee9a48dcbcc6bd0bd0ad9c7c9cebdf445239f8b 100644
--- a/src/plugins/wp/TacRange.ml
+++ b/src/plugins/wp/TacRange.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacRange.mli b/src/plugins/wp/TacRange.mli
index 123d7c3dcf301b31d5bc662a91679ad491418a85..5bd17c514e0be67f04792cfd19a1bfe9468cd1ef 100644
--- a/src/plugins/wp/TacRange.mli
+++ b/src/plugins/wp/TacRange.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacRewrite.ml b/src/plugins/wp/TacRewrite.ml
index 51c52f4efda6904736ec3791f7b4b585465753d6..61411c611441647030d31b29a14ac28615d10402 100644
--- a/src/plugins/wp/TacRewrite.ml
+++ b/src/plugins/wp/TacRewrite.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacRewrite.mli b/src/plugins/wp/TacRewrite.mli
index 05a002a817aa010c17016c23d53b56b1255f8c6b..35a36893135f679a90f423a69ad1fac99cf37c1f 100644
--- a/src/plugins/wp/TacRewrite.mli
+++ b/src/plugins/wp/TacRewrite.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacSequence.ml b/src/plugins/wp/TacSequence.ml
index 09a4144379129f026c3570a6e90638a215028621..f0857b5ec3afe5d6c1692b8e58f9251e0eb0fcb4 100644
--- a/src/plugins/wp/TacSequence.ml
+++ b/src/plugins/wp/TacSequence.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacSequence.mli b/src/plugins/wp/TacSequence.mli
index 76ec5918980315bfae8618365e1967a8d71a517a..27e49a6594fac965f92e1f3e56b66b2eb98289f4 100644
--- a/src/plugins/wp/TacSequence.mli
+++ b/src/plugins/wp/TacSequence.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacShift.ml b/src/plugins/wp/TacShift.ml
index d35bf081ae86e53c821807d57c502db95fe2e839..00308e3eabc64d6e1f83bf495f489a1c230d310b 100644
--- a/src/plugins/wp/TacShift.ml
+++ b/src/plugins/wp/TacShift.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacShift.mli b/src/plugins/wp/TacShift.mli
index dcc8a81f0ddea3609587daf5dd6bde7a1e17de07..e4caf1a31bc06c2e92a7d0865523e02a8fb41483 100644
--- a/src/plugins/wp/TacShift.mli
+++ b/src/plugins/wp/TacShift.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacSplit.ml b/src/plugins/wp/TacSplit.ml
index ebd670aac56e078b5195631e583342a218d4fedc..c19f7b53191ab6d12262bdffb3f3b16a9705ba68 100644
--- a/src/plugins/wp/TacSplit.ml
+++ b/src/plugins/wp/TacSplit.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacSplit.mli b/src/plugins/wp/TacSplit.mli
index 2032c3d2cfdd31c3b946f2b93b0004f56400e4c0..22de5655b8fab1795f9c303ca00abcf84d1e3357 100644
--- a/src/plugins/wp/TacSplit.mli
+++ b/src/plugins/wp/TacSplit.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacUnfold.ml b/src/plugins/wp/TacUnfold.ml
index ccc1bf0eb15c3c4fb78359e1e3c2f2a3995160f7..e4144ac84863f5d5fe47dc4641dec50caa5f989f 100644
--- a/src/plugins/wp/TacUnfold.ml
+++ b/src/plugins/wp/TacUnfold.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/TacUnfold.mli b/src/plugins/wp/TacUnfold.mli
index ac7a5aefe7ffafddc3a45245e9a4ea40daf2cf99..0003e4988b133a67468c88078f7ecd0f6d0cc032 100644
--- a/src/plugins/wp/TacUnfold.mli
+++ b/src/plugins/wp/TacUnfold.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Tactical.ml b/src/plugins/wp/Tactical.ml
index 08cb1f3e2270b19ba36166ddb4bccbc5b00eeb7d..0c1a58716f1af25258dfa099413d4429801446e7 100644
--- a/src/plugins/wp/Tactical.ml
+++ b/src/plugins/wp/Tactical.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Tactical.mli b/src/plugins/wp/Tactical.mli
index f313adde10789845b814992fcbdcc7cbc1d70e86..66a27dc4058ee02b0ef66ec93ebad0dc024f579a 100644
--- a/src/plugins/wp/Tactical.mli
+++ b/src/plugins/wp/Tactical.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/VC.ml b/src/plugins/wp/VC.ml
index 4cbd4b35863037c79ba2a0fbd6be9d942101f581..f791165b55bef7eaf4622c6d8789a40f62153ac6 100644
--- a/src/plugins/wp/VC.ml
+++ b/src/plugins/wp/VC.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/VC.mli b/src/plugins/wp/VC.mli
index 44e0595325ed74f374c99a7acdead11c461013e6..7ae4192377bc7bc2d31953ce51b6b66bcef23947 100644
--- a/src/plugins/wp/VC.mli
+++ b/src/plugins/wp/VC.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/VCS.ml b/src/plugins/wp/VCS.ml
index 265f0d4c0a84cd70f197942abcf20847c7260513..d19c37f7d89cb0d2c6409a88ee7e64421da5178b 100644
--- a/src/plugins/wp/VCS.ml
+++ b/src/plugins/wp/VCS.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/VCS.mli b/src/plugins/wp/VCS.mli
index 4a737a298f346a5df5b91209b8c90801770ed9c1..3c33f15508bc54303ec9a78ba0d922d2c5026d29 100644
--- a/src/plugins/wp/VCS.mli
+++ b/src/plugins/wp/VCS.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Vlist.ml b/src/plugins/wp/Vlist.ml
index 05f905cc0cde2cfbed4389c36ca1782a9a4a648a..4d55f43c91935c200e3ea88a9af19f0e759c332e 100644
--- a/src/plugins/wp/Vlist.ml
+++ b/src/plugins/wp/Vlist.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Vlist.mli b/src/plugins/wp/Vlist.mli
index 2074985d3459982939348331ac881a72d7ed6599..137557a68d39393d7b0c87abe0750d3f18050645 100644
--- a/src/plugins/wp/Vlist.mli
+++ b/src/plugins/wp/Vlist.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Vset.ml b/src/plugins/wp/Vset.ml
index 6c02ff8543b3f8075efcb5e97bc968766821c364..1e54e5e5a665e3764ee184d72dafb3fb8337cc15 100644
--- a/src/plugins/wp/Vset.ml
+++ b/src/plugins/wp/Vset.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Vset.mli b/src/plugins/wp/Vset.mli
index 45b9db251f8d6b610226c8c6df9a94375f0a6746..6d5677b281cd4333dcff9b1d0e62816139fedfe0 100644
--- a/src/plugins/wp/Vset.mli
+++ b/src/plugins/wp/Vset.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Warning.ml b/src/plugins/wp/Warning.ml
index 47b66a0fd02cacd110e443e6d3d593f3e4dd7367..5901b1fcfe1199a6537fd90a238dd4853e53eeeb 100644
--- a/src/plugins/wp/Warning.ml
+++ b/src/plugins/wp/Warning.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Warning.mli b/src/plugins/wp/Warning.mli
index 05794ccaf7ce44ff13f1840bbeead1342c9fc425..5be5386f0c992b16404811372905306ff8427527 100644
--- a/src/plugins/wp/Warning.mli
+++ b/src/plugins/wp/Warning.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Why3Import.ml b/src/plugins/wp/Why3Import.ml
index 27593f780b4b9e1656f23be49aeccc300e943ad6..c79b51684ce20eae47803106a46fa7281525e79e 100644
--- a/src/plugins/wp/Why3Import.ml
+++ b/src/plugins/wp/Why3Import.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -20,29 +20,199 @@
 (*                                                                        *)
 (**************************************************************************)
 
+module C = Cil_types
+module Cpp = Cil_printer
 module L = Wp_parameters
 module T = Why3.Theory
 module F = Filepath.Normalized
 module W = Why3
 module WConf = Why3.Whyconf
 
+let dkey = L.register_category "why3.import"
+
+(* -------------------------------------------------------------------------- *)
+(* ---    Why3 Environment                                                --- *)
 (* -------------------------------------------------------------------------- *)
 
 let create_why3_env loadpath =
   let main = WConf.get_main @@ WConf.read_config None in
   W.Env.create_env @@ WConf.loadpath main @ F.to_string_list loadpath
 
+
+
 let extract_path thname =
   let segments = String.split_on_char '.' thname in
   match List.rev segments with
   | hd :: tl -> hd, List.rev tl
   | [] -> "", []
 
+let of_infix s =
+  let rec unwrap_any s = function
+    | [] -> s
+    | prefix::others ->
+      if String.starts_with ~prefix s then
+        let n = String.length s in
+        let p = String.length prefix in
+        Printf.sprintf "(%s)" @@ String.sub s p (n-p)
+      else unwrap_any s others
+  in unwrap_any s ["prefix ";"infix ";"mixfix "]
+
+
+let construct_acsl_name (id : W.Ident.ident) =
+  let (paths,name,scopes) = T.restore_path id in
+  match List.rev scopes with
+  | (t::q) ->
+    String.concat "::" (paths @ name :: List.rev_append q [of_infix t])
+  | [] -> ""
+
+
+
 (* For debug only*)
 let pp_id fmt (id: W.Ident.ident) =
   Format.pp_print_string fmt id.id_string
 
-let import_theory env thname =
+(* For debug only*)
+let pp_tys fmt (tys: W.Ty.tysymbol) =
+  W.Pretty.print_ty_decl fmt tys
+
+(* For debug only*)
+let pp_ls fmt ls =
+  W.Pretty.print_ls fmt ls
+
+(* For debug only*)
+let pp_id_loc fmt (id : W.Ident.ident) =
+  match id.id_loc with
+  | Some loc -> W.Loc.pp_position fmt loc
+  | None -> L.error "No location found"
+
+(* For debug only*)
+let pp_lti fmt (lti : C.logic_type_info) =
+  Cpp.pp_logic_type_info fmt lti
+
+(* For debug only*)
+let pp_li fmt (li : C.logic_info) =
+  Cpp.pp_logic_info fmt li
+
+(* For debug only*)
+let pp_lvs fmt (lvs : C.logic_var list) =
+  List.iter (fun (lv: C.logic_var) ->
+      Format.fprintf fmt "@ %a: %a"
+        Cpp.pp_logic_var lv Cpp.pp_logic_type lv.lv_type
+    ) lvs;
+
+  (* -------------------------------------------------------------------------- *)
+  (* ---    Types                                                           --- *)
+  (* -------------------------------------------------------------------------- *)
+
+type tenv = C.logic_type_info W.Ty.Hts.t
+type lenv = C.logic_info W.Term.Hls.t
+type tvars = C.logic_type W.Ty.Mtv.t
+
+(* -------------------------------------------------------------------------- *)
+(* ---    Built-in                                                        --- *)
+(* -------------------------------------------------------------------------- *)
+
+let add_builtin (tenv : tenv) ts lt_name lt_params  =
+  W.Ty.Hts.add tenv ts C.{lt_name ; lt_params; lt_def=None; lt_attr=[] }
+
+
+let find_ts wenv pkg thy name =
+  let th = Why3.Env.read_theory wenv pkg thy in
+  try
+    Why3.Theory.ns_find_ts th.th_export name
+  with Not_found ->
+    L.fatal "Cannot find %s.%s.%s"
+      (String.concat "." pkg ) thy (String.concat "." name)
+
+let add_builtins (wenv : W.Env.env) (tenv:tenv) =
+  begin
+    let ts_list = find_ts wenv ["list"] "List" ["list"] in
+    let ts_set = find_ts wenv ["set"] "Set" ["set"] in
+    add_builtin tenv W.Ty.ts_bool Utf8_logic.boolean [];
+    add_builtin tenv ts_list "\\list" ["A"];
+    add_builtin tenv ts_set "set" ["A"];
+  end
+
+(* -------------------------------------------------------------------------- *)
+(* ---    Type conversion                                                 --- *)
+(* -------------------------------------------------------------------------- *)
+
+let tvars_of_txs (txs: W.Ty.tvsymbol list) : string list * tvars =
+  L.debug ~level:3 "Called tvars_of_txs";
+  List.iter (fun (tv: W.Ty.tvsymbol) ->
+      L.debug ~level:3 "Name of : %a" pp_id tv.tv_name) txs;
+  List.fold_right
+    (fun (tv: W.Ty.tvsymbol) (txs,tvs) ->
+       let x = tv.tv_name.id_string in
+       x :: txs, W.Ty.Mtv.add tv (C.Lvar x) tvs
+    ) txs ([], W.Ty.Mtv.empty)
+
+
+let rec lt_of_ty (tenv : tenv) (tvs : tvars)  (ty: W.Ty.ty) : C.logic_type =
+  match ty.ty_node with
+  | Tyvar x -> W.Ty.Mtv.find x tvs
+  | Tyapp(s,[]) when W.Ty.(ts_equal s ts_int) -> C.Linteger
+  | Tyapp(s,[]) when W.Ty.(ts_equal s ts_real) -> C.Lreal
+  | Tyapp(s,ts) -> C.Ltype( lti_of_ts tenv s ,
+                            List.map (lt_of_ty tenv tvs ) ts)
+
+
+and lti_of_ts (tenv : tenv) (ts : W.Ty.tysymbol) : C.logic_type_info =
+  try W.Ty.Hts.find tenv ts with Not_found ->
+    let (lt_params,tvars) = tvars_of_txs ts.ts_args in
+    let lt_def =
+      match ts.ts_def with
+      | NoDef | Range _ | Float _ -> None
+      | Alias ty -> Some (C.LTsyn (lt_of_ty tenv tvars ty))
+    in
+    let lti =
+      C.{
+        lt_name =  construct_acsl_name ts.ts_name;
+        lt_params ; lt_def ;
+        lt_attr = [];
+      }
+    in W.Ty.Hts.add tenv ts lti ;
+    lti
+
+(* -------------------------------------------------------------------------- *)
+(* ---    Functions conversion                                            --- *)
+(* -------------------------------------------------------------------------- *)
+
+let lv_of_ty (tenv:tenv) (tvars:tvars) (index) (ty:W.Ty.ty) : C.logic_var =
+  Cil_const.make_logic_var_formal (Printf.sprintf "x%d" index)
+  @@ (lt_of_ty tenv tvars ty)
+
+let lt_of_ty_opt (lt_opt) =
+  match lt_opt with
+  | None -> C.Ctype (C.TVoid []) (* Same as logic_typing *)
+  | Some tr -> tr
+
+let li_of_ls (tenv:tenv) (ls : W.Term.lsymbol) (lenv:lenv)  : C.logic_info =
+  let l_tparams,tvars =
+    tvars_of_txs @@ W.Ty.Stv.elements @@  W.Term.ls_ty_freevars ls in
+  let l_type = Option.map (lt_of_ty tenv tvars ) ls.ls_value in
+  let l_profile = List.mapi (lv_of_ty tenv tvars ) ls.ls_args in
+  let l_args = List.map ( fun (lv:C.logic_var) -> lv.lv_type) l_profile in
+  let signature = C.Larrow (l_args, lt_of_ty_opt l_type) in
+  let li =
+    C.{
+      l_var_info = Cil_const.make_logic_var_global
+          (construct_acsl_name ls.ls_name)
+          signature;
+      l_labels = [];
+      l_tparams;
+      l_type;
+      l_profile ;
+      l_body = C.LBnone;
+    } in W.Term.Hls.add lenv ls li; li
+
+
+(* -------------------------------------------------------------------------- *)
+(* ---    Theory                                                          --- *)
+(* -------------------------------------------------------------------------- *)
+
+
+let import_theory env (tenv:tenv) (lenv:lenv) thname =
   let theory_name, theory_path = extract_path thname in
   try
     let theory = W.Env.read_theory env theory_path theory_name in
@@ -52,32 +222,63 @@ let import_theory env thname =
           begin
             match decl.d_node with
             | Dtype ts ->
-              L.debug ~level:0 "Type %a"  pp_id ts.ts_name
+              L.debug ~dkey "Decl and type %a"  pp_id ts.ts_name;
+              L.debug ~dkey "Location %a"  pp_id_loc ts.ts_name;
+              let lti =  lti_of_ts  tenv ts in
+              L.debug ~dkey "Correspondign LTI %a" pp_lti lti;
             | Ddata ddatas ->
               List.iter
                 (fun ((ts, _) : W.Decl.data_decl) ->
-                   L.debug ~level:0 "Data %a" pp_id  ts.ts_name
+                   L.debug ~dkey "Decl and data %a" pp_id  ts.ts_name;
+                   L.debug ~dkey "Location %a"  pp_id_loc ts.ts_name;
+                   let lti =  lti_of_ts  tenv ts  in
+                   L.debug ~dkey "Correspondign data LTI %a" pp_lti lti;
                 ) ddatas
             | Dparam ls ->
-              L.debug ~level:0 "Param %a" pp_id ls.ls_name
+              L.debug ~dkey "Decl and dparam %a" pp_id ls.ls_name;
+              L.debug ~dkey "Location %a"  pp_id_loc ls.ls_name
             | Dlogic dlogics ->
               List.iter
                 (fun ((ls,_):W.Decl.logic_decl) ->
-                   L.debug ~level:0 "Logic %a" pp_id ls.ls_name
+                   L.debug ~dkey "Decl and dlogic %a" pp_id ls.ls_name;
+                   L.debug ~dkey "Location %a"  pp_id_loc ls.ls_name;
+                   let li = li_of_ls tenv ls lenv in
+                   L.debug ~dkey "Corresponding dlogic LTI %a" pp_li li;
                 ) dlogics
-            | _ -> ()
+            | _ -> L.debug ~dkey "Decl and whatever"
           end
-        | Use th -> L.debug ~level:0 "Use %a" pp_id th.th_name
-        | Clone _ | Meta _ -> ()
+        | Use _| Clone _| Meta _ -> L.debug ~dkey ""
       ) theory.th_decls
   with W.Env.LibraryNotFound _ ->
     L.error "Library %s not found" thname
 
+(* -------------------------------------------------------------------------- *)
+(* ---    Main                                                            --- *)
+(* -------------------------------------------------------------------------- *)
+
 let () =
   Boot.Main.extend
     begin fun () ->
-      let env = create_why3_env @@ L.Library.get () in
-      List.iter (import_theory env) @@ L.Import.get ()
+      let libs = L.Library.get() in
+      let imports = L.Import.get() in
+      if libs <> [] || imports <> [] then
+        begin
+          let wenv = create_why3_env @@ libs in
+          let tenv : tenv = W.Ty.Hts.create 0 in
+          let lenv : lenv = W.Term.Hls.create 0 in
+          add_builtins wenv tenv;
+          List.iter (import_theory wenv tenv lenv) @@ imports;
+          W.Ty.Hts.iter (fun (tys) (lti) ->
+              L.result "Why3 type symbol : %a" pp_tys tys;
+              L.result "Corresponding CIL logic type info %a" pp_lti lti;
+            ) tenv;
+          W.Term.Hls.iter (fun (ls) (li) ->
+              L.result "Why3 logic symbol : %a" pp_ls ls;
+              L.result "Corresponding CIL logic info : %a" pp_li li;
+              L.result "Associated parameters : @[<hov2>%a@]" pp_lvs li.l_profile;
+            ) lenv;
+        end
+
     end
 
 (* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/wp/Why3Import.mli b/src/plugins/wp/Why3Import.mli
index 0bb95bea6749b20699ff71c8163c6eef46d73f50..529f9b18167c78d1dd8eb1ac9fe387fba9f2166d 100644
--- a/src/plugins/wp/Why3Import.mli
+++ b/src/plugins/wp/Why3Import.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Why3Provers.ml b/src/plugins/wp/Why3Provers.ml
index 204a593d6d3948bc2dcc7e24d08df3c5194f0bd4..39f5a30ee1abbd6901ca6a2936b8f20a53236927 100644
--- a/src/plugins/wp/Why3Provers.ml
+++ b/src/plugins/wp/Why3Provers.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/Why3Provers.mli b/src/plugins/wp/Why3Provers.mli
index 58fa30bd2871a6b2ca442c53a3fc5f203bae3e34..e8322017b6bf117066725a4d07a9f3525b8aa008 100644
--- a/src/plugins/wp/Why3Provers.mli
+++ b/src/plugins/wp/Why3Provers.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/WpTac.ml b/src/plugins/wp/WpTac.ml
index 6c33b85936cae84d7e39772c6532bd3f4489a7b8..4cdf7875b70645616f6e6837129a90ae83c31639 100644
--- a/src/plugins/wp/WpTac.ml
+++ b/src/plugins/wp/WpTac.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/WpTac.mli b/src/plugins/wp/WpTac.mli
index 905a1dea73b5b40d12e997d4dd4597c8015ec691..9b1e5aee9f99e2b36f9e75b960e893a86eea8ea9 100644
--- a/src/plugins/wp/WpTac.mli
+++ b/src/plugins/wp/WpTac.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgAnnot.ml b/src/plugins/wp/cfgAnnot.ml
index 47890c741a5e0007c1c9258aba999303be6ad863..cef88c1792d677a1e561e2d333f8dc87b706ce1d 100644
--- a/src/plugins/wp/cfgAnnot.ml
+++ b/src/plugins/wp/cfgAnnot.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgAnnot.mli b/src/plugins/wp/cfgAnnot.mli
index 563cedf01978568d7457f9c5c2b2f48d470a2c88..4ba1c62a0c57055375f026b878ff726fd7f7b3df 100644
--- a/src/plugins/wp/cfgAnnot.mli
+++ b/src/plugins/wp/cfgAnnot.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgCalculus.ml b/src/plugins/wp/cfgCalculus.ml
index 798c3ab58876636f1236e8f28679ebf014091023..e063a84fe1583955ab8919ef691f2be0bbdc2f2a 100644
--- a/src/plugins/wp/cfgCalculus.ml
+++ b/src/plugins/wp/cfgCalculus.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgCalculus.mli b/src/plugins/wp/cfgCalculus.mli
index 6eb31707a851fe298a7da1913e13875fd943c37d..ce9c3589c6164c463655d16e6f87cc7fb652f206 100644
--- a/src/plugins/wp/cfgCalculus.mli
+++ b/src/plugins/wp/cfgCalculus.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgDump.ml b/src/plugins/wp/cfgDump.ml
index d33831400fab4b910dc8a954fb52ac8735e571d6..9788635afcba2e34e2e717702f96127e1d8cbf19 100644
--- a/src/plugins/wp/cfgDump.ml
+++ b/src/plugins/wp/cfgDump.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgDump.mli b/src/plugins/wp/cfgDump.mli
index bbabfd022053e94bf8ee0c7c7b6616059f96baa3..e0bdd191dec880d7bffd53f89dd0f9b4ed00363c 100644
--- a/src/plugins/wp/cfgDump.mli
+++ b/src/plugins/wp/cfgDump.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgGenerator.ml b/src/plugins/wp/cfgGenerator.ml
index d8e6b4f593904f35ab71ab0920846b237c58a956..bf683b0c97377bf8b756add8cfb2ea6fb62b72b1 100644
--- a/src/plugins/wp/cfgGenerator.ml
+++ b/src/plugins/wp/cfgGenerator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -119,7 +119,8 @@ let add_fun_task model pool ~kf ?infos ?bhvs ?target () =
   end
 
 let notyet prop =
-  Wp_parameters.warning ~once:true
+  let source = fst (Property.location prop) in
+  Wp_parameters.warning ~once:true ~source
     "Not yet implemented wp for '%a'" Property.pretty prop
 
 (* -------------------------------------------------------------------------- *)
diff --git a/src/plugins/wp/cfgGenerator.mli b/src/plugins/wp/cfgGenerator.mli
index c975e440b4b3457f72364058d4f9f8f978bded5e..5b2f9eb471d929075a528067d86a6efe7c3372f2 100644
--- a/src/plugins/wp/cfgGenerator.mli
+++ b/src/plugins/wp/cfgGenerator.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgInfos.ml b/src/plugins/wp/cfgInfos.ml
index 9c922d48a981cdb2933f826d7729d1968a04f039..177b05eaee392bd1d9b298f55fb4fe13a4233e8a 100644
--- a/src/plugins/wp/cfgInfos.ml
+++ b/src/plugins/wp/cfgInfos.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgInfos.mli b/src/plugins/wp/cfgInfos.mli
index 41862f8a6b2b54a1efb830a8adfb7cec14df3a3f..03e1e80db786b84a777fd23b3f32ac2f8b640518 100644
--- a/src/plugins/wp/cfgInfos.mli
+++ b/src/plugins/wp/cfgInfos.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgInit.ml b/src/plugins/wp/cfgInit.ml
index 69fcd7338a1561b35afe325f5ae04dc9b7d74687..6cc86449cb4fc021d171a8738a51975540817885 100644
--- a/src/plugins/wp/cfgInit.ml
+++ b/src/plugins/wp/cfgInit.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgInit.mli b/src/plugins/wp/cfgInit.mli
index cb0e35c14c17e9436e6af2c2c401e6fe78f13d8e..86140c21748a0ddad59bb72d04330c522f728ce0 100644
--- a/src/plugins/wp/cfgInit.mli
+++ b/src/plugins/wp/cfgInit.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgWP.ml b/src/plugins/wp/cfgWP.ml
index 337e1a2fb00afffcc41a8e133c1da20c85d7c7e6..f90348c76126a91d7fd60b55793f483de31f7999 100644
--- a/src/plugins/wp/cfgWP.ml
+++ b/src/plugins/wp/cfgWP.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/cfgWP.mli b/src/plugins/wp/cfgWP.mli
index c28408f5cc98f37f3b0e4b5bd4dff6779fc8c5ab..eca0ea1f0d1e8535872ec588c869d1742587dc8a 100644
--- a/src/plugins/wp/cfgWP.mli
+++ b/src/plugins/wp/cfgWP.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/clabels.ml b/src/plugins/wp/clabels.ml
index d51f83e8890d73e1f54f6c77a0f92c91e17599b8..9eecd401917c18d65f18fb82ad6d7e3e84afc4f9 100644
--- a/src/plugins/wp/clabels.ml
+++ b/src/plugins/wp/clabels.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/clabels.mli b/src/plugins/wp/clabels.mli
index 71673f560666cb75ad45939a040e0176ff124c7b..bcdf799e6d359766f8c282b2752c975c421b3fe2 100644
--- a/src/plugins/wp/clabels.mli
+++ b/src/plugins/wp/clabels.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ctypes.ml b/src/plugins/wp/ctypes.ml
index 1a9cdb55c93ad75e184f55c754b96cf284e48e2f..e4d429a90a41a7f5b422c3c90ea8471bdf455bb4 100644
--- a/src/plugins/wp/ctypes.ml
+++ b/src/plugins/wp/ctypes.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ctypes.mli b/src/plugins/wp/ctypes.mli
index b030f61bf3eec6683303f15d614008345d4b1d17..91740ec33dfef70dfc4f928a7387343c8ae07d96 100644
--- a/src/plugins/wp/ctypes.mli
+++ b/src/plugins/wp/ctypes.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/doc/MakeDoc b/src/plugins/wp/doc/MakeDoc
index bfec7807705eec5494dc4e7e98f0a50ce9244778..5c8ff34ce3d7d4e901e89ba5ddeed864a0b330af 100644
--- a/src/plugins/wp/doc/MakeDoc
+++ b/src/plugins/wp/doc/MakeDoc
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of WP plug-in of Frama-C.                           #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat a l'energie atomique et aux energies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/wp/doc/manual/Makefile b/src/plugins/wp/doc/manual/Makefile
index 2187164efef9a997a49250693e3a24b2a26f69c9..fdb5655474c7c41ea9173a736dc5f08991926c15 100644
--- a/src/plugins/wp/doc/manual/Makefile
+++ b/src/plugins/wp/doc/manual/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of WP plug-in of Frama-C.                           #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat a l'energie atomique et aux energies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/wp/doc/ocamldoc.css b/src/plugins/wp/doc/ocamldoc.css
index 9673cc0344ebd7b4865268065b9176afda439a3e..e93fe757a5e2406e7c597192be623a28bcb27c37 100644
--- a/src/plugins/wp/doc/ocamldoc.css
+++ b/src/plugins/wp/doc/ocamldoc.css
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of WP plug-in of Frama-C.                           */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat a l'energie atomique et aux energies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/wp/driver.mli b/src/plugins/wp/driver.mli
index 0ee5a48dafab4774fa7353ef1e5f13946e3907d3..1a76750a30c4038327038635bbce088270bae9da 100644
--- a/src/plugins/wp/driver.mli
+++ b/src/plugins/wp/driver.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/driver.mll b/src/plugins/wp/driver.mll
index 2b12aeb88954cd93a46550cd120b6d9459b08066..a15af98a9889f7d51ded4e6b8579bec6f6afeaa7 100644
--- a/src/plugins/wp/driver.mll
+++ b/src/plugins/wp/driver.mll
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/dune b/src/plugins/wp/dune
index 1e53b4d17b0373062e0141cb5ca849d1d679a501..763e5af8cbc84a4f68d39f8c96ffe9d32fa4e562 100644
--- a/src/plugins/wp/dune
+++ b/src/plugins/wp/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/wp/dune-project b/src/plugins/wp/dune-project
index f82c480190bf04df0fba65be53dc33d436e47aaf..8bbddd250d143534a3a8dad3ea594eef29798b9e 100644
--- a/src/plugins/wp/dune-project
+++ b/src/plugins/wp/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/wp/filter_axioms.ml b/src/plugins/wp/filter_axioms.ml
index 3ea6dfd907b95db5d0d01c223e8fa2fc5758918d..e63c6508b923a8617ca6637b9542e1f350eb714c 100644
--- a/src/plugins/wp/filter_axioms.ml
+++ b/src/plugins/wp/filter_axioms.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/filter_axioms.mli b/src/plugins/wp/filter_axioms.mli
index 92b7551d8d127218e6d016e1927aca4688e82fa2..e5f86a99e8a46871c1258b028cdc1a4657eab07d 100644
--- a/src/plugins/wp/filter_axioms.mli
+++ b/src/plugins/wp/filter_axioms.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiComposer.ml b/src/plugins/wp/gui/GuiComposer.ml
index c8ed0c1c2d5bf1db5876f961bd121a4b3ccf5afc..cf9852213f4e21984653aed9e88e55369f483b8c 100644
--- a/src/plugins/wp/gui/GuiComposer.ml
+++ b/src/plugins/wp/gui/GuiComposer.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiComposer.mli b/src/plugins/wp/gui/GuiComposer.mli
index 0c5b934966eeb3e956c12963075b62a5b34eb6ce..4cea552a5924b059cd9b8ff5b37e836edb036b3e 100644
--- a/src/plugins/wp/gui/GuiComposer.mli
+++ b/src/plugins/wp/gui/GuiComposer.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiConfig.ml b/src/plugins/wp/gui/GuiConfig.ml
index 061068f4178a401bad8193f5d0a95f72f0529640..0b4a38e3894ed8289e67cb6fb211afb8dc5840cb 100644
--- a/src/plugins/wp/gui/GuiConfig.ml
+++ b/src/plugins/wp/gui/GuiConfig.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiConfig.mli b/src/plugins/wp/gui/GuiConfig.mli
index db313a4b2f62b25a8c6ff4e14ad6365d05cfa2b2..853848f308e7658fa795aa8c5dfa35ff73495f0a 100644
--- a/src/plugins/wp/gui/GuiConfig.mli
+++ b/src/plugins/wp/gui/GuiConfig.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiGoal.ml b/src/plugins/wp/gui/GuiGoal.ml
index e05f708a0e5af765fb1783d3551ee4baabdbe5a9..ff9e041a96a495ff43c72b8639d587519b9aa30e 100644
--- a/src/plugins/wp/gui/GuiGoal.ml
+++ b/src/plugins/wp/gui/GuiGoal.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiGoal.mli b/src/plugins/wp/gui/GuiGoal.mli
index 1e9a1d778aeb9c6e1aff3aa4a9aaf27dfdd158f5..e8ba8a7e2e6f7cb5135fa3a6f3d3238421f7d629 100644
--- a/src/plugins/wp/gui/GuiGoal.mli
+++ b/src/plugins/wp/gui/GuiGoal.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiList.ml b/src/plugins/wp/gui/GuiList.ml
index 4d694a5326392e5fe2dd00b9ef54aafaebbe81ad..418a9d0430dcf2784fce9fd176cf06106b5bae36 100644
--- a/src/plugins/wp/gui/GuiList.ml
+++ b/src/plugins/wp/gui/GuiList.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiList.mli b/src/plugins/wp/gui/GuiList.mli
index ec24cb8774cd995ca35b4fd644223499241bab15..2e904eb91775ad8713f9215bcc34aed983c3e4b3 100644
--- a/src/plugins/wp/gui/GuiList.mli
+++ b/src/plugins/wp/gui/GuiList.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiNavigator.ml b/src/plugins/wp/gui/GuiNavigator.ml
index 20891f104b667857c6f733f41fcd0857fa788a9b..995065027f383651bf6cf86af112b2664a855bef 100644
--- a/src/plugins/wp/gui/GuiNavigator.ml
+++ b/src/plugins/wp/gui/GuiNavigator.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiNavigator.mli b/src/plugins/wp/gui/GuiNavigator.mli
index 7517d792c19093305f47f2c6bfa4ca7f52f6f0d8..b7c41319be553dc583788ec1c2a99ed8fd87af78 100644
--- a/src/plugins/wp/gui/GuiNavigator.mli
+++ b/src/plugins/wp/gui/GuiNavigator.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiPanel.ml b/src/plugins/wp/gui/GuiPanel.ml
index 4e8c1dfc256835fe7d0661b779ee0b490bb30496..9370b0fef04609219dd0251fab6b1cbb71f62264 100644
--- a/src/plugins/wp/gui/GuiPanel.ml
+++ b/src/plugins/wp/gui/GuiPanel.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiPanel.mli b/src/plugins/wp/gui/GuiPanel.mli
index 60270aaa3e9f542d3cab688c0395cc6fff09631a..115045af3efa872e16878fa00bf75705d41ad467 100644
--- a/src/plugins/wp/gui/GuiPanel.mli
+++ b/src/plugins/wp/gui/GuiPanel.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiProof.ml b/src/plugins/wp/gui/GuiProof.ml
index a7fda271b84c90c7511a93f11539b3a7204cd343..efbd80873a100f4297802328a56e4dc2d6965bfb 100644
--- a/src/plugins/wp/gui/GuiProof.ml
+++ b/src/plugins/wp/gui/GuiProof.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiProof.mli b/src/plugins/wp/gui/GuiProof.mli
index bfdefb902ff43fd69f1e19b720646319b27b022a..565a5f5304c8cff6ecac2a38c8599c9996bc580f 100644
--- a/src/plugins/wp/gui/GuiProof.mli
+++ b/src/plugins/wp/gui/GuiProof.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiProver.ml b/src/plugins/wp/gui/GuiProver.ml
index 792592208198d06176cf9f9384d32aec36bfc960..5336151f86efc3f40bcb88b4b1782d1f25e3cf8e 100644
--- a/src/plugins/wp/gui/GuiProver.ml
+++ b/src/plugins/wp/gui/GuiProver.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiProver.mli b/src/plugins/wp/gui/GuiProver.mli
index cb50db509887b2ecede61e503cddfac097477e77..f270b87988e946f54a9985f5e97c1dbe7fa80d42 100644
--- a/src/plugins/wp/gui/GuiProver.mli
+++ b/src/plugins/wp/gui/GuiProver.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiSequent.ml b/src/plugins/wp/gui/GuiSequent.ml
index 90d901658720398f68d28ced2bbd1b3847002840..5b3841e652d2184e610c238b9fefa16bdee579eb 100644
--- a/src/plugins/wp/gui/GuiSequent.ml
+++ b/src/plugins/wp/gui/GuiSequent.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiSequent.mli b/src/plugins/wp/gui/GuiSequent.mli
index a0a2b2841bdd6063f080fb433ccf6d26dc628809..31fc7d0a5b5fdef983b4dd0bfa83b3438b5ca10a 100644
--- a/src/plugins/wp/gui/GuiSequent.mli
+++ b/src/plugins/wp/gui/GuiSequent.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiSource.ml b/src/plugins/wp/gui/GuiSource.ml
index b2fff1a7327a896f89b6a426c24181d7fae1563d..d2ba5837022a148f4e555319f7219ac56b1a53cd 100644
--- a/src/plugins/wp/gui/GuiSource.ml
+++ b/src/plugins/wp/gui/GuiSource.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiSource.mli b/src/plugins/wp/gui/GuiSource.mli
index 9da10e0ac56cb38c9f93cfd5a246767a5bb5e7f8..a48f92a6017fc05ca1289f80237635153b5fb0e3 100644
--- a/src/plugins/wp/gui/GuiSource.mli
+++ b/src/plugins/wp/gui/GuiSource.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiTactic.ml b/src/plugins/wp/gui/GuiTactic.ml
index 079a0c6b3bf9f27865801e5fad218c0e6cd321f6..effbbe42fb05746b9b770148b9b69b9502e2ad89 100644
--- a/src/plugins/wp/gui/GuiTactic.ml
+++ b/src/plugins/wp/gui/GuiTactic.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/GuiTactic.mli b/src/plugins/wp/gui/GuiTactic.mli
index 716d4620b65d0e4e0804fa1f2fa6af3ed59893d8..3cbf61ce41fabee78223f4676739bb974d43342a 100644
--- a/src/plugins/wp/gui/GuiTactic.mli
+++ b/src/plugins/wp/gui/GuiTactic.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/gui/dune b/src/plugins/wp/gui/dune
index 588c9b7be28d78bea10c06184f95cfa5ca434382..14fd23812432852d70e08003fa44a3df5469f7e3 100644
--- a/src/plugins/wp/gui/dune
+++ b/src/plugins/wp/gui/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/src/plugins/wp/mcfg.ml b/src/plugins/wp/mcfg.ml
index d746f4ba4aace5dc43ef1c9d87c8c318aa08e200..3dfc0d78450fb97c2c31e947bee51d9002ae4823 100644
--- a/src/plugins/wp/mcfg.ml
+++ b/src/plugins/wp/mcfg.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/normAtLabels.ml b/src/plugins/wp/normAtLabels.ml
index 2ba4ce6c517109306216ab4db62adbe87154b79f..9b9028ce665601ef9971db049e1b62e98768bcfe 100644
--- a/src/plugins/wp/normAtLabels.ml
+++ b/src/plugins/wp/normAtLabels.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/normAtLabels.mli b/src/plugins/wp/normAtLabels.mli
index 0cf6b837fde4e1c9ed9a697ce04a21a6794e4230..e79c1e2e807fe31c858cbb1789c6e3f1c9948ef2 100644
--- a/src/plugins/wp/normAtLabels.mli
+++ b/src/plugins/wp/normAtLabels.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/prover.ml b/src/plugins/wp/prover.ml
index 10a5249875bf288b342976b03ee4b980013cf5ff..39054c4157e4898c5907c8a5ca3ad457ee1c276a 100644
--- a/src/plugins/wp/prover.ml
+++ b/src/plugins/wp/prover.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/prover.mli b/src/plugins/wp/prover.mli
index b8329c03d68137a0e6b721ce0dd29ac4f753d512..962529e99c6c4dc6a8974c257a8f7c0825e08e00 100644
--- a/src/plugins/wp/prover.mli
+++ b/src/plugins/wp/prover.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ptip.ml b/src/plugins/wp/ptip.ml
index 2a4a5acd1da2c2568ec01cb666e65ee9a2eb1c95..31f47111c4f4cd76076463c1de42e0c9e1a0da5f 100644
--- a/src/plugins/wp/ptip.ml
+++ b/src/plugins/wp/ptip.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/ptip.mli b/src/plugins/wp/ptip.mli
index 2616b91eca0dc59723bc9fe95d919d0e700fb260..24b002a6543741675bab17d446bc10921b774019 100644
--- a/src/plugins/wp/ptip.mli
+++ b/src/plugins/wp/ptip.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/register.ml b/src/plugins/wp/register.ml
index f4beb94b109d5d22fa3f753bb5d7bfaeb344c3f2..ff8ff0cfe328c8ebc90aa54ce0c9ac3963ffd6d1 100644
--- a/src/plugins/wp/register.ml
+++ b/src/plugins/wp/register.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/register.mli b/src/plugins/wp/register.mli
index 25c1b8ff10375d76ac4cdb59bfbd734133548ffc..446893af44e1ebf0771feaaa0d60172399d6dd9d 100644
--- a/src/plugins/wp/register.mli
+++ b/src/plugins/wp/register.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/rformat.mli b/src/plugins/wp/rformat.mli
index 919ca0219de35764bc08b2d94933a73fba911771..73a3b63c0eb67eb2305aa741a333e0af561b8b3c 100644
--- a/src/plugins/wp/rformat.mli
+++ b/src/plugins/wp/rformat.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/rformat.mll b/src/plugins/wp/rformat.mll
index 1cb36699bdaf8278082e9979249597bc441ed2f3..3525146a32306ba20283fc131223a15f3bfd3135 100644
--- a/src/plugins/wp/rformat.mll
+++ b/src/plugins/wp/rformat.mll
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/script.mli b/src/plugins/wp/script.mli
index 5b304943a1b734d9e635c4c3c9a9ad94a0e8b716..4c7f05dce2439c53bce36eeac4ca9a16396d49bf 100644
--- a/src/plugins/wp/script.mli
+++ b/src/plugins/wp/script.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/script.mll b/src/plugins/wp/script.mll
index 8786580d1de6a4c92bbb655e71fadc372f6864bd..54057afa1db02f201f51b4299319d161da347293 100644
--- a/src/plugins/wp/script.mll
+++ b/src/plugins/wp/script.mll
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/Makefile.resources b/src/plugins/wp/share/Makefile.resources
index 3819c585148b7bd0b051e5ce36d0377955fa29bd..57e5a3c260f48bf4419cc704870756d339a765d8 100644
--- a/src/plugins/wp/share/Makefile.resources
+++ b/src/plugins/wp/share/Makefile.resources
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of WP plug-in of Frama-C.                           #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat a l'energie atomique et aux energies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/src/plugins/wp/share/coqwp/ArcTrigo.v b/src/plugins/wp/share/coqwp/ArcTrigo.v
index 197107c43c2905fc6cf5e5e00817e2a4f3d8ef46..efa8ce229c40e6d3832cf56cf77088a24421b04e 100644
--- a/src/plugins/wp/share/coqwp/ArcTrigo.v
+++ b/src/plugins/wp/share/coqwp/ArcTrigo.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Bits.v b/src/plugins/wp/share/coqwp/Bits.v
index bf3743b4b9ae120b4d4ddad3bd96b3da4b9359c3..ace3adfe237350473f601882b12791c2641f9d5e 100644
--- a/src/plugins/wp/share/coqwp/Bits.v
+++ b/src/plugins/wp/share/coqwp/Bits.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Cbits.v b/src/plugins/wp/share/coqwp/Cbits.v
index 52871ac8f21112bd3d1952c086ac65f5732a282b..cce5239d5f069bdeabefe5d0bd82458d76ea1a8c 100644
--- a/src/plugins/wp/share/coqwp/Cbits.v
+++ b/src/plugins/wp/share/coqwp/Cbits.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Cfloat.v b/src/plugins/wp/share/coqwp/Cfloat.v
index 80c2c5566bd6156a1edcfce2ccbc02c07d2beca4..900dc0bf95ab55d1ffbf39106a64705d43ff703b 100644
--- a/src/plugins/wp/share/coqwp/Cfloat.v
+++ b/src/plugins/wp/share/coqwp/Cfloat.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Cint.v b/src/plugins/wp/share/coqwp/Cint.v
index 6fc58b605b0ea3d9a3577789e8ba74ed4b5ba022..0f51ecb8176ac4e75d8e209ebf2ef69321c774ce 100644
--- a/src/plugins/wp/share/coqwp/Cint.v
+++ b/src/plugins/wp/share/coqwp/Cint.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Cmath.v b/src/plugins/wp/share/coqwp/Cmath.v
index 906070bdb50791f0542f1f3b57436b48b30b6056..64000d2394ae44dde104ed22c2ff91bc7dbeb834 100644
--- a/src/plugins/wp/share/coqwp/Cmath.v
+++ b/src/plugins/wp/share/coqwp/Cmath.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/ExpLog.v b/src/plugins/wp/share/coqwp/ExpLog.v
index 6ffe0fe863e1c12bebe8b99ba8029a9266225479..c54f4c8a21a3ce0b839f7d3b0936faa0ccbb664d 100644
--- a/src/plugins/wp/share/coqwp/ExpLog.v
+++ b/src/plugins/wp/share/coqwp/ExpLog.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Memory.v b/src/plugins/wp/share/coqwp/Memory.v
index 05f8b06f895ce09b1bfee50403c7f4be7c4fe2f8..10f6db30e45181a52147be3d75155ef38f9ab991 100644
--- a/src/plugins/wp/share/coqwp/Memory.v
+++ b/src/plugins/wp/share/coqwp/Memory.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Qed.v b/src/plugins/wp/share/coqwp/Qed.v
index 920c860518f0bc48f76234735a89d453a48e534a..6715271e03fe1f9044c8221b94617635ab5e9180 100644
--- a/src/plugins/wp/share/coqwp/Qed.v
+++ b/src/plugins/wp/share/coqwp/Qed.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Qedlib.v b/src/plugins/wp/share/coqwp/Qedlib.v
index c729d6085bc9b2e25bbefe72e134944f91dd0f6c..3ed61c24f08529b9fb3e6b9435bebbdeec982135 100644
--- a/src/plugins/wp/share/coqwp/Qedlib.v
+++ b/src/plugins/wp/share/coqwp/Qedlib.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Square.v b/src/plugins/wp/share/coqwp/Square.v
index b4420be7b7f0f5815f4c86c3d683467b17817514..5d73a834eb9e3437142cd5ccdcea418b3de37a96 100644
--- a/src/plugins/wp/share/coqwp/Square.v
+++ b/src/plugins/wp/share/coqwp/Square.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Vlist.v b/src/plugins/wp/share/coqwp/Vlist.v
index a4bf4587b9a730a725cb1e488333c12042506fb5..f08a536677362800cf9d6942d0c05e2ffc6eff99 100644
--- a/src/plugins/wp/share/coqwp/Vlist.v
+++ b/src/plugins/wp/share/coqwp/Vlist.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Vset.v b/src/plugins/wp/share/coqwp/Vset.v
index 143457a8fa7bf03d1468b6e47ac6f9e5f36ea0cb..a5f134a587ec880a1a69bbc4e6658fc3409dc148 100644
--- a/src/plugins/wp/share/coqwp/Vset.v
+++ b/src/plugins/wp/share/coqwp/Vset.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/coqwp/Zbits.v b/src/plugins/wp/share/coqwp/Zbits.v
index 25861217ead38e7aba01e57365136a0307b79453..dea0a465b9702667aacd1ffea17b52edb23b27f1 100644
--- a/src/plugins/wp/share/coqwp/Zbits.v
+++ b/src/plugins/wp/share/coqwp/Zbits.v
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/why3/frama_c_wp/cbits.mlw b/src/plugins/wp/share/why3/frama_c_wp/cbits.mlw
index 7d2628dbcee551da3e5c0e0b9c68d9793cbe88ed..41202b023aaa69c832dcfbe41d8bcf187078bd2f 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/cbits.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/cbits.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -37,7 +37,7 @@ theory Cbits
 
   (** * C-Integer Bits * **)
 
-  function lnot int : int
+  function lnot (x:int) : int = -x-1
 
   function land int int : int
   clone algebra.AC as Land with type t = int, function op = land, axiom .
@@ -53,8 +53,6 @@ theory Cbits
 
 
 (** * Bitwise identities *)
-(** ** lnot identities *)
-  axiom lnot_bool: ((lnot 0) = (-1)) /\ ((lnot (-1)) = 0)
 
 (** ** land identities *)
   axiom land_idemp: forall x:int [land x x]. (land x x) = x
@@ -499,7 +497,7 @@ theory Cbits
   meta "remove_for_" lemma is_sint_lsl1_sup
 
 (** *** Cast to sint8 C type *)
-  axiom is_sint8_lnot: forall x:int [to_sint8 (lnot x)].
+  lemma is_sint8_lnot: forall x:int [to_sint8 (lnot x)].
     is_sint8 x ->  to_sint8 (lnot x) = lnot x
 
   axiom is_sint8_lxor: forall x y:int [to_sint8 (lxor x y)].
@@ -524,7 +522,7 @@ theory Cbits
     8<=y -> to_sint8 (lsl 1 y) = 0
 
 (** *** Cast to sint16 C type *)
-  axiom is_sint16_lnot : forall x:int [to_sint16 (lnot x)].
+  lemma is_sint16_lnot : forall x:int [to_sint16 (lnot x)].
     is_sint16 x -> to_sint16 (lnot x) = lnot x
 
   axiom is_sint16_lxor : forall x y:int [to_sint16 (lxor x y)].
@@ -549,7 +547,7 @@ theory Cbits
     16<=y -> to_sint16 (lsl 1 y) = 0
 
 (** *** Cast to sint32 C type *)
-  axiom is_sint32_lnot : forall x:int [to_sint32(lnot(x))].
+  lemma is_sint32_lnot : forall x:int [to_sint32(lnot(x))].
     is_sint32 x -> to_sint32 (lnot x) = lnot x
 
   axiom is_sint32_lxor : forall x y:int [to_sint32 (lxor x y)].
@@ -574,7 +572,7 @@ theory Cbits
     32<=y -> to_sint32 (lsl 1 y) = 0
 
 (** *** Cast to sint64 C type *)
-  axiom is_sint64_lnot : forall x:int [to_sint64 (lnot x)].
+  lemma is_sint64_lnot : forall x:int [to_sint64 (lnot x)].
     is_sint64 x -> to_sint64 (lnot x) = lnot x
 
   axiom is_sint64_lxor : forall x y:int [to_sint64 (lxor x y)].
diff --git a/src/plugins/wp/share/why3/frama_c_wp/cfloat.mlw b/src/plugins/wp/share/why3/frama_c_wp/cfloat.mlw
index 78ad6b44feed7a1fc3fa1ee8e0e879abe5fac67a..19245ac767612267575aa59a953d426076730584 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/cfloat.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/cfloat.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/why3/frama_c_wp/cint.mlw b/src/plugins/wp/share/why3/frama_c_wp/cint.mlw
index b027d275b4d372490f05d8392f990305953ae0d2..22f2e79f9ec522f3af333431a0fdbf07e0b1cbc6 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/cint.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/cint.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/why3/frama_c_wp/cmath.mlw b/src/plugins/wp/share/why3/frama_c_wp/cmath.mlw
index a70850a25a451a9664af047ebfdc642e566ffe15..dc02aa9058f5ba0223545a41d23d69bcbcea61ad 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/cmath.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/cmath.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/why3/frama_c_wp/memaddr.mlw b/src/plugins/wp/share/why3/frama_c_wp/memaddr.mlw
index 3dda4f82d376a5cb1b77a644d0567910a8ee8daa..f6022c775262af8b7f6ac271cd83966d28575984 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/memaddr.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/memaddr.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/why3/frama_c_wp/memory.mlw b/src/plugins/wp/share/why3/frama_c_wp/memory.mlw
index df3bc8578965be946d9f1c941ac757c851df3412..e4f2a6357a66cb0f609e8f794fa17f7d662e4ff7 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/memory.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/memory.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/why3/frama_c_wp/qed.mlw b/src/plugins/wp/share/why3/frama_c_wp/qed.mlw
index b8694735cf22bb10f93a5ab7fbc439a53769d633..b9429ed30474464bea60bc1ae8827c87beb65f13 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/qed.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/qed.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/why3/frama_c_wp/vlist.mlw b/src/plugins/wp/share/why3/frama_c_wp/vlist.mlw
index 90dd0399e3cdf498d95a0e8fc2d56d4f8ae02fcb..795804e951f5120dacc924d46663a74b28c20107 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/vlist.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/vlist.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/why3/frama_c_wp/vset.mlw b/src/plugins/wp/share/why3/frama_c_wp/vset.mlw
index f9ca92b042c2dd83f5eacc2df728cb6dd23495a7..a2d895336550321e3e5101656b3d0a69fb7cd072 100644
--- a/src/plugins/wp/share/why3/frama_c_wp/vset.mlw
+++ b/src/plugins/wp/share/why3/frama_c_wp/vset.mlw
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/share/wp.driver b/src/plugins/wp/share/wp.driver
index 52b3e021364caa844726656f22dcfb89ca2b5d6d..ae31e0275d22732440e14447ede176473c954c36 100644
--- a/src/plugins/wp/share/wp.driver
+++ b/src/plugins/wp/share/wp.driver
@@ -2,7 +2,7 @@
 /*                                                                        */
 /*  This file is part of WP plug-in of Frama-C.                           */
 /*                                                                        */
-/*  Copyright (C) 2007-2023                                               */
+/*  Copyright (C) 2007-2024                                               */
 /*    CEA (Commissariat a l'energie atomique et aux energies              */
 /*         alternatives)                                                  */
 /*                                                                        */
diff --git a/src/plugins/wp/tests/wp_acsl/bitwise.i b/src/plugins/wp/tests/wp_acsl/bitwise.i
index b190363d3ec4548bc6cf11ad08574ce2436af48d..351aac23fb1ccc01daccecf3d0e03a520ee34e4c 100644
--- a/src/plugins/wp/tests/wp_acsl/bitwise.i
+++ b/src/plugins/wp/tests/wp_acsl/bitwise.i
@@ -2,7 +2,7 @@
    OPT: -wp -wp-model Typed -wp-par 1 -wp-prop="-zbit"
 */
 
-/*@ ensures \result == (int) (a & b & c); 
+/*@ ensures \result == (int) (a & b & c);
   @ ensures band0: 3!=(\result & 0xF0);
   @ behavior bit0:
   @   assumes bit0: 1==(a & 1) && 1==(b & 1) && 1==(c & 1);
@@ -17,15 +17,15 @@
   @ behavior bit3:
   @   assumes bit3: 2!=(a & 2) && 0==(b & c & 2) && 1 != (a & b & 1);
   @   ensures band5: (\result & 2) == (a & b & 1);
-  @ behavior bit4: 
-  @   assumes bit4: a==-1 && b==~0 && c==-1; 
+  @ behavior bit4:
+  @   assumes bit4: a==-1 && b==~0 && c==-1;
   @   ensures band6: \result==-1;
   @ behavior bit5:
   @   ensures band7: zbit: (0x55==(0xFFF & a)) ==> (0x5555!=(0xFFFF & a));
  */
 int band(int a,int b,int c) { return a & b & c; }
 
-/*@ ensures \result == (int) (a | b | c); 
+/*@ ensures \result == (int) (a | b | c);
   @ ensures bor0: 3!=(\result | 0xF0);
   @ behavior bit1:
   @   assumes bit1: 2==(a & 2);
@@ -33,8 +33,8 @@ int band(int a,int b,int c) { return a & b & c; }
   @ behavior bit2:
   @   assumes bit2: 0==(a & 4) && 0==((b | c) & 4);
   @   ensures bor2: 0==(\result & 4);
-  @ behavior bit3: 
-  @   assumes bit3: a==0 && b == 0 && c==0; 
+  @ behavior bit3:
+  @   assumes bit3: a==0 && b == 0 && c==0;
   @   ensures bor3: \result==0;
  */
 int bor(int a,int b, int c) { return a | b | c ; }
@@ -49,12 +49,15 @@ int bor(int a,int b, int c) { return a | b | c ; }
   @ behavior bit3:
   @   assumes a == ~b;
   @   ensures \result == -1;
- */ 
+ */
 int bxor(int a,int b) { return a ^ b ; }
 
 //@ ensures \result == (int) (~a) ;
 int bnot(int a) { return ~a ; }
 
+//@ ensures \result == x + k;
+int baddnot(int x, int k) { return ~( ~x - k ); }
+
 /*@ ensures \result == (int) (a << n) ;
   @  behavior shift1:
   @    assumes n == 3;
@@ -62,7 +65,7 @@ int bnot(int a) { return ~a ; }
   @    ensures lsl2: 1 != (\result & 1);
   @  behavior shift2:
   @    assumes a == 2;
-  @    ensures lsl3: 0 != ( (a<<(unsigned)(n) ) & ((1 << (1+(unsigned)(n)) ))); 
+  @    ensures lsl3: 0 != ( (a<<(unsigned)(n) ) & ((1 << (1+(unsigned)(n)) )));
 */
 int lshift(int a,int n) { return a << n ; }
 
diff --git a/src/plugins/wp/tests/wp_acsl/oracle/bitwise.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle/bitwise.res.oracle
index 38f6190455e3d7be0f64b18ea99d3d2bb5332264..31891f1fa03f4443d6aaa51ef181b727120f9826 100644
--- a/src/plugins/wp/tests/wp_acsl/oracle/bitwise.res.oracle
+++ b/src/plugins/wp/tests/wp_acsl/oracle/bitwise.res.oracle
@@ -1,9 +1,11 @@
 # frama-c -wp [...]
 [kernel] Parsing bitwise.i (no preprocessing)
 [wp] Running WP plugin...
+[wp] [Valid] Goal baddnot_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal baddnot_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
 [wp] [Valid] Goal band_exits (Cfg) (Unreachable)
 [wp] [Valid] Goal band_terminates (Cfg) (Trivial)
-[wp] Warning: Missing RTE guards
 [wp] [Valid] Goal band_bool_exits (Cfg) (Unreachable)
 [wp] [Valid] Goal band_bool_terminates (Cfg) (Trivial)
 [wp] [Valid] Goal bnot_exits (Cfg) (Unreachable)
@@ -24,6 +26,16 @@
 [wp] [Valid] Goal lshift_terminates (Cfg) (Trivial)
 [wp] [Valid] Goal rshift_exits (Cfg) (Unreachable)
 [wp] [Valid] Goal rshift_terminates (Cfg) (Trivial)
+------------------------------------------------------------
+  Function baddnot
+------------------------------------------------------------
+
+Goal Post-condition (file bitwise.i, line 58) in 'baddnot':
+Let x_1 = lnot(lnot(x) - k).
+Assume { Type: is_sint32(k) /\ is_sint32(x) /\ is_sint32(x_1). }
+Prove: (k + x) = x_1.
+
+------------------------------------------------------------
 ------------------------------------------------------------
   Function band
 ------------------------------------------------------------
@@ -94,7 +106,7 @@ Prove: true.
   Function band_bool with behavior false
 ------------------------------------------------------------
 
-Goal Post-condition for 'false' (file bitwise.i, line 91) in 'band_bool':
+Goal Post-condition for 'false' (file bitwise.i, line 94) in 'band_bool':
 Assume {
   Type: is_bool(a) /\ is_bool(b).
   (* Pre-condition for 'false' *)
@@ -107,7 +119,7 @@ Prove: land(a, b) = 0.
   Function band_bool with behavior true
 ------------------------------------------------------------
 
-Goal Post-condition for 'true' (file bitwise.i, line 88) in 'band_bool':
+Goal Post-condition for 'true' (file bitwise.i, line 91) in 'band_bool':
 Prove: true.
 
 ------------------------------------------------------------
@@ -160,7 +172,7 @@ Prove: true.
   Function bor_bool with behavior false
 ------------------------------------------------------------
 
-Goal Post-condition for 'false' (file bitwise.i, line 81) in 'bor_bool':
+Goal Post-condition for 'false' (file bitwise.i, line 84) in 'bor_bool':
 Assume {
   Type: is_bool(a) /\ is_bool(b).
   (* Pre-condition for 'false' *)
@@ -173,7 +185,7 @@ Prove: (a = 0) /\ (b = 0).
   Function bor_bool with behavior true
 ------------------------------------------------------------
 
-Goal Post-condition for 'true' (file bitwise.i, line 78) in 'bor_bool':
+Goal Post-condition for 'true' (file bitwise.i, line 81) in 'bor_bool':
 Prove: true.
 
 ------------------------------------------------------------
@@ -213,7 +225,7 @@ Prove: true.
   Function bxor_bool with behavior false
 ------------------------------------------------------------
 
-Goal Post-condition for 'false' (file bitwise.i, line 100) in 'bxor_bool':
+Goal Post-condition for 'false' (file bitwise.i, line 103) in 'bxor_bool':
 Assume {
   Type: is_bool(a) /\ is_bool(b).
   (* Pre-condition for 'false' *)
@@ -226,7 +238,7 @@ Prove: b = a.
   Function bxor_bool with behavior true
 ------------------------------------------------------------
 
-Goal Post-condition for 'true' (file bitwise.i, line 97) in 'bxor_bool':
+Goal Post-condition for 'true' (file bitwise.i, line 100) in 'bxor_bool':
 Assume {
   Type: is_bool(a) /\ is_bool(b).
   (* Pre-condition for 'true' *)
@@ -239,97 +251,97 @@ Prove: b != a.
   Function cast_uchar
 ------------------------------------------------------------
 
-Goal Post-condition (file bitwise.i, line 131) in 'cast_uchar':
+Goal Post-condition (file bitwise.i, line 134) in 'cast_uchar':
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_test,ok' (file bitwise.i, line 134):
+Goal Check 'bit_test,ok' (file bitwise.i, line 137):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_test1,ok' (file bitwise.i, line 135):
+Goal Check 'bit_test1,ok' (file bitwise.i, line 138):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_unset,ok' (file bitwise.i, line 136):
+Goal Check 'bit_unset,ok' (file bitwise.i, line 139):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_set_unset,ok' (file bitwise.i, line 137):
+Goal Check 'bit_set_unset,ok' (file bitwise.i, line 140):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_set_unset2,ok' (file bitwise.i, line 138):
+Goal Check 'bit_set_unset2,ok' (file bitwise.i, line 141):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_defined,ok' (file bitwise.i, line 140):
+Goal Check 'bit_defined,ok' (file bitwise.i, line 143):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_defined2,ok' (file bitwise.i, line 141):
+Goal Check 'bit_defined2,ok' (file bitwise.i, line 144):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_to_signed_positive,ok' (file bitwise.i, line 143):
+Goal Check 'bit_to_signed_positive,ok' (file bitwise.i, line 146):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_to_signed_positive2,ok' (file bitwise.i, line 144):
+Goal Check 'bit_to_signed_positive2,ok' (file bitwise.i, line 147):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_to_signed_negative,ok' (file bitwise.i, line 145):
+Goal Check 'bit_to_signed_negative,ok' (file bitwise.i, line 148):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_to_signed_negative2,ok' (file bitwise.i, line 146):
+Goal Check 'bit_to_signed_negative2,ok' (file bitwise.i, line 149):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_to_signed,ok' (file bitwise.i, line 147):
+Goal Check 'bit_to_signed,ok' (file bitwise.i, line 150):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_to_signed2,ok' (file bitwise.i, line 148):
+Goal Check 'bit_to_signed2,ok' (file bitwise.i, line 151):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_lsl_lowest,ok' (file bitwise.i, line 150):
+Goal Check 'bit_lsl_lowest,ok' (file bitwise.i, line 153):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_lsl_higher_set,ok' (file bitwise.i, line 151):
+Goal Check 'bit_lsl_higher_set,ok' (file bitwise.i, line 154):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_lsl_higher_unset,ok' (file bitwise.i, line 152):
+Goal Check 'bit_lsl_higher_unset,ok' (file bitwise.i, line 155):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_lsr_set,ok' (file bitwise.i, line 154):
+Goal Check 'bit_lsr_set,ok' (file bitwise.i, line 157):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'bit_lsr_unset,ok' (file bitwise.i, line 155):
+Goal Check 'bit_lsr_unset,ok' (file bitwise.i, line 158):
 Prove: true.
 
 ------------------------------------------------------------
@@ -337,68 +349,68 @@ Prove: true.
   Function lemma
 ------------------------------------------------------------
 
-Goal Check 'zbit,a1' (file bitwise.i, line 105):
+Goal Check 'zbit,a1' (file bitwise.i, line 108):
 Assume { Type: is_uint32(a). }
 Prove: (a + lnot(a)) = (-1).
 
 ------------------------------------------------------------
 
-Goal Check 'zbit,a2' (file bitwise.i, line 106):
+Goal Check 'zbit,a2' (file bitwise.i, line 109):
 Assume { Type: is_uint32(a). }
 Prove: lor(a, lnot(a)) = (-1).
 
 ------------------------------------------------------------
 
-Goal Check 'zbit,a3' (file bitwise.i, line 107):
+Goal Check 'zbit,a3' (file bitwise.i, line 110):
 Assume { Type: is_uint32(a). }
 Prove: land(a, lnot(a)) = 0.
 
 ------------------------------------------------------------
 
-Goal Check (file bitwise.i, line 108):
+Goal Check (file bitwise.i, line 111):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check (file bitwise.i, line 109):
+Goal Check (file bitwise.i, line 112):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check (file bitwise.i, line 110):
+Goal Check (file bitwise.i, line 113):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check (file bitwise.i, line 111):
+Goal Check (file bitwise.i, line 114):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check (file bitwise.i, line 112):
+Goal Check (file bitwise.i, line 115):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'zbit,a4' (file bitwise.i, line 114):
+Goal Check 'zbit,a4' (file bitwise.i, line 117):
 Assume { Type: is_uint32(a) /\ is_uint32(b). }
 Prove: (land(a, b) % 256) = land(255, land(a, b)).
 
 ------------------------------------------------------------
 
-Goal Check (file bitwise.i, line 118):
+Goal Check (file bitwise.i, line 121):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Check 'zbit,a5' (file bitwise.i, line 120):
+Goal Check 'zbit,a5' (file bitwise.i, line 123):
 Let x = lsl(1, k).
 Assume { Type: is_uint32(a) /\ is_uint32(b) /\ is_uint32(k). }
 Prove: (land(77, land(a, b)) % x) = land(77, land(a, land(b, x - 1))).
 
 ------------------------------------------------------------
 
-Goal Check (file bitwise.i, line 124):
+Goal Check (file bitwise.i, line 127):
 Prove: true.
 
 ------------------------------------------------------------
@@ -406,7 +418,7 @@ Prove: true.
   Function lshift
 ------------------------------------------------------------
 
-Goal Post-condition (file bitwise.i, line 58) in 'lshift':
+Goal Post-condition (file bitwise.i, line 61) in 'lshift':
 Prove: true.
 
 ------------------------------------------------------------
@@ -435,7 +447,7 @@ Prove: true.
   Function rshift
 ------------------------------------------------------------
 
-Goal Post-condition (file bitwise.i, line 69) in 'rshift':
+Goal Post-condition (file bitwise.i, line 72) in 'rshift':
 Prove: true.
 
 ------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_acsl/oracle/terminates_call_options.0.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle/terminates_call_options.0.res.oracle
index 0c0e75bda644384e9c87aad58541a0f8a1c7b8bb..abdd33ee5e23d51c3c7fec93aeb1ebfc846a8d24 100644
--- a/src/plugins/wp/tests/wp_acsl/oracle/terminates_call_options.0.res.oracle
+++ b/src/plugins/wp/tests/wp_acsl/oracle/terminates_call_options.0.res.oracle
@@ -1,10 +1,10 @@
 # frama-c -wp [...]
 [kernel] Parsing terminates_call_options.c (with preprocessing)
 [wp] Running WP plugin...
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:511: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:543: Warning: 
   Neither code nor explicit terminates for function exit,
    generating default clauses. See -generated-spec-* options for more info
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:642: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:715: Warning: 
   Neither code nor explicit exits and terminates for function div,
    generating default clauses. See -generated-spec-* options for more info
 [wp] Warning: Missing RTE guards
@@ -46,3 +46,15 @@ Goal Termination-condition (file terminates_call_options.c, line 36) in 'libc_ca
 Prove: true.
 
 ------------------------------------------------------------
+
+Goal Instance of 'Pre-condition 'denom_nonzero' in 'div'' in 'libc_call' at call 'div' (file terminates_call_options.c, line 38)
+:
+Prove: true.
+
+------------------------------------------------------------
+
+Goal Instance of 'Pre-condition 'no_overflow' in 'div'' in 'libc_call' at call 'div' (file terminates_call_options.c, line 38)
+:
+Prove: true.
+
+------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_acsl/oracle/terminates_call_options.1.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle/terminates_call_options.1.res.oracle
index 907d765fcb069c60eb99c128520a688baadd064f..ae3902f932266228373c644afce74f2b8cac2cae 100644
--- a/src/plugins/wp/tests/wp_acsl/oracle/terminates_call_options.1.res.oracle
+++ b/src/plugins/wp/tests/wp_acsl/oracle/terminates_call_options.1.res.oracle
@@ -4,10 +4,10 @@
 [kernel:annot:missing-spec] terminates_call_options.c:17: Warning: 
   Neither code nor explicit exits and terminates for function declaration,
    generating default clauses. See -generated-spec-* options for more info
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:511: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:543: Warning: 
   Neither code nor explicit terminates for function exit,
    generating default clauses. See -generated-spec-* options for more info
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:642: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:715: Warning: 
   Neither code nor explicit exits and terminates for function div,
    generating default clauses. See -generated-spec-* options for more info
 [wp] Warning: Missing RTE guards
@@ -62,6 +62,18 @@ Prove: true.
 Goal Exit-condition (generated) in 'libc_call':
 Prove: false.
 
+------------------------------------------------------------
+
+Goal Instance of 'Pre-condition 'denom_nonzero' in 'div'' in 'libc_call' at call 'div' (file terminates_call_options.c, line 38)
+:
+Prove: true.
+
+------------------------------------------------------------
+
+Goal Instance of 'Pre-condition 'no_overflow' in 'div'' in 'libc_call' at call 'div' (file terminates_call_options.c, line 38)
+:
+Prove: true.
+
 ------------------------------------------------------------
 ------------------------------------------------------------
   Function no_spec_generates_goal
diff --git a/src/plugins/wp/tests/wp_acsl/oracle_qualif/bitwise.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle_qualif/bitwise.res.oracle
index 563e4432c97a10042a937f05f8bac7f1932c23a6..77448bb7db297ae88e01c2749b766416d4809409 100644
--- a/src/plugins/wp/tests/wp_acsl/oracle_qualif/bitwise.res.oracle
+++ b/src/plugins/wp/tests/wp_acsl/oracle_qualif/bitwise.res.oracle
@@ -1,9 +1,11 @@
 # frama-c -wp [...]
 [kernel] Parsing bitwise.i (no preprocessing)
 [wp] Running WP plugin...
+[wp] [Valid] Goal baddnot_exits (Cfg) (Unreachable)
+[wp] [Valid] Goal baddnot_terminates (Cfg) (Trivial)
+[wp] Warning: Missing RTE guards
 [wp] [Valid] Goal band_exits (Cfg) (Unreachable)
 [wp] [Valid] Goal band_terminates (Cfg) (Trivial)
-[wp] Warning: Missing RTE guards
 [wp] [Valid] Goal band_bool_exits (Cfg) (Unreachable)
 [wp] [Valid] Goal band_bool_terminates (Cfg) (Trivial)
 [wp] [Valid] Goal bnot_exits (Cfg) (Unreachable)
@@ -24,7 +26,7 @@
 [wp] [Valid] Goal lshift_terminates (Cfg) (Trivial)
 [wp] [Valid] Goal rshift_exits (Cfg) (Unreachable)
 [wp] [Valid] Goal rshift_terminates (Cfg) (Trivial)
-[wp] 56 goals scheduled
+[wp] 57 goals scheduled
 [wp] [Valid] typed_band_ensures (Qed)
 [wp] [Valid] typed_band_ensures_band0 (Qed)
 [wp] [Valid] typed_band_bit0_ensures_band1 (Qed)
@@ -43,6 +45,7 @@
 [wp] [Valid] typed_bxor_bit2_ensures (Qed)
 [wp] [Valid] typed_bxor_bit3_ensures (Qed)
 [wp] [Valid] typed_bnot_ensures (Qed)
+[wp] [Valid] typed_baddnot_ensures (Alt-Ergo) (Cached)
 [wp] [Valid] typed_lshift_ensures (Qed)
 [wp] [Valid] typed_lshift_shift1_ensures_lsl1 (Qed)
 [wp] [Valid] typed_lshift_shift1_ensures_lsl2 (Qed)
@@ -81,17 +84,18 @@
 [wp] [Valid] typed_cast_uchar_check_bit_lsl_higher_unset_ok (Qed)
 [wp] [Valid] typed_cast_uchar_check_bit_lsr_set_ok (Qed)
 [wp] [Valid] typed_cast_uchar_check_bit_lsr_unset_ok (Qed)
-[wp] Proved goals:   78 / 78
-  Terminating:    11
-  Unreachable:    11
+[wp] Proved goals:   81 / 81
+  Terminating:    12
+  Unreachable:    12
   Qed:            53
-  Alt-Ergo:        3
+  Alt-Ergo:        4
 ------------------------------------------------------------
  Functions                 WP     Alt-Ergo  Total   Success
   band                      8        -        8       100%
   bor                       5        -        5       100%
   bxor                      4        -        4       100%
   bnot                      1        -        1       100%
+  baddnot                   -        1        1       100%
   lshift                    4        -        4       100%
   rshift                    2        -        2       100%
   bor_bool                  1        1        2       100%
diff --git a/src/plugins/wp/tests/wp_acsl/oracle_qualif/terminates_call_options.0.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle_qualif/terminates_call_options.0.res.oracle
index be2f82c65143796f81fa17eb5d906dd11203ebdd..d243e2769233918caa9bdeeddb22f7a827c96e6e 100644
--- a/src/plugins/wp/tests/wp_acsl/oracle_qualif/terminates_call_options.0.res.oracle
+++ b/src/plugins/wp/tests/wp_acsl/oracle_qualif/terminates_call_options.0.res.oracle
@@ -1,10 +1,10 @@
 # frama-c -wp [...]
 [kernel] Parsing terminates_call_options.c (with preprocessing)
 [wp] Running WP plugin...
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:511: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:543: Warning: 
   Neither code nor explicit terminates for function exit,
    generating default clauses. See -generated-spec-* options for more info
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:642: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:715: Warning: 
   Neither code nor explicit exits and terminates for function div,
    generating default clauses. See -generated-spec-* options for more info
 [wp] Warning: Missing RTE guards
@@ -12,18 +12,20 @@
   Missing terminates clause on call to declaration, defaults to \false
 [wp] terminates_call_options.c:29: Warning: 
   Missing terminates clause on call to definition, defaults to \false
-[wp] 4 goals scheduled
+[wp] 6 goals scheduled
 [wp] [Valid] typed_definition_assigns (Qed)
 [wp] [Unsuccess] typed_call_declaration_terminates (Alt-Ergo) (Cached)
 [wp] [Unsuccess] typed_call_definition_terminates (Alt-Ergo) (Cached)
 [wp] [Valid] typed_libc_call_terminates (Qed)
-[wp] Proved goals:    2 / 4
-  Qed:             2
+[wp] [Valid] typed_libc_call_call_div_requires_denom_nonzero (Qed)
+[wp] [Valid] typed_libc_call_call_div_requires_no_overflow (Qed)
+[wp] Proved goals:    4 / 6
+  Qed:             4
   Unsuccess:       2
 ------------------------------------------------------------
  Functions                 WP     Alt-Ergo  Total   Success
   definition                1        -        1       100%
   call_declaration          -        -        1       0.0%
   call_definition           -        -        1       0.0%
-  libc_call                 1        -        1       100%
+  libc_call                 3        -        3       100%
 ------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_acsl/oracle_qualif/terminates_call_options.1.res.oracle b/src/plugins/wp/tests/wp_acsl/oracle_qualif/terminates_call_options.1.res.oracle
index c0b8e8f68afae083a33b1559023f7ae97d111f5c..386bd2017c828c017bdcd2008aa7f4108dd86ceb 100644
--- a/src/plugins/wp/tests/wp_acsl/oracle_qualif/terminates_call_options.1.res.oracle
+++ b/src/plugins/wp/tests/wp_acsl/oracle_qualif/terminates_call_options.1.res.oracle
@@ -4,10 +4,10 @@
 [kernel:annot:missing-spec] terminates_call_options.c:17: Warning: 
   Neither code nor explicit exits and terminates for function declaration,
    generating default clauses. See -generated-spec-* options for more info
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:511: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:543: Warning: 
   Neither code nor explicit terminates for function exit,
    generating default clauses. See -generated-spec-* options for more info
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:642: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:715: Warning: 
   Neither code nor explicit exits and terminates for function div,
    generating default clauses. See -generated-spec-* options for more info
 [wp] Warning: Missing RTE guards
@@ -16,7 +16,7 @@
 [wp] [Valid] Goal no_spec_generates_goal_exits (Cfg) (Unreachable)
 [wp] terminates_call_options.c:33: Warning: 
   Missing assigns clause (assigns 'everything' instead)
-[wp] 8 goals scheduled
+[wp] 10 goals scheduled
 [wp] [Valid] typed_definition_assigns (Qed)
 [wp] [Valid] typed_call_declaration_terminates (Qed)
 [wp] [Valid] typed_call_declaration_exits (Qed)
@@ -25,10 +25,12 @@
 [wp] [Unsuccess] typed_no_spec_generates_goal_terminates (Alt-Ergo) (Cached)
 [wp] [Valid] typed_libc_call_terminates (Qed)
 [wp] [Unsuccess] typed_libc_call_exits (Alt-Ergo) (Cached)
-[wp] Proved goals:    9 / 11
+[wp] [Valid] typed_libc_call_call_div_requires_denom_nonzero (Qed)
+[wp] [Valid] typed_libc_call_call_div_requires_no_overflow (Qed)
+[wp] Proved goals:   11 / 13
   Terminating:     1
   Unreachable:     2
-  Qed:             6
+  Qed:             8
   Unsuccess:       2
 ------------------------------------------------------------
  Functions                 WP     Alt-Ergo  Total   Success
@@ -36,5 +38,5 @@
   call_declaration          2        -        2       100%
   call_definition           2        -        2       100%
   no_spec_generates_goal    -        -        1       0.0%
-  libc_call                 1        -        2      50.0%
+  libc_call                 3        -        4      75.0%
 ------------------------------------------------------------
diff --git a/src/plugins/wp/tests/wp_bts/oracle/issue-684-exit.res.oracle b/src/plugins/wp/tests/wp_bts/oracle/issue-684-exit.res.oracle
index 3ffda2bbd573ca3eacf2c0cac5653c23459e01b5..c69d39414c1922c5e4d3bcdb9c8ff9d1f05e98e5 100644
--- a/src/plugins/wp/tests/wp_bts/oracle/issue-684-exit.res.oracle
+++ b/src/plugins/wp/tests/wp_bts/oracle/issue-684-exit.res.oracle
@@ -1,7 +1,7 @@
 # frama-c -wp [...]
 [kernel] Parsing issue-684-exit.c (with preprocessing)
 [wp] Running WP plugin...
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:511: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:543: Warning: 
   Neither code nor explicit terminates for function exit,
    generating default clauses. See -generated-spec-* options for more info
 [wp] Warning: Missing RTE guards
diff --git a/src/plugins/wp/tests/wp_bts/oracle_qualif/issue-684-exit.res.oracle b/src/plugins/wp/tests/wp_bts/oracle_qualif/issue-684-exit.res.oracle
index 298c37684c6d07ccbcef188616124cb1b7e72528..f78ed5d813b1ab1745fbb6f7e8a2eccd974536a0 100644
--- a/src/plugins/wp/tests/wp_bts/oracle_qualif/issue-684-exit.res.oracle
+++ b/src/plugins/wp/tests/wp_bts/oracle_qualif/issue-684-exit.res.oracle
@@ -1,7 +1,7 @@
 # frama-c -wp [...]
 [kernel] Parsing issue-684-exit.c (with preprocessing)
 [wp] Running WP plugin...
-[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:511: Warning: 
+[kernel:annot:missing-spec] FRAMAC_SHARE/libc/stdlib.h:543: Warning: 
   Neither code nor explicit terminates for function exit,
    generating default clauses. See -generated-spec-* options for more info
 [wp] Warning: Missing RTE guards
diff --git a/src/plugins/wp/tests/wp_plugin/oracle/string_c.res.oracle b/src/plugins/wp/tests/wp_plugin/oracle/string_c.res.oracle
index 5eb6eecbfbe6c40a6167a94a08c4399f2bc80b66..c445f32f58a06110307a70680b95d96d15723a13 100644
--- a/src/plugins/wp/tests/wp_plugin/oracle/string_c.res.oracle
+++ b/src/plugins/wp/tests/wp_plugin/oracle/string_c.res.oracle
@@ -161,7 +161,7 @@ Prove: included(a_2, 1, a, n).
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 99) in 'memcpy':
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 116) in 'memcpy':
 Effect at line 38
 Prove: true.
 
@@ -793,47 +793,47 @@ Prove: included(a_2, 1, a, n).
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 122) in 'memmove':
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 139) in 'memmove':
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 122) in 'memmove' (1/7):
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 139) in 'memmove' (1/7):
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 122) in 'memmove' (2/7):
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 139) in 'memmove' (2/7):
 Effect at line 90
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 122) in 'memmove' (3/7):
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 139) in 'memmove' (3/7):
 Call Result at line 93
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 122) in 'memmove' (4/7):
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 139) in 'memmove' (4/7):
 Effect at line 101
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 122) in 'memmove' (5/7):
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 139) in 'memmove' (5/7):
 Effect at line 113
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 122) in 'memmove' (6/7):
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 139) in 'memmove' (6/7):
 Effect at line 115
 Prove: true.
 
 ------------------------------------------------------------
 
-Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 122) in 'memmove' (7/7):
+Goal Assigns (file FRAMAC_SHARE/libc/string.h, line 139) in 'memmove' (7/7):
 Effect at line 117
 Prove: true.
 
diff --git a/src/plugins/wp/tests/wp_region/annot.i b/src/plugins/wp/tests/wp_region/annot.i
index e141f13431ac5907cd8a06d8b5d17392d761195d..2312dafd8a402817ff5cc572dee05384826bd01c 100644
--- a/src/plugins/wp/tests/wp_region/annot.i
+++ b/src/plugins/wp/tests/wp_region/annot.i
@@ -31,7 +31,7 @@ typedef struct Block {
   SN sum ;
 } FB ;
 
-//@ \wp::region *fb ;
+//@ \wp::wpregion *fb ;
 void fb_ADD(FB *fb)
 {
   fb->out1->v = fb->out1->v + fb->out2->v ;
@@ -39,9 +39,9 @@ void fb_ADD(FB *fb)
 }
 
 /*@
-  \wp::region IN:   (fb->inp1 .. fb->inp3), \pattern{PMEM} ;
-  \wp::region OUT:  (fb->out1 .. fb->out3), \pattern{PVECTOR} ;
-  \wp::region IDX:  (fb->idx1 .. fb->idx3), \pattern{PVECTOR} ;
+  \wp::wpregion IN:   (fb->inp1 .. fb->inp3), \pattern{PMEM} ;
+  \wp::wpregion OUT:  (fb->out1 .. fb->out3), \pattern{PVECTOR} ;
+  \wp::wpregion IDX:  (fb->idx1 .. fb->idx3), \pattern{PVECTOR} ;
  */
 void fb_SORT(FB *fb)
 {
diff --git a/src/plugins/wp/tests/wp_region/annot/a.i b/src/plugins/wp/tests/wp_region/annot/a.i
index e684198b0e99768b84e7c3cf7aa9135e77220c27..fb6d84c2cb8cf463ae9e13dd1b6a159325899843 100644
--- a/src/plugins/wp/tests/wp_region/annot/a.i
+++ b/src/plugins/wp/tests/wp_region/annot/a.i
@@ -24,7 +24,7 @@ struct Block {
 };
 typedef struct Block FB;
 /*@ terminates \true;
-    \wp::region *fb; */
+    \wp::wpregion *fb; */
 void fb_ADD(FB *fb)
 {
   (fb->out1)->v += (fb->out2)->v;
@@ -33,9 +33,9 @@ void fb_ADD(FB *fb)
 }
 
 /*@ terminates \true;
-    \wp::region IN: \pattern{PMEM}, (fb->inp1..fb->inp3);
-    \wp::region OUT: \pattern{PVECTOR}, (fb->out1..fb->out3);
-    \wp::region IDX: \pattern{PVECTOR}, (fb->idx1..fb->idx3);
+    \wp::wpregion IN: \pattern{PMEM}, (fb->inp1..fb->inp3);
+    \wp::wpregion OUT: \pattern{PVECTOR}, (fb->out1..fb->out3);
+    \wp::wpregion IDX: \pattern{PVECTOR}, (fb->idx1..fb->idx3);
  */
 void fb_SORT(FB *fb)
 {
@@ -56,5 +56,3 @@ void fb_SORT(FB *fb)
   (fb->sum)->s = 0;
   return;
 }
-
-
diff --git a/src/plugins/wp/tests/wp_region/annot/b.i b/src/plugins/wp/tests/wp_region/annot/b.i
index e684198b0e99768b84e7c3cf7aa9135e77220c27..fb6d84c2cb8cf463ae9e13dd1b6a159325899843 100644
--- a/src/plugins/wp/tests/wp_region/annot/b.i
+++ b/src/plugins/wp/tests/wp_region/annot/b.i
@@ -24,7 +24,7 @@ struct Block {
 };
 typedef struct Block FB;
 /*@ terminates \true;
-    \wp::region *fb; */
+    \wp::wpregion *fb; */
 void fb_ADD(FB *fb)
 {
   (fb->out1)->v += (fb->out2)->v;
@@ -33,9 +33,9 @@ void fb_ADD(FB *fb)
 }
 
 /*@ terminates \true;
-    \wp::region IN: \pattern{PMEM}, (fb->inp1..fb->inp3);
-    \wp::region OUT: \pattern{PVECTOR}, (fb->out1..fb->out3);
-    \wp::region IDX: \pattern{PVECTOR}, (fb->idx1..fb->idx3);
+    \wp::wpregion IN: \pattern{PMEM}, (fb->inp1..fb->inp3);
+    \wp::wpregion OUT: \pattern{PVECTOR}, (fb->out1..fb->out3);
+    \wp::wpregion IDX: \pattern{PVECTOR}, (fb->idx1..fb->idx3);
  */
 void fb_SORT(FB *fb)
 {
@@ -56,5 +56,3 @@ void fb_SORT(FB *fb)
   (fb->sum)->s = 0;
   return;
 }
-
-
diff --git a/src/plugins/wp/tests/wp_region/array1.i b/src/plugins/wp/tests/wp_region/array1.i
index e7b235b05c2dae8fb2c2fc358b0b5a3b69461907..bf3da7a503c8df46be495fd87a2d73c2c600b6c6 100644
--- a/src/plugins/wp/tests/wp_region/array1.i
+++ b/src/plugins/wp/tests/wp_region/array1.i
@@ -1,4 +1,4 @@
-//@ \wp::region *p, *q ;
+//@ \wp::wpregion *p, *q ;
 int job( int n, int * p , int * q )
 {
   int s = 0 ;
diff --git a/src/plugins/wp/tests/wp_region/array2.i b/src/plugins/wp/tests/wp_region/array2.i
index 1bc2f1baac572e05e322c75b69d676f993d21501..be59f8c030d72f6deb45f68ddcb7e2102e840a61 100644
--- a/src/plugins/wp/tests/wp_region/array2.i
+++ b/src/plugins/wp/tests/wp_region/array2.i
@@ -1,4 +1,4 @@
-//@ \wp::region *p; \wp::region *q ;
+//@ \wp::wpregion *p; \wp::wpregion *q ;
 int job( int n, int * p , int * q )
 {
   int s = 0 ;
diff --git a/src/plugins/wp/tests/wp_region/fb_ADD.i b/src/plugins/wp/tests/wp_region/fb_ADD.i
index 2c939c92e0be417532ac6033f0fa9de7dc04779f..dc378f6d5e6eab79016343050256ad68545f2b7e 100644
--- a/src/plugins/wp/tests/wp_region/fb_ADD.i
+++ b/src/plugins/wp/tests/wp_region/fb_ADD.i
@@ -16,7 +16,7 @@ typedef struct Block {
 } FB ;
 
 /*@
-  \wp::region A: fb ;
+  \wp::wpregion A: fb ;
 */
 void job(FB *fb)
 {
diff --git a/src/plugins/wp/tests/wp_region/fb_SORT.i b/src/plugins/wp/tests/wp_region/fb_SORT.i
index f5a79d97a696e5ab2ffd3fa2afcb28cd44a2fa1c..72629334e8a760da79b4436a7880cd15e41da5aa 100644
--- a/src/plugins/wp/tests/wp_region/fb_SORT.i
+++ b/src/plugins/wp/tests/wp_region/fb_SORT.i
@@ -16,10 +16,10 @@ typedef struct Block {
 } FB ;
 
 /*@
-  \wp::region Shared: *(fb->inp1 .. fb->inp3);
-  \wp::region IN:      (fb->inp1 .. fb->inp3);
-  \wp::region OUT:     (fb->out1 .. fb->out3);
-  \wp::region IDX:     (fb->idx1 .. fb->idx3);
+  \wp::wpregion Shared: *(fb->inp1 .. fb->inp3);
+  \wp::wpregion IN:      (fb->inp1 .. fb->inp3);
+  \wp::wpregion OUT:     (fb->out1 .. fb->out3);
+  \wp::wpregion IDX:     (fb->idx1 .. fb->idx3);
  */
 void job(FB *fb)
 {
diff --git a/src/plugins/wp/tests/wp_region/oracle/annot.res.oracle b/src/plugins/wp/tests/wp_region/oracle/annot.res.oracle
index 07f96795974121ec4b16386336d86296438694fc..11a2a15408554226d844aa54f49e22a8df444ae6 100644
--- a/src/plugins/wp/tests/wp_region/oracle/annot.res.oracle
+++ b/src/plugins/wp/tests/wp_region/oracle/annot.res.oracle
@@ -24,7 +24,7 @@ struct Block {
    SN sum ;
 };
 typedef struct Block FB;
-/*@ \wp::region *fb; */
+/*@ \wp::wpregion *fb; */
 void fb_ADD(FB *fb)
 {
   (fb->out1)->v += (fb->out2)->v;
@@ -32,9 +32,9 @@ void fb_ADD(FB *fb)
   return;
 }
 
-/*@ \wp::region IN: \pattern{PMEM}, (fb->inp1..fb->inp3);
-    \wp::region OUT: \pattern{PVECTOR}, (fb->out1..fb->out3);
-    \wp::region IDX: \pattern{PVECTOR}, (fb->idx1..fb->idx3);
+/*@ \wp::wpregion IN: \pattern{PMEM}, (fb->inp1..fb->inp3);
+    \wp::wpregion OUT: \pattern{PVECTOR}, (fb->out1..fb->out3);
+    \wp::wpregion IDX: \pattern{PVECTOR}, (fb->idx1..fb->idx3);
  */
 void fb_SORT(FB *fb)
 {
diff --git a/src/plugins/wp/tests/wp_region/structarray1.i b/src/plugins/wp/tests/wp_region/structarray1.i
index 474cab2dd54d19aa8f53bb0618ac98aaec6ec373..e8fb0e753eb65c3fb5fd35c27ba3bd74b16cf5e9 100644
--- a/src/plugins/wp/tests/wp_region/structarray1.i
+++ b/src/plugins/wp/tests/wp_region/structarray1.i
@@ -6,7 +6,7 @@ typedef struct Matrix {
   int coef[4][4];
 } * matrix ;
 
-//@ \wp::region *X , *R ;
+//@ \wp::wpregion *X , *R ;
 void job( matrix M , vector X , vector R )
 {
   for (int i = 0; i < 4; i++) {
diff --git a/src/plugins/wp/wp.ml b/src/plugins/wp/wp.ml
index 4b5e2dffbd611dc4f6e0afe23ffb03d873d662b2..1c5a2d30adcc83efcba2be5271dc21ffaf8119a1 100644
--- a/src/plugins/wp/wp.ml
+++ b/src/plugins/wp/wp.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpApi.ml b/src/plugins/wp/wpApi.ml
index 688d4817b2b95d19a05f666dc3ea63203674564b..0fa7194ddba374087a2c72de1ce9f022ddb084b2 100644
--- a/src/plugins/wp/wpApi.ml
+++ b/src/plugins/wp/wpApi.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpApi.mli b/src/plugins/wp/wpApi.mli
index 89db11c333a78558ff655cd9aeaf86a355665dfb..c9b285f9349a70a7c7d50018ced3ddac6f21e841 100644
--- a/src/plugins/wp/wpApi.mli
+++ b/src/plugins/wp/wpApi.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpContext.ml b/src/plugins/wp/wpContext.ml
index b940a579c95cdcc6921da6a0edbfc270b591129c..1b8616156597064260700ac972ac1347429d5e2b 100644
--- a/src/plugins/wp/wpContext.ml
+++ b/src/plugins/wp/wpContext.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpContext.mli b/src/plugins/wp/wpContext.mli
index bba749f0a9e4932e38ee560228bf7b09a1b70cf0..3910cd253f2cfb1279f97f6358c2f39a96273e56 100644
--- a/src/plugins/wp/wpContext.mli
+++ b/src/plugins/wp/wpContext.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpPropId.ml b/src/plugins/wp/wpPropId.ml
index 2cce251f7c31daa2ede5dfb2e76136e53e23dd7c..e9a8931cb1a8a0383c4b994156c16b8b2e40a8e3 100644
--- a/src/plugins/wp/wpPropId.ml
+++ b/src/plugins/wp/wpPropId.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpPropId.mli b/src/plugins/wp/wpPropId.mli
index 7ca75a6fe856e646b518d261fd5ee998c61f7b11..8b6bfa01294bf634107d0a4049e2622aff8077d4 100644
--- a/src/plugins/wp/wpPropId.mli
+++ b/src/plugins/wp/wpPropId.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpRTE.ml b/src/plugins/wp/wpRTE.ml
index 00c0141e86d521fe0a13036ded5b97449e56da9c..cce5941c7b10939acfb5ab9ce3541b25057a185b 100644
--- a/src/plugins/wp/wpRTE.ml
+++ b/src/plugins/wp/wpRTE.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpRTE.mli b/src/plugins/wp/wpRTE.mli
index 0b5f1723111f0054ec29d1598e3ee6eab79d6a60..7e1ed51e35809c7e049bac2d2b89056d76ce4c7a 100644
--- a/src/plugins/wp/wpRTE.mli
+++ b/src/plugins/wp/wpRTE.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpReached.ml b/src/plugins/wp/wpReached.ml
index 71c4ebf29a7244bcf9c90b43f53e1c9c5f6e85aa..ac962eda030ce5310ef4f0deb0fe8a4457cfaebc 100644
--- a/src/plugins/wp/wpReached.ml
+++ b/src/plugins/wp/wpReached.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpReached.mli b/src/plugins/wp/wpReached.mli
index f0c5c27321d541c5d01b666c3b4c8330fd42034b..93a4ebccbd8422a31648a84cdf17512aba43e594 100644
--- a/src/plugins/wp/wpReached.mli
+++ b/src/plugins/wp/wpReached.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpReport.ml b/src/plugins/wp/wpReport.ml
index 893a7df45fbc9bdf77c46c67e55a790851614a71..b1969baeeec1257f138bf985fe3a4245bb7b8f5c 100644
--- a/src/plugins/wp/wpReport.ml
+++ b/src/plugins/wp/wpReport.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpReport.mli b/src/plugins/wp/wpReport.mli
index 1f110fd5a0d203a5e63753c0b0a6f5a8482843e8..9fddc9ca0cb2cdcac101daa5ecf157501b7dadf4 100644
--- a/src/plugins/wp/wpReport.mli
+++ b/src/plugins/wp/wpReport.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpTacApi.ml b/src/plugins/wp/wpTacApi.ml
index fc8fed00054113b2e975393eccc114fd4a23f081..8320ce332c4afbdc6016b5d3c942bcf29139dbd2 100644
--- a/src/plugins/wp/wpTacApi.ml
+++ b/src/plugins/wp/wpTacApi.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpTacApi.mli b/src/plugins/wp/wpTacApi.mli
index 945b7bd89b1a3823ad5e2b91e732c4cc96a6644e..33c1be3bf6596e202c75527fb84a77c5dcc3151c 100644
--- a/src/plugins/wp/wpTacApi.mli
+++ b/src/plugins/wp/wpTacApi.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpTarget.ml b/src/plugins/wp/wpTarget.ml
index 19c3fc2c81bdfeced8458317a8b474a3adffbe5e..fabbab1f25b33b2c7f55e31366d9eaaea14e946b 100644
--- a/src/plugins/wp/wpTarget.ml
+++ b/src/plugins/wp/wpTarget.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpTarget.mli b/src/plugins/wp/wpTarget.mli
index f5615abb86f09ac208a860cdfd6d8a45d9f6ca87..1f5eb80e5f0246b24d6dbbc4362f94cbd6037a17 100644
--- a/src/plugins/wp/wpTarget.mli
+++ b/src/plugins/wp/wpTarget.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpTipApi.ml b/src/plugins/wp/wpTipApi.ml
index d8a6c7fe1c0657732a8b852b79567316264d1b78..83944a715b0061ef399df2c838aecb875d62b6e6 100644
--- a/src/plugins/wp/wpTipApi.ml
+++ b/src/plugins/wp/wpTipApi.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpTipApi.mli b/src/plugins/wp/wpTipApi.mli
index 89461a68543d9ccbf65c4ff49b2732c151266140..f4ad83e300b935dfe9d858578b5a86a70e1b0e08 100644
--- a/src/plugins/wp/wpTipApi.mli
+++ b/src/plugins/wp/wpTipApi.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wp_error.ml b/src/plugins/wp/wp_error.ml
index 944702e26a0cbdff4fb31aa778d710da0c6c42f3..9f6b998edcee8dce16be6bdf79a8d0e324544709 100644
--- a/src/plugins/wp/wp_error.ml
+++ b/src/plugins/wp/wp_error.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wp_error.mli b/src/plugins/wp/wp_error.mli
index 1882edbd6c1dc97cb2800eb0ca14d838e5690d09..106ced5e6b43d1cc0c8ddede46be7513656de3e7 100644
--- a/src/plugins/wp/wp_error.mli
+++ b/src/plugins/wp/wp_error.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wp_eva.disabled.ml b/src/plugins/wp/wp_eva.disabled.ml
index 33db180a718078fbe31ff94b33d3ca4c8a12ea0c..f7bfd518ed909182a3bf007ce51c647687c02c3e 100644
--- a/src/plugins/wp/wp_eva.disabled.ml
+++ b/src/plugins/wp/wp_eva.disabled.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wp_eva.enabled.ml b/src/plugins/wp/wp_eva.enabled.ml
index 87a02fe131753f4e3ecba63074cb376d70a86fa5..64ed9168ebf0bf00797ee1c87e3254f710b20956 100644
--- a/src/plugins/wp/wp_eva.enabled.ml
+++ b/src/plugins/wp/wp_eva.enabled.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wp_eva.mli b/src/plugins/wp/wp_eva.mli
index baff38ae987149e43924ccb4543e30e6a3e61681..2d25c1f0e48c46055a5665d65eea7b03f8bebabe 100644
--- a/src/plugins/wp/wp_eva.mli
+++ b/src/plugins/wp/wp_eva.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wp_parameters.ml b/src/plugins/wp/wp_parameters.ml
index 45161b47bbefad2107f8ffed4a23a3a66ebfffad..80bccc0d9a475ea48b8c1521bedcf802b8ba5941 100644
--- a/src/plugins/wp/wp_parameters.ml
+++ b/src/plugins/wp/wp_parameters.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wp_parameters.mli b/src/plugins/wp/wp_parameters.mli
index 223b72fedb60eb8ff9cdca3f9ebd978a698e6206..5c5159c59b555de8425115b69d7971a89c18ec07 100644
--- a/src/plugins/wp/wp_parameters.mli
+++ b/src/plugins/wp/wp_parameters.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpo.ml b/src/plugins/wp/wpo.ml
index a213a36292b037cdd639a3723327b8a64bf6e65a..228bb21ad867e1edd7c2c48d738215e7c4235a6b 100644
--- a/src/plugins/wp/wpo.ml
+++ b/src/plugins/wp/wpo.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/src/plugins/wp/wpo.mli b/src/plugins/wp/wpo.mli
index b781e4e72cf9a9c400078ba918f70d81e5a0b9b1..b6c3d8c25ca3d75c4a6e6818cbe78d8891167b28 100644
--- a/src/plugins/wp/wpo.mli
+++ b/src/plugins/wp/wpo.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of WP plug-in of Frama-C.                           *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat a l'energie atomique et aux energies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/tests/builtins/malloc_bug_tr.c b/tests/builtins/malloc_bug_tr.c
index 98b3d323d6dc902fd725994595d35f248190f46b..d16ef8742cf96d9bf3d8e6831509011afc69aaff 100644
--- a/tests/builtins/malloc_bug_tr.c
+++ b/tests/builtins/malloc_bug_tr.c
@@ -4,7 +4,7 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 
 int main(void)
 {
diff --git a/tests/builtins/memset.c b/tests/builtins/memset.c
index f239d66f3e21ae580447d945b094c751ce191ac2..9c537d24550636043bb34e9e7001e9820bcf01ea 100644
--- a/tests/builtins/memset.c
+++ b/tests/builtins/memset.c
@@ -1,5 +1,5 @@
 /* run.config*
-   STDOPT: #"-calldeps -eva-msg-key imprecision -eva-plevel 500" +"-inout -no-deps"
+   STDOPT: #"-calldeps -eva-msg-key imprecision -eva-plevel 500 -absolute-valid-range 0x10-0xf0" +"-inout -no-deps"
 */
 
 #include "string.h"
@@ -26,7 +26,7 @@ struct s {
 };
 
 struct s ts[5];
-
+extern struct incomplete *incomplete_type;
 volatile int vol;
 
 void test() {
@@ -44,7 +44,7 @@ void test() {
   memset(p, 0x22, 16); // multiple dest
 
   p = vol ? (char*) 0 : t8;
-  memset(p, 0x22, 16); // one valid dest; TODO
+  memset(p, 0x22, 16); // one valid dest;
 
   p = t9+20;
   while (1) {
@@ -70,6 +70,11 @@ void test() {
   unsigned k = vol;
   //@ assert Assume: k <= 12;
   memset(t12+k*8, 1, 4); // Imprecise, because of double congruences
+
+  memset(t1, 1, 0); // size is negative or null
+  memset(incomplete_type, 'A', 1); // destination type and size differ
+  char *absolute_valid_range = (char*)0x10;
+  memset(absolute_valid_range, 'B', 2); // destination has an unknown form
 }
 
 /* Should not crash and emit uninitialization alarms.
diff --git a/tests/builtins/oracle/alloc_weak.res.oracle b/tests/builtins/oracle/alloc_weak.res.oracle
index 9c58bc9c1889b90ba1a5adfe21c98784a6c897d8..6be26b1b41e70edb1802c589c4c5b3355fe08492 100644
--- a/tests/builtins/oracle/alloc_weak.res.oracle
+++ b/tests/builtins/oracle/alloc_weak.res.oracle
@@ -21,7 +21,7 @@
   function memcpy: precondition 'valid_src' got status valid.
 [eva] alloc_weak.c:14: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Recording results for copy
 [eva] Done for function copy
diff --git a/tests/builtins/oracle/fam.res.oracle b/tests/builtins/oracle/fam.res.oracle
index 844fc35e98c896e9b18baa5ebfd38aec3d207566..a729605f74daa3292d2046ca7804ee924529356e 100644
--- a/tests/builtins/oracle/fam.res.oracle
+++ b/tests/builtins/oracle/fam.res.oracle
@@ -9,7 +9,7 @@
 [eva] fam.c:16: function memcpy: precondition 'valid_dest' got status valid.
 [eva] fam.c:16: function memcpy: precondition 'valid_src' got status valid.
 [eva] fam.c:16: function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Recording results for main
 [eva] Done for function main
diff --git a/tests/builtins/oracle/free.res.oracle b/tests/builtins/oracle/free.res.oracle
index 36697aa13a32d1dfdd32eec38ddf20b09ecdb3aa..402a7224a2cca94a7b1da281ab5d0982e65fd689 100644
--- a/tests/builtins/oracle/free.res.oracle
+++ b/tests/builtins/oracle/free.res.oracle
@@ -26,6 +26,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   v ∈ [--..--]
   p ∈ {{ &__malloc_main1_l8[0] }}
   q ∈ {{ &__malloc_main1_l10[0] }}
diff --git a/tests/builtins/oracle/imprecise.res.oracle b/tests/builtins/oracle/imprecise.res.oracle
index 9c3b0de6adf1e40daacaf0ac128c6b426c165ecf..e9a2b40bda7a15f15e13d336e0fafcc3fa849d96 100644
--- a/tests/builtins/oracle/imprecise.res.oracle
+++ b/tests/builtins/oracle/imprecise.res.oracle
@@ -99,7 +99,7 @@
 [eva] imprecise.c:51: Call to builtin memset
 [eva:alarm] imprecise.c:51: Warning: 
   function memset: precondition 'valid_s' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva:alarm] imprecise.c:53: Warning: out of bounds write. assert \valid(p2);
 [eva:alarm] imprecise.c:53: Warning: 
diff --git a/tests/builtins/oracle/linked_list.0.res.oracle b/tests/builtins/oracle/linked_list.0.res.oracle
index 45987fd11dcf676e5b53cafd650180b2d135d280..46862a2655e4a39732bfc305d8f565ee8716e9df 100644
--- a/tests/builtins/oracle/linked_list.0.res.oracle
+++ b/tests/builtins/oracle/linked_list.0.res.oracle
@@ -44,7 +44,7 @@
   ==END OF DUMP==
 [eva] computing for function malloc <- main.
   Called from linked_list.c:41.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:395: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:427: Warning: 
   function malloc, behavior allocation: postcondition 'allocation' got status unknown.
 [eva] Recording results for malloc
 [eva] Done for function malloc
diff --git a/tests/builtins/oracle/linked_list.1.res.oracle b/tests/builtins/oracle/linked_list.1.res.oracle
index 488273ab10d70800ebcb23b96d034502714116f9..b51e860fb2cc9d319d8dc588d68e517a18573841 100644
--- a/tests/builtins/oracle/linked_list.1.res.oracle
+++ b/tests/builtins/oracle/linked_list.1.res.oracle
@@ -44,7 +44,7 @@
   ==END OF DUMP==
 [eva] computing for function malloc <- main.
   Called from linked_list.c:41.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:395: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:427: Warning: 
   function malloc, behavior allocation: postcondition 'allocation' got status unknown.
 [eva] Recording results for malloc
 [eva] Done for function malloc
diff --git a/tests/builtins/oracle/linked_list.2.res.oracle b/tests/builtins/oracle/linked_list.2.res.oracle
index ae7d0058ec1f75eec94c984ff2ce8a5d06214dc6..cb6c771649a7abe82835280f67ccf0516a2cd706 100644
--- a/tests/builtins/oracle/linked_list.2.res.oracle
+++ b/tests/builtins/oracle/linked_list.2.res.oracle
@@ -44,7 +44,7 @@
   ==END OF DUMP==
 [eva] computing for function malloc <- main.
   Called from linked_list.c:41.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:395: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/stdlib.h:427: Warning: 
   function malloc, behavior allocation: postcondition 'allocation' got status unknown.
 [eva] Recording results for malloc
 [eva] Done for function malloc
diff --git a/tests/builtins/oracle/malloc-size-zero.0.res.oracle b/tests/builtins/oracle/malloc-size-zero.0.res.oracle
index 6fac8f66d523b1a1c715bea58f484fc70f929acb..67dbcf45f09b96416fcb92788044bd5ca8978fa7 100644
--- a/tests/builtins/oracle/malloc-size-zero.0.res.oracle
+++ b/tests/builtins/oracle/malloc-size-zero.0.res.oracle
@@ -61,6 +61,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   foo ∈ [--..--]
   p1 ∈ {{ &__malloc_my_calloc_l10[0] }}
   q1 ∈
diff --git a/tests/builtins/oracle/malloc-size-zero.1.res.oracle b/tests/builtins/oracle/malloc-size-zero.1.res.oracle
index bb9cb15cfb4330ef2102509314f2f684c5e619a9..6cbcd7bba07f97bd5fadb3261a8df8e873665b58 100644
--- a/tests/builtins/oracle/malloc-size-zero.1.res.oracle
+++ b/tests/builtins/oracle/malloc-size-zero.1.res.oracle
@@ -43,6 +43,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   foo ∈ [--..--]
   p1 ∈ {{ &__malloc_main_l16[0] }}
   q1 ∈ {{ &__malloc_w_main_l29[0] }} or UNINITIALIZED
diff --git a/tests/builtins/oracle/malloc_bug_tr.res.oracle b/tests/builtins/oracle/malloc_bug_tr.res.oracle
index c78b9bb05b71a8123d942d78568856f31f1a9eb2..809a48dc1f7c1e10a2e3061f8d7adb7c30c8f302 100644
--- a/tests/builtins/oracle/malloc_bug_tr.res.oracle
+++ b/tests/builtins/oracle/malloc_bug_tr.res.oracle
@@ -19,7 +19,7 @@
   function memcpy: precondition 'valid_src' got status valid.
 [eva] malloc_bug_tr.c:13: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] malloc_bug_tr.c:14: Call to builtin memcpy
 [eva:alarm] malloc_bug_tr.c:14: Warning: 
diff --git a/tests/builtins/oracle/memchr.res.oracle b/tests/builtins/oracle/memchr.res.oracle
index 8fff0338008ea33210bd476ef4e1d436a7d1cd63..0a694b9d8f482db1843a769ae3ee1da8270363c3 100644
--- a/tests/builtins/oracle/memchr.res.oracle
+++ b/tests/builtins/oracle/memchr.res.oracle
@@ -29,7 +29,7 @@
   function memchr: precondition 'danglingness' got status unknown.
 [eva] FRAMAC_SHARE/libc/string.h:78: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
-[eva] FRAMAC_SHARE/libc/string.h:85: 
+[eva] FRAMAC_SHARE/libc/string.h:86: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
 [eva] memchr.c:90: Frama_C_show_each_mymemchr: {3}
 [eva] memchr.c:91: assertion got status valid.
@@ -141,7 +141,7 @@
   Called from memchr.c:201.
 [eva] memchr.c:193: Call to builtin memset
 [eva] memchr.c:193: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Recording results for init_array_nondet
 [eva] Done for function init_array_nondet
diff --git a/tests/builtins/oracle/memcpy.res.oracle b/tests/builtins/oracle/memcpy.res.oracle
index 1559794a477915a5ad20d5b9232252094712ec3f..7d949b4911c4732f7bc7a8206a5ebdb5aaf85692 100644
--- a/tests/builtins/oracle/memcpy.res.oracle
+++ b/tests/builtins/oracle/memcpy.res.oracle
@@ -30,7 +30,7 @@
   function memcpy: precondition 'valid_dest' got status unknown.
 [eva] memcpy.c:28: function memcpy: precondition 'valid_src' got status valid.
 [eva] memcpy.c:28: function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Recording results for buggy
 [from] Computing for function buggy
@@ -121,8 +121,6 @@
   function memcpy: precondition 'valid_dest' got status unknown.
 [eva] memcpy.c:89: function memcpy: precondition 'valid_src' got status valid.
 [eva] memcpy.c:89: function memcpy: precondition 'separation' got status valid.
-[kernel] memcpy.c:89: 
-  writing somewhere in {NULL; v4} because of Arithmetic {memcpy.c:89}.
 [eva:alarm] memcpy.c:90: Warning: 
   pointer downcast. assert (unsigned int)((struct t1 *)t) ≤ 2147483647;
 [eva:alarm] memcpy.c:91: Warning: 
@@ -135,8 +133,6 @@
   function memcpy: precondition 'valid_dest' got status unknown.
 [eva] memcpy.c:91: function memcpy: precondition 'valid_src' got status valid.
 [eva] memcpy.c:91: function memcpy: precondition 'separation' got status valid.
-[kernel] memcpy.c:91: 
-  writing somewhere in {NULL; v5} because of Arithmetic {memcpy.c:91}.
 [eva] memcpy.c:96: Call to builtin memcpy
 [eva:alarm] memcpy.c:96: Warning: 
   function memcpy: precondition 'valid_dest' got status unknown.
@@ -220,7 +216,7 @@
 [eva] memcpy.c:172: function memcpy: precondition 'valid_src' got status valid.
 [eva] memcpy.c:172: function memcpy: precondition 'separation' got status valid.
 [eva:imprecision] memcpy.c:172: 
-  In memcpy builtin: precise copy of indeterminate values UNINITIALIZED
+  In memcpy builtin: precise copy of indeterminate values.
 [eva] memcpy.c:173: assertion got status valid.
 [eva] computing for function itv <- main_uninit <- main_all.
   Called from memcpy.c:174.
@@ -233,7 +229,7 @@
 [eva:imprecision] memcpy.c:174: 
   In memcpy builtin: too many sizes to enumerate, possible loss of precision
 [eva:imprecision] memcpy.c:174: 
-  In memcpy builtin: imprecise copy of indeterminate values
+  In memcpy builtin: imprecise copy of indeterminate values.
 [eva] memcpy.c:175: assertion got status valid.
 [eva] computing for function make_unknown <- main_uninit <- main_all.
   Called from memcpy.c:178.
@@ -255,7 +251,7 @@
 [eva:imprecision] memcpy.c:181: 
   In memcpy builtin: too many sizes to enumerate, possible loss of precision
 [eva:imprecision] memcpy.c:181: 
-  In memcpy builtin: imprecise copy of indeterminate values
+  In memcpy builtin: imprecise copy of indeterminate values.
 [eva:alarm] memcpy.c:182: Warning: 
   accessing uninitialized left-value. assert \initialized(&b[11]);
 [eva] computing for function make_unknown <- main_uninit <- main_all.
@@ -267,7 +263,7 @@
 [eva] memcpy.c:187: function memcpy: precondition 'valid_src' got status valid.
 [eva] memcpy.c:187: function memcpy: precondition 'separation' got status valid.
 [eva:imprecision] memcpy.c:187: 
-  In memcpy builtin: precise copy of indeterminate values UNINITIALIZED
+  In memcpy builtin: precise copy of indeterminate values.
 [eva] memcpy.c:188: assertion got status valid.
 [eva] computing for function itv <- main_uninit <- main_all.
   Called from memcpy.c:190.
@@ -279,7 +275,7 @@
 [eva:imprecision] memcpy.c:190: 
   In memcpy builtin: too many sizes to enumerate, possible loss of precision
 [eva:imprecision] memcpy.c:190: 
-  In memcpy builtin: imprecise copy of indeterminate values
+  In memcpy builtin: imprecise copy of indeterminate values.
 [eva] memcpy.c:191: assertion got status valid.
 [eva:alarm] memcpy.c:192: Warning: 
   accessing uninitialized left-value. assert \initialized(&b[8]);
@@ -306,7 +302,7 @@
 [eva:imprecision] memcpy.c:200: 
   In memcpy builtin: too many sizes to enumerate, possible loss of precision
 [eva:imprecision] memcpy.c:200: 
-  In memcpy builtin: imprecise copy of indeterminate values
+  In memcpy builtin: imprecise copy of indeterminate values.
 [eva:alarm] memcpy.c:201: Warning: 
   accessing uninitialized left-value. assert \initialized(&b[11]);
 [eva] Recording results for main_uninit
@@ -577,10 +573,19 @@
     .y ∈ {7}
     {.p; .padding[0..23]} ∈ {0}
   v3 ∈ {{ garbled mix of &{v1} (origin: Misaligned read {memcpy.c:87}) }}
-  v4.x ∈ [--..--]
+  v4.x[bits 0 to 7]# ∈ {0; 5}%32, bits 0 to 7 
+    .x[bits 8 to 31] ∈ [--..--]
     .y ∈ {{ (int)&t }}
-    {.p; .padding[0..23]} ∈ [--..--]
-  v5 ∈ {{ garbled mix of &{t} (origin: Misaligned read {memcpy.c:91}) }}
+    {.p; .padding[0..14]} ∈ [--..--]
+    .padding[15]# ∈ {0; 7}%32, bits 24 to 31 
+    .padding[16..23] ∈ {0}
+  v5.x[bits 0 to 7]# ∈ {0; 5}%32, bits 0 to 7 
+    .x[bits 8 to 31] ∈ [--..--]
+    .y[bits 0 to 7]# ∈ {{ NULL + [--..--] ; (? *)&t }}%32, bits 0 to 7 
+    {.y[bits 8 to 31]; .p; .padding[0..14]} ∈
+    {{ garbled mix of &{t} (origin: Merge {memcpy.c:91}) }}
+    .padding[15]# ∈ {{ NULL + [--..--] ; (? *)&t }}%32, bits 24 to 31 
+    .padding[16..23] ∈ [--..--]
   t{[0]; [1]{.x; .y}} ∈ {0}
    [1].p ∈ {{ &v1.y }}
    {[1].padding[0..23]; [2]; [3]{.x; .y}} ∈ {0}
@@ -1024,6 +1029,8 @@
 --- Properties of Function 'memchr'
 --------------------------------------------------------------------------------
 
+[ Extern  ] Post-condition for 'found' 'result_valid_read'
+            Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'found' 'result_same_base'
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'found' 'result_char'
@@ -1043,6 +1050,27 @@
 [  Valid  ] Behavior 'not_found'
             by Frama-C kernel.
 
+--------------------------------------------------------------------------------
+--- Properties of Function 'memrchr'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Post-condition for 'found' 'result_valid_read'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'found' 'result_same_base'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'not_found' 'result_null'
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns nothing
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 97)
+            Unverifiable but considered Valid.
+[  Valid  ] Default behavior
+            by Frama-C kernel.
+[  Valid  ] Behavior 'found'
+            by Frama-C kernel.
+[  Valid  ] Behavior 'not_found'
+            by Frama-C kernel.
+
 --------------------------------------------------------------------------------
 --- Properties of Function 'memcpy'
 --------------------------------------------------------------------------------
@@ -1095,11 +1123,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'result_ptr'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 99)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 116)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 99)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 116)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 100)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 117)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1112,11 +1140,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'result_next_byte'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 112)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 129)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 112)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 129)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 113)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 130)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1129,11 +1157,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'result_ptr'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 122)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 139)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 122)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 139)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 123)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 140)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1146,11 +1174,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'result_ptr'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 132)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 149)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 132)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 149)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 133)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 150)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1163,7 +1191,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 142)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 159)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1176,7 +1204,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 148)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 165)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1189,7 +1217,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 155)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 172)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1202,7 +1230,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 162)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 180)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1213,7 +1241,7 @@
 
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 169)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 187)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1222,26 +1250,22 @@
 --- Properties of Function 'strchr'
 --------------------------------------------------------------------------------
 
+[ Extern  ] Post-condition for 'found' 'result_valid_string'
+            Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'found' 'result_char'
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'found' 'result_same_base'
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'found' 'result_in_length'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'found' 'result_valid_string'
-            Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'found' 'result_first_occur'
+[ Extern  ] Post-condition for 'found' 'result_first_occurrence'
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'not_found' 'result_null'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'default' 'result_null_or_same_base'
-            Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 174)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 194)
             Unverifiable but considered Valid.
-[  Valid  ] Behavior 'default'
-            by Frama-C kernel.
 [  Valid  ] Default behavior
             by Frama-C kernel.
 [  Valid  ] Behavior 'found'
@@ -1253,11 +1277,13 @@
 --- Properties of Function 'strchrnul'
 --------------------------------------------------------------------------------
 
+[ Extern  ] Post-condition 'result_valid_string'
+            Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'result_same_base'
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 192)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 213)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1266,28 +1292,14 @@
 --- Properties of Function 'strrchr'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition for 'found' 'result_char'
-            Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'found' 'result_same_base'
-            Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'found' 'result_valid_string'
-            Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'not_found' 'result_null'
-            Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'default' 'result_null_or_same_base'
+[ Extern  ] Post-condition 'result_null_or_same_base'
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 198)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 221)
             Unverifiable but considered Valid.
-[  Valid  ] Behavior 'default'
-            by Frama-C kernel.
 [  Valid  ] Default behavior
             by Frama-C kernel.
-[  Valid  ] Behavior 'found'
-            by Frama-C kernel.
-[  Valid  ] Behavior 'not_found'
-            by Frama-C kernel.
 
 --------------------------------------------------------------------------------
 --- Properties of Function 'strcspn'
@@ -1297,7 +1309,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 215)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 231)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1308,11 +1320,9 @@
 
 [ Extern  ] Post-condition 'result_bounded'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 222)
-            Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 222)
+[ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 223)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 240)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1325,7 +1335,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 230)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 249)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1338,7 +1348,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 238)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 260)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1351,7 +1361,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 249)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 273)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1360,39 +1370,43 @@
 --- Properties of Function 'strtok'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition for 'new_str' 'result_subset'
+[ Extern  ] Post-condition for 'new_str' 'result_same_base'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'new_str' 'ptr_valid_string'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'new_str' 'ptr_same_base'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'new_str' 'ptr_subset'
+[ Extern  ] Post-condition for 'resume_str' 'result_same_base'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'resume_str' 'result_subset'
+[ Extern  ] Post-condition for 'resume_str' 'ptr_valid_string'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'resume_str' 'ptr_subset'
+[ Extern  ] Post-condition for 'resume_str' 'ptr_same_base'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 262)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 289)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 277)
+[ Extern  ] Assigns for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 304)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 285)
+[ Extern  ] Assigns for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 316)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 262)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 289)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 264)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 291)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 266)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 293)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 268)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 295)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 277)
+[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 304)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 278)
+[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 306)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 279)
+[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 307)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 285)
+[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 316)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 288)
+[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 319)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 291)
+[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 322)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1405,41 +1419,43 @@
 --- Properties of Function 'strtok_r'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition for 'new_str' 'result_subset'
+[ Extern  ] Post-condition for 'new_str' 'result_same_base'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'new_str' 'initialization'
+[ Extern  ] Post-condition for 'new_str' 'saveptr_valid_string'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'new_str' 'saveptr_subset'
+[ Extern  ] Post-condition for 'new_str' 'saveptr_same_base'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'resume_str' 'result_subset'
+[ Extern  ] Post-condition for 'resume_str' 'result_same_base'
             Unverifiable but considered Valid.
-[ Extern  ] Post-condition for 'resume_str' 'saveptr_subset'
+[ Extern  ] Post-condition for 'resume_str' 'saveptr_valid_string'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 304)
+[ Extern  ] Post-condition for 'resume_str' 'saveptr_same_base'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 319)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 341)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 329)
+[ Extern  ] Assigns for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 356)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 304)
+[ Extern  ] Assigns for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 369)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 306)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 341)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 308)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 343)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 310)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 345)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 319)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 347)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 356)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 320)
+[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 358)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 321)
+[ Extern  ] Froms for 'new_str' (file FRAMAC_SHARE/libc/string.h, line 359)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 329)
+[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 369)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 332)
+[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 372)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 335)
+[ Extern  ] Froms for 'resume_str' (file FRAMAC_SHARE/libc/string.h, line 375)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1452,14 +1468,22 @@
 --- Properties of Function 'strsep'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 347)
+[ Extern  ] Post-condition for 'no_stringp' 'result_null'
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 347)
+[ Extern  ] Post-condition for 'valid_stringp' 'valid_result'
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 348)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 391)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 391)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 392)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
+[  Valid  ] Behavior 'no_stringp'
+            by Frama-C kernel.
+[  Valid  ] Behavior 'valid_stringp'
+            by Frama-C kernel.
 
 --------------------------------------------------------------------------------
 --- Properties of Function 'strerror'
@@ -1473,7 +1497,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 358)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 410)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1486,11 +1510,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'result_ptr'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 371)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 423)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 371)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 423)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 372)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 424)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1507,11 +1531,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'partial' 'equal_prefix'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 383)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 435)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 383)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 435)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 384)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 436)
             Unverifiable but considered Valid.
 [  Valid  ] Behavior 'complete'
             by Frama-C kernel.
@@ -1528,11 +1552,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'bounded_result'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 404)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 456)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 404)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 456)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 405)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 457)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1545,11 +1569,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'points_to_end'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 416)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 468)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 416)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 468)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 417)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 469)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1566,11 +1590,11 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'result_ptr'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 427)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 481)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 427)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 481)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 430)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 484)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1585,23 +1609,23 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'partial' 'sum_of_bounded_lengths'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'complete' (file FRAMAC_SHARE/libc/string.h, line 447)
+[ Extern  ] Assigns for 'complete' (file FRAMAC_SHARE/libc/string.h, line 508)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 441)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 502)
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'partial' (file FRAMAC_SHARE/libc/string.h, line 455)
+[ Extern  ] Assigns for 'partial' (file FRAMAC_SHARE/libc/string.h, line 515)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'complete' (file FRAMAC_SHARE/libc/string.h, line 447)
+[ Extern  ] Froms for 'complete' (file FRAMAC_SHARE/libc/string.h, line 508)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'complete' (file FRAMAC_SHARE/libc/string.h, line 449)
+[ Extern  ] Froms for 'complete' (file FRAMAC_SHARE/libc/string.h, line 510)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 441)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 502)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 442)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 503)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'partial' (file FRAMAC_SHARE/libc/string.h, line 455)
+[ Extern  ] Froms for 'partial' (file FRAMAC_SHARE/libc/string.h, line 515)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'partial' (file FRAMAC_SHARE/libc/string.h, line 457)
+[ Extern  ] Froms for 'partial' (file FRAMAC_SHARE/libc/string.h, line 517)
             Unverifiable but considered Valid.
 [  Valid  ] Behavior 'complete'
             by Frama-C kernel.
@@ -1616,11 +1640,11 @@
 
 [ Extern  ] Post-condition 'bounded_result'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 467)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 532)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 467)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 532)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 468)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 533)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1629,11 +1653,26 @@
 --- Properties of Function 'strxfrm'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 476)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 542)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 476)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 542)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 477)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 543)
+            Unverifiable but considered Valid.
+[  Valid  ] Default behavior
+            by Frama-C kernel.
+
+--------------------------------------------------------------------------------
+--- Properties of Function 'memmem'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Post-condition 'result_null_or_valid'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition 'result_null_or_same_base'
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns nothing
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 551)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -1648,19 +1687,19 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'no_allocation' 'result_null'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 489)
+[ Extern  ] Assigns for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 570)
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
 [ Extern  ] Assigns for 'no_allocation' nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 489)
+[ Extern  ] Froms for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 570)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 490)
+[ Extern  ] Froms for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 572)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 486)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 567)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'no_allocation' (file FRAMAC_SHARE/libc/string.h, line 496)
+[ Extern  ] Froms for 'no_allocation' (file FRAMAC_SHARE/libc/string.h, line 579)
             Unverifiable but considered Valid.
 [  Valid  ] Behavior 'allocation'
             by Frama-C kernel.
@@ -1668,7 +1707,7 @@
             by Frama-C kernel.
 [  Valid  ] Behavior 'no_allocation'
             by Frama-C kernel.
-[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/string.h, line 485) 
+[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/string.h, line 566) 
             Unverifiable but considered Valid.
 [ Extern  ] Frees/Allocates for 'no_allocation' nothing/nothing 
             Unverifiable but considered Valid.
@@ -1683,19 +1722,19 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition for 'no_allocation' 'result_null'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 508)
+[ Extern  ] Assigns for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 594)
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
 [ Extern  ] Assigns for 'no_allocation' nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 508)
+[ Extern  ] Froms for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 594)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 509)
+[ Extern  ] Froms for 'allocation' (file FRAMAC_SHARE/libc/string.h, line 595)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 504)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 590)
             Unverifiable but considered Valid.
-[ Extern  ] Froms for 'no_allocation' (file FRAMAC_SHARE/libc/string.h, line 518)
+[ Extern  ] Froms for 'no_allocation' (file FRAMAC_SHARE/libc/string.h, line 605)
             Unverifiable but considered Valid.
 [  Valid  ] Behavior 'allocation'
             by Frama-C kernel.
@@ -1703,11 +1742,42 @@
             by Frama-C kernel.
 [  Valid  ] Behavior 'no_allocation'
             by Frama-C kernel.
-[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/string.h, line 503) 
+[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/string.h, line 589) 
             Unverifiable but considered Valid.
 [ Extern  ] Frees/Allocates for 'no_allocation' nothing/nothing 
             Unverifiable but considered Valid.
 
+--------------------------------------------------------------------------------
+--- Properties of Function 'stpncpy'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Post-condition 'initialization'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'src_is_a_string' 'valid_string_dest'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'src_is_a_string' 'same_contents'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'src_is_a_string' 'dest_nul_padded'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'src_is_a_string' 'result_points_to_nul'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'src_too_long' 'same_partial_contents'
+            Unverifiable but considered Valid.
+[ Extern  ] Post-condition for 'src_too_long' 'result_points_to_end'
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/string.h, line 615)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 615)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 616)
+            Unverifiable but considered Valid.
+[  Valid  ] Default behavior
+            by Frama-C kernel.
+[  Valid  ] Behavior 'src_is_a_string'
+            by Frama-C kernel.
+[  Valid  ] Behavior 'src_too_long'
+            by Frama-C kernel.
+
 --------------------------------------------------------------------------------
 --- Properties of Function 'strsignal'
 --------------------------------------------------------------------------------
@@ -1720,7 +1790,7 @@
             Unverifiable but considered Valid.
 [ Extern  ] Assigns nothing
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 534)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/string.h, line 642)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
@@ -2182,10 +2252,10 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-   164 Completely validated
+   169 Completely validated
      1 Locally validated
-   247 Considered valid
+   267 Considered valid
     32 To be validated
      4 Alarms emitted
-   448 Total
+   473 Total
 --------------------------------------------------------------------------------
diff --git a/tests/builtins/oracle/memcpy2.res.oracle b/tests/builtins/oracle/memcpy2.res.oracle
index d72a3ed46ed6d5c6578a06f007b32c315bd6b56f..7a2e4458ddb0a4d4f593fa1d0a5256214685d97b 100644
--- a/tests/builtins/oracle/memcpy2.res.oracle
+++ b/tests/builtins/oracle/memcpy2.res.oracle
@@ -14,13 +14,13 @@
 [eva] memcpy2.c:10: function memcpy: precondition 'valid_dest' got status valid.
 [eva] memcpy2.c:10: function memcpy: precondition 'valid_src' got status valid.
 [eva] memcpy2.c:10: function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] memcpy2.c:12: 
   Frama_C_dump_each:
   # cvalue:
-  Frama_C_entropy_source ∈ [--..--]
   __fc_heap_status ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   __fc_strtok_ptr ∈ {0}
   __fc_strerror[0..63] ∈ [--..--]
   __fc_p_strerror ∈ {{ &__fc_strerror[0] }}
diff --git a/tests/builtins/oracle/memcpy_invalid.res.oracle b/tests/builtins/oracle/memcpy_invalid.res.oracle
index a1bb6e91bf1d45eb090a4ec7c0fb1765af51f91b..3f5a13b66c9273271fbc71b688a62613c4e69fd1 100644
--- a/tests/builtins/oracle/memcpy_invalid.res.oracle
+++ b/tests/builtins/oracle/memcpy_invalid.res.oracle
@@ -17,7 +17,7 @@
   function memcpy: precondition 'valid_src' got status unknown.
 [eva] memcpy_invalid.c:17: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Recording results for test
 [from] Computing for function test
diff --git a/tests/builtins/oracle/memset.res.oracle b/tests/builtins/oracle/memset.res.oracle
index a6115d361b6b54206f7f038fd794ce01df915472..81ad7400cbf0cce906879475122cb6216e196365 100644
--- a/tests/builtins/oracle/memset.res.oracle
+++ b/tests/builtins/oracle/memset.res.oracle
@@ -4,8 +4,15 @@
   'char' and 'int')
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
+[eva:initial-state] 
+  creating variable S_incomplete_type with imprecise size (type struct incomplete [2])
+[eva:unknown-size] memset.c:29: Warning: 
+  during initialization of variable 'incomplete_type', size of
+  type 'struct incomplete' cannot be computed
+  (abstract type 'struct incomplete')
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
+  NULL[rbits 128 to 1927] ∈ [--..--]
   t1[0..99] ∈ {0}
   t2[0..99] ∈ {0}
   t3[0..99] ∈ {0}
@@ -19,12 +26,14 @@
   t11[0..99] ∈ {0}
   t12[0..99] ∈ {0}
   ts[0..4] ∈ {0}
+  incomplete_type ∈ {{ NULL ; (struct incomplete *)&S_incomplete_type }}
   vol ∈ [--..--]
+  S_incomplete_type[bits 0 to ..] ∈ [--..--] or UNINITIALIZED
 [eva] computing for function test <- main.
-  Called from memset.c:88.
+  Called from memset.c:93.
 [eva] memset.c:33: Call to builtin memset
 [eva] memset.c:33: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva:alarm] memset.c:34: Warning: 
   pointer downcast. assert (unsigned int)((int *)t2) ≤ 2147483647;
@@ -33,10 +42,6 @@
 [eva] memset.c:34: Call to builtin memset
 [eva:alarm] memset.c:34: Warning: 
   function memset: precondition 'valid_s' got status unknown.
-[eva:imprecision] memset.c:34: 
-  Call to builtin precise_memset(({{ garbled mix of &{t2}
-                                  (origin: Arithmetic {memset.c:34}) }},
-                                  {18},{400})) failed; destination is not exact
 [eva] memset.c:35: Call to builtin memset
 [eva:alarm] memset.c:35: Warning: 
   function memset: precondition 'valid_s' got status unknown.
@@ -62,8 +67,6 @@
 [eva] memset.c:47: Call to builtin memset
 [eva:alarm] memset.c:47: Warning: 
   function memset: precondition 'valid_s' got status unknown.
-[eva:imprecision] memset.c:47: 
-  Call to builtin precise_memset(({{ NULL ; (void *)&t8 }},{34},{16})) failed; destination is not exact
 [eva] memset.c:50: starting to merge loop iterations
 [eva] memset.c:54: Call to builtin memset
 [eva:alarm] memset.c:54: Warning: 
@@ -85,18 +88,32 @@
 [eva] memset.c:72: function memset: precondition 'valid_s' got status valid.
 [eva:imprecision] memset.c:72: 
   Call to builtin precise_memset(({{ &t12 + [0..384],0%32 }},{1},{4})) failed; destination is not exact
+[eva] memset.c:74: Call to builtin memset
+[eva] memset.c:74: function memset: precondition 'valid_s' got status valid.
+[eva:imprecision] memset.c:74: 
+  Call to builtin precise_memset(({{ (void *)&t1 }},{1},{0})) failed; size is negative or null
+[eva] memset.c:75: Call to builtin memset
+[eva:alarm] memset.c:75: Warning: 
+  function memset: precondition 'valid_s' got status unknown.
+[eva:imprecision] memset.c:75: 
+  Call to builtin precise_memset(({{ NULL ; (void *)&S_incomplete_type }},
+                                  {65},{1})) failed; destination type and size differ
+[eva] memset.c:77: Call to builtin memset
+[eva] memset.c:77: function memset: precondition 'valid_s' got status valid.
+[eva:imprecision] memset.c:77: 
+  Call to builtin precise_memset(({16},{66},{2})) failed; destination has an unknown form
 [eva] Recording results for test
 [from] Computing for function test
 [from] Done for function test
 [eva] Done for function test
 [eva] computing for function uninit <- main.
-  Called from memset.c:89.
-[eva:alarm] memset.c:80: Warning: 
+  Called from memset.c:94.
+[eva:alarm] memset.c:85: Warning: 
   accessing uninitialized left-value. assert \initialized(&x);
-[eva:alarm] memset.c:84: Warning: 
+[eva:alarm] memset.c:89: Warning: 
   accessing uninitialized left-value. assert \initialized(&x);
-[eva] memset.c:84: Call to builtin memset
-[eva] memset.c:84: function memset: precondition 'valid_s' got status valid.
+[eva] memset.c:89: Call to builtin memset
+[eva] memset.c:89: function memset: precondition 'valid_s' got status valid.
 [eva] Recording results for uninit
 [from] Computing for function uninit
 [from] Done for function uninit
@@ -105,11 +122,13 @@
 [from] Computing for function main
 [from] Done for function main
 [eva] Done for function main
-[eva] memset.c:80: assertion 'Eva,initialization' got final status invalid.
+[eva] memset.c:85: assertion 'Eva,initialization' got final status invalid.
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function test:
+  NULL[rbits 128 to 143] ∈ {66} repeated %8 
+      [rbits 144 to 1927] ∈ [--..--]
   t1[0..99] ∈ {286331153}
-  t2[0..99] ∈ [--..--]
+  t2[0..99] ∈ {303174162}
   t3[0..9] ∈ {0}
     [10..99]# ∈ {0; 17} repeated %8 
   t4[0..99] ∈ {0}
@@ -120,7 +139,7 @@
     [14..99] ∈ {0}
   t7[0..3]# ∈ {0; 34} repeated %8 
     [4..99] ∈ {0}
-  t8[0..3]# ∈ {0; 34} repeated %8 
+  t8[0..3] ∈ {572662306}
     [4..99] ∈ {0}
   t9[0..19] ∈ {0}
     [20..99]# ∈ {0; 254} repeated %8 
@@ -160,12 +179,17 @@
   s ∈ {12; 36}
   s1 ∈ {8; 16}
   k ∈ [0..12]
+  absolute_valid_range ∈ {16}
+  S_incomplete_type[bits 0 to 7] ∈ {65}
+                   [bits 8 to ..] ∈ [--..--] or UNINITIALIZED
 [eva:final-states] Values at end of function uninit:
   x ∈ {{ (void *)&a }}
   a ∈ {0}
 [eva:final-states] Values at end of function main:
+  NULL[rbits 128 to 143] ∈ {66} repeated %8 
+      [rbits 144 to 1927] ∈ [--..--]
   t1[0..99] ∈ {286331153}
-  t2[0..99] ∈ [--..--]
+  t2[0..99] ∈ {303174162}
   t3[0..9] ∈ {0}
     [10..99]# ∈ {0; 17} repeated %8 
   t4[0..99] ∈ {0}
@@ -176,7 +200,7 @@
     [14..99] ∈ {0}
   t7[0..3]# ∈ {0; 34} repeated %8 
     [4..99] ∈ {0}
-  t8[0..3]# ∈ {0; 34} repeated %8 
+  t8[0..3] ∈ {572662306}
     [4..99] ∈ {0}
   t9[0..19] ∈ {0}
     [20..99]# ∈ {0; 254} repeated %8 
@@ -211,12 +235,14 @@
     [4].[bits 8 to 15] ∈ {0; 254}
     [4].f2 ∈ {-258; 0}
     [4]{.f3; .f4[0..2]} ∈ {-16843010; 0}
+  S_incomplete_type[bits 0 to 7] ∈ {65}
+                   [bits 8 to ..] ∈ [--..--] or UNINITIALIZED
 [from] ====== DISPLAYING CALLWISE DEPENDENCIES ======
 [from] call to memset at memset.c:33 (by test):
   t1[0..99] FROM c
   \result FROM s
 [from] call to memset at memset.c:34 (by test):
-  t2[0..99] FROM c (and SELF)
+  t2[0..99] FROM c
   \result FROM s
 [from] call to memset at memset.c:35 (by test):
   t3[10..99] FROM c (and SELF)
@@ -232,7 +258,7 @@
   t7[0..3] FROM c (and SELF)
   \result FROM s
 [from] call to memset at memset.c:47 (by test):
-  t8[0..3] FROM c (and SELF)
+  t8[0..3] FROM c
   \result FROM s
 [from] call to memset at memset.c:54 (by test):
   t9[20..99] FROM c (and SELF)
@@ -251,18 +277,27 @@
 [from] call to memset at memset.c:72 (by test):
   t12[0..96] FROM c (and SELF)
   \result FROM s
-[from] call to memset at memset.c:84 (by uninit):
+[from] call to memset at memset.c:74 (by test):
+  \result FROM s
+[from] call to memset at memset.c:75 (by test):
+  S_incomplete_type[bits 0 to 7] FROM c
+  \result FROM s
+[from] call to memset at memset.c:77 (by test):
+  NULL[16..17] FROM c
+  \result FROM s
+[from] call to memset at memset.c:89 (by uninit):
   a FROM c
   \result FROM s
-[from] call to test at memset.c:88 (by main):
+[from] call to test at memset.c:93 (by main):
+  NULL[16..17] FROM \nothing
   t1[0..99] FROM \nothing
-  t2[0..99] FROM \nothing (and SELF)
+  t2[0..99] FROM \nothing
   t3[10..99] FROM \nothing (and SELF)
   t4[1..99] FROM vol (and SELF)
   t5[0..99] FROM \nothing
   t6[10..13] FROM \nothing (and SELF)
   t7[0..3] FROM \nothing (and SELF)
-  t8[0..3] FROM \nothing (and SELF)
+  t8[0..3] FROM \nothing
   t9[20..99] FROM \nothing (and SELF)
   t10[4..6] FROM \nothing
      [7..12] FROM \nothing (and SELF)
@@ -270,17 +305,19 @@
      [3] FROM \nothing
   t12[0..96] FROM \nothing (and SELF)
   ts[0..4] FROM vol (and SELF)
-[from] call to uninit at memset.c:89 (by main):
+  S_incomplete_type[bits 0 to 7] FROM \nothing
+[from] call to uninit at memset.c:94 (by main):
   NO EFFECTS
 [from] entry point:
+  NULL[16..17] FROM \nothing
   t1[0..99] FROM \nothing
-  t2[0..99] FROM \nothing (and SELF)
+  t2[0..99] FROM \nothing
   t3[10..99] FROM \nothing (and SELF)
   t4[1..99] FROM vol (and SELF)
   t5[0..99] FROM \nothing
   t6[10..13] FROM \nothing (and SELF)
   t7[0..3] FROM \nothing (and SELF)
-  t8[0..3] FROM \nothing (and SELF)
+  t8[0..3] FROM \nothing
   t9[20..99] FROM \nothing (and SELF)
   t10[4..6] FROM \nothing
      [7..12] FROM \nothing (and SELF)
@@ -288,20 +325,24 @@
      [3] FROM \nothing
   t12[0..96] FROM \nothing (and SELF)
   ts[0..4] FROM vol (and SELF)
+  S_incomplete_type[bits 0 to 7] FROM \nothing
 [from] ====== END OF CALLWISE DEPENDENCIES ======
 [inout] Out (internal) for function test:
-    t1[0..99]; t2[0..99]; t3[10..99]; t4[1..99]; t5[0..99]; t6[10..13];
-    t7[0..3]; t8[0..3]; t9[20..99]; t10[4..12]; t11[2..6]; t12[0..96];
-    ts[0..4]; dst; p; tmp_0; s; s1; k
+    NULL[16..17]; t1[0..99]; t2[0..99]; t3[10..99]; t4[1..99]; t5[0..99];
+    t6[10..13]; t7[0..3]; t8[0..3]; t9[20..99]; t10[4..12]; t11[2..6];
+    t12[0..96]; ts[0..4]; dst; p; tmp_0; s; s1; k; absolute_valid_range;
+    S_incomplete_type[bits 0 to 7]
 [inout] Inputs for function test:
-    vol
+    incomplete_type; vol
 [inout] InOut (internal) for function test:
   Operational inputs:
-    vol
+    incomplete_type; vol
   Operational inputs on termination:
-    vol
+    incomplete_type; vol
   Sure outputs:
-    t1[0..99]; t5[0..99]; t10[4..6]; t11[3]; dst; p; tmp_0; s; s1; k
+    NULL[16..17]; t1[0..99]; t2[0..99]; t5[0..99]; t8[0..3]; t10[4..6]; 
+    t11[3]; dst; p; tmp_0; s; s1; k; absolute_valid_range;
+    S_incomplete_type[bits 0 to 7]
 [inout] Out (internal) for function uninit:
     x; a
 [inout] Inputs for function uninit:
@@ -314,15 +355,16 @@
   Sure outputs:
     a
 [inout] Out (internal) for function main:
-    t1[0..99]; t2[0..99]; t3[10..99]; t4[1..99]; t5[0..99]; t6[10..13];
-    t7[0..3]; t8[0..3]; t9[20..99]; t10[4..12]; t11[2..6]; t12[0..96]; 
-    ts[0..4]
+    NULL[16..17]; t1[0..99]; t2[0..99]; t3[10..99]; t4[1..99]; t5[0..99];
+    t6[10..13]; t7[0..3]; t8[0..3]; t9[20..99]; t10[4..12]; t11[2..6];
+    t12[0..96]; ts[0..4]; S_incomplete_type[bits 0 to 7]
 [inout] Inputs for function main:
-    vol
+    incomplete_type; vol
 [inout] InOut (internal) for function main:
   Operational inputs:
-    vol
+    incomplete_type; vol
   Operational inputs on termination:
-    vol
+    incomplete_type; vol
   Sure outputs:
-    t1[0..99]; t5[0..99]; t10[4..6]; t11[3]
+    NULL[16..17]; t1[0..99]; t2[0..99]; t5[0..99]; t8[0..3]; t10[4..6]; 
+    t11[3]; S_incomplete_type[bits 0 to 7]
diff --git a/tests/builtins/oracle/memset_malloc_0.res.oracle b/tests/builtins/oracle/memset_malloc_0.res.oracle
index 3afa0b65a29ef763ba0924c82c44d6ef863279b3..f397248b81e2c8e0af63cfc8dfa48c7da96eb17d 100644
--- a/tests/builtins/oracle/memset_malloc_0.res.oracle
+++ b/tests/builtins/oracle/memset_malloc_0.res.oracle
@@ -9,7 +9,7 @@
 [eva] memset_malloc_0.c:18: Call to builtin memset
 [eva] memset_malloc_0.c:18: 
   function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Recording results for main
 [eva] Done for function main
diff --git a/tests/builtins/oracle/precise_memset.res.oracle b/tests/builtins/oracle/precise_memset.res.oracle
index b02ac470c631262bbd86438efe066d2c039d917b..323e1f8213bf8c88a2a0230b709f435f46a07b9b 100644
--- a/tests/builtins/oracle/precise_memset.res.oracle
+++ b/tests/builtins/oracle/precise_memset.res.oracle
@@ -22,7 +22,7 @@
 [eva] precise_memset.c:72: Call to builtin memset
 [eva] precise_memset.c:72: 
   function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] precise_memset.c:73: Call to builtin memset
 [eva] precise_memset.c:73: 
diff --git a/tests/builtins/oracle/str_allocated.res.oracle b/tests/builtins/oracle/str_allocated.res.oracle
index e4448f41539d45b1ccf9d48abb53abff92e2f45a..cdd369361befe66a55caf18165d58ad4b5219c15 100644
--- a/tests/builtins/oracle/str_allocated.res.oracle
+++ b/tests/builtins/oracle/str_allocated.res.oracle
@@ -26,7 +26,7 @@
   function memchr: precondition 'danglingness' got status unknown.
 [eva] FRAMAC_SHARE/libc/string.h:78: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
-[eva] FRAMAC_SHARE/libc/string.h:85: 
+[eva] FRAMAC_SHARE/libc/string.h:86: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
 [eva] Recording results for memchr_bug
 [eva] Done for function memchr_bug
diff --git a/tests/builtins/oracle/strchr.res.oracle b/tests/builtins/oracle/strchr.res.oracle
index 28d8bac402b60642a6f46a399abd794616a4f0f9..924eddff1f52b8041adf37a6be4f29c7986b08f8 100644
--- a/tests/builtins/oracle/strchr.res.oracle
+++ b/tests/builtins/oracle/strchr.res.oracle
@@ -23,7 +23,7 @@
 [eva] strchr.c:88: Call to builtin strchr
 [eva] strchr.c:88: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:181: 
+[eva] FRAMAC_SHARE/libc/string.h:202: 
   cannot evaluate ACSL term, unsupported logic var p
 [eva] strchr.c:88: Frama_C_show_each_mystrchr: {3}
 [eva] strchr.c:89: assertion got status valid.
@@ -92,7 +92,7 @@
   Called from strchr.c:197.
 [eva] strchr.c:189: Call to builtin memset
 [eva] strchr.c:189: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Recording results for init_array_nondet
 [eva] Done for function init_array_nondet
diff --git a/tests/builtins/oracle/strlen.res.oracle b/tests/builtins/oracle/strlen.res.oracle
index 1998d07eb2c5d4eb738d3b6dcb21612791eb8072..0cbb3fda54f7f1e7fdf61be9e0926bbe60be9fdd 100644
--- a/tests/builtins/oracle/strlen.res.oracle
+++ b/tests/builtins/oracle/strlen.res.oracle
@@ -93,7 +93,7 @@
   Called from strlen.c:168.
 [eva] strlen.c:161: Call to builtin memset
 [eva] strlen.c:161: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Recording results for init_array_nondet
 [eva] Done for function init_array_nondet
diff --git a/tests/builtins/oracle/strnlen.res.oracle b/tests/builtins/oracle/strnlen.res.oracle
index 5d22fb90327d86dbb7309bb4794a47c8e2588664..aed3c076b9991939c058943a82ceec7b8257e0b9 100644
--- a/tests/builtins/oracle/strnlen.res.oracle
+++ b/tests/builtins/oracle/strnlen.res.oracle
@@ -48,6 +48,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   __fc_strtok_ptr ∈ {0}
   __fc_strerror[0..63] ∈ [--..--]
   __fc_p_strerror ∈ {{ &__fc_strerror[0] }}
diff --git a/tests/builtins/oracle/strnlen2.res.oracle b/tests/builtins/oracle/strnlen2.res.oracle
index f554968beef79c411e521f9b290838822ce89bd9..9b3f015bc35df7a058cf381f88f2d0eb5cba6393 100644
--- a/tests/builtins/oracle/strnlen2.res.oracle
+++ b/tests/builtins/oracle/strnlen2.res.oracle
@@ -93,7 +93,7 @@
   Called from strnlen2.c:144.
 [eva] strnlen2.c:138: Call to builtin memset
 [eva] strnlen2.c:138: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Recording results for init_array_nondet
 [eva] Done for function init_array_nondet
diff --git a/tests/builtins/oracle/wcslen.res.oracle b/tests/builtins/oracle/wcslen.res.oracle
index a5de0cd779733ac1419fd06657318b8832524640..9faaf9d02317bd2408bd494e9db29c182b804c24 100644
--- a/tests/builtins/oracle/wcslen.res.oracle
+++ b/tests/builtins/oracle/wcslen.res.oracle
@@ -93,7 +93,7 @@
   Called from wcslen.c:168.
 [eva] wcslen.c:161: Call to builtin memset
 [eva] wcslen.c:161: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Recording results for init_array_nondet
 [eva] Done for function init_array_nondet
diff --git a/tests/builtins/oracle/write-const.res.oracle b/tests/builtins/oracle/write-const.res.oracle
index 3c166ff90399758c31f8a4337cd8e0f318d7f3e2..eab4ebd123367102f38196750281397fd5071bd6 100644
--- a/tests/builtins/oracle/write-const.res.oracle
+++ b/tests/builtins/oracle/write-const.res.oracle
@@ -15,7 +15,7 @@
   function memcpy: precondition 'valid_src' got status valid.
 [eva] write-const.c:18: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] write-const.c:19: 
   Frama_C_dump_each:
@@ -42,7 +42,7 @@
 [eva] write-const.c:25: Call to builtin memset
 [eva:alarm] write-const.c:25: Warning: 
   function memset: precondition 'valid_s' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] write-const.c:26: 
   Frama_C_dump_each:
diff --git a/tests/builtins/oracle_equality/imprecise.res.oracle b/tests/builtins/oracle_equality/imprecise.res.oracle
index 510c64aad8aaa51da0c6f9e5f58617e8b42eef36..9633a07ab0e31c0bef97b7be3027233c2a4bf0db 100644
--- a/tests/builtins/oracle_equality/imprecise.res.oracle
+++ b/tests/builtins/oracle_equality/imprecise.res.oracle
@@ -1,13 +1,10 @@
-98a99,100
-> [kernel] imprecise.c:51: 
->   imprecise size for variable v3 (abstract type 'struct u')
-220a223,224
+220a221,222
 > [kernel] imprecise.c:111: 
 >   more than 200(300) elements to enumerate. Approximating.
-228a233,234
+228a231,232
 > [kernel] imprecise.c:114: 
 >   more than 200(300) elements to enumerate. Approximating.
-237,240d242
+237,240d240
 < [kernel] imprecise.c:111: 
 <   more than 200(300) elements to enumerate. Approximating.
 < [kernel] imprecise.c:114: 
diff --git a/tests/builtins/oracle_gauges/memcpy.res.oracle b/tests/builtins/oracle_gauges/memcpy.res.oracle
index 78ce5790f07d21391745733139582ff60737e029..a770a6bfa690f6889cc7840880cba52333ba7fbe 100644
--- a/tests/builtins/oracle_gauges/memcpy.res.oracle
+++ b/tests/builtins/oracle_gauges/memcpy.res.oracle
@@ -1,5 +1,5 @@
-150a151,152
+146a147,148
 > [eva] memcpy.c:96: Call to builtin memcpy
 > [eva] memcpy.c:96: Call to builtin memcpy
-376a379
+372a375
 > [eva] memcpy.c:230: starting to merge loop iterations
diff --git a/tests/cil/oracle/cpu_a.res.oracle b/tests/cil/oracle/cpu_a.res.oracle
index b1e7b6ca0a1c634dbcdf616a65afa015feeb6f5d..02859882344d809e85673de3e68f05c572ab225d 100644
--- a/tests/cil/oracle/cpu_a.res.oracle
+++ b/tests/cil/oracle/cpu_a.res.oracle
@@ -1,7 +1,7 @@
 [kernel] Parsing cpu_a.c (with preprocessing)
 [kernel] Parsing cpu_b.c (with preprocessing)
 [kernel:typing:int-conversion] cpu_b.c:7: Warning: 
-  Integer compatibily is machine-dependent : unsigned short and unsigned int
+  Integer compatibility is machine-dependent: unsigned short and unsigned int
 [kernel:typing:merge-conversion] Warning: 
   Conflicting definitions are between files cpu_a.c and cpu_b.c
 /* Generated by Frama-C */
diff --git a/tests/cil/oracle/cpu_b.res.oracle b/tests/cil/oracle/cpu_b.res.oracle
index fba20f7512642f74fc2f578704f8261187bdef2a..80bec54ee4754e6fecfc3f17745a2d71082d28e5 100644
--- a/tests/cil/oracle/cpu_b.res.oracle
+++ b/tests/cil/oracle/cpu_b.res.oracle
@@ -1,7 +1,7 @@
 [kernel] Parsing cpu_b.c (with preprocessing)
 [kernel] Parsing cpu_a.c (with preprocessing)
 [kernel:typing:int-conversion] cpu_a.c:6: Warning: 
-  Integer compatibily is machine-dependent : unsigned int and unsigned short
+  Integer compatibility is machine-dependent: unsigned int and unsigned short
 [kernel:typing:merge-conversion] Warning: 
   Conflicting definitions are between files cpu_b.c and cpu_a.c
 /* Generated by Frama-C */
diff --git a/tests/fc_script/estimate-difficulty.t/estimate-difficulty.c b/tests/fc_script/estimate-difficulty.t/estimate-difficulty.c
index 4cff9e42340f58f113eb708383fd3a69692c38be..93e056d98c2365c5b1e17d31d66c3e9be3875d7c 100644
--- a/tests/fc_script/estimate-difficulty.t/estimate-difficulty.c
+++ b/tests/fc_script/estimate-difficulty.t/estimate-difficulty.c
@@ -1,3 +1,8 @@
+/* run.config
+   NOFRAMAC: testing frama-c-script, not frama-c itself
+   EXECNOW: LOG @PTEST_NAME@.res LOG @PTEST_NAME@.err PTESTS_TESTING=1 %{bin:frama-c-script} estimate-difficulty --no-cloc @PTEST_FILE@ > @PTEST_NAME@.res 2> @PTEST_NAME@.err
+*/
+
 // these includes are not actually used by the compiler
 // (this is a preprocessed file), but analyzed by the script
 #include <sys/socket.h>
@@ -20,7 +25,11 @@ int main() {
   strlen(); // no warning
   ccosl(); // warning: neither code nor spec
   dprintf(); // no warning: neither code nor spec, but handled by Variadic
+  __asm__("xor ax, ax");
+  malloc(2);
+  alignof(char*);
+  _Complex cc;
 }
 
 __int128 large_int;
-_Complex complex;
+_Complex complex2;
diff --git a/tests/fc_script/estimate-difficulty.t/run.t b/tests/fc_script/estimate-difficulty.t/run.t
index 91b68551038a7b639be2e847c8b5e072a99ba10a..e021a15bc7897506b6c66cdae07def64d27660fc 100644
--- a/tests/fc_script/estimate-difficulty.t/run.t
+++ b/tests/fc_script/estimate-difficulty.t/run.t
@@ -1,13 +1,24 @@
-  $ PTESTS_TESTING=1 frama-c-script estimate-difficulty estimate-difficulty.c
+  $ PTESTS_TESTING=1 frama-c-script estimate-difficulty --no-cloc estimate-difficulty.c
   Building callgraph...
   Computing data about libc/POSIX functions...
-  [recursion] found recursive cycle near estimate-difficulty.c:13: f -> f
-  Estimating difficulty for 7 function calls...
-  - warning: ccosl (POSIX) has neither code nor spec in Frama-C's libc
-  - warning: setjmp (POSIX) is known to be problematic for code analysis
+  [recursion] found recursive cycle near estimate-difficulty.c:18: f -> f
+  Estimating difficulty for 10 function calls...
+  WARNING: ccosl (POSIX) has neither code nor spec in Frama-C's libc
+  WARNING: setjmp (POSIX) is known to be problematic for code analysis
   Function-related warnings: 2
   Estimating difficulty for 3 '#include <header>' directives...
-  - WARNING: included header <complex.h> is explicitly unsupported by Frama-C
+  WARNING: included header <complex.h> is explicitly unsupported by Frama-C
   Header-related warnings: 1
-  - warning: found 1 line with occurrences of unsupported C11 construct '_Complex'
-  - warning: found 1 line with occurrences of unsupported non-standard construct (GNU extension) '__int128'
+  Calls to dynamic allocation functions: malloc
+  WARNING: unsupported keyword(s) in estimate-difficulty.c:  _Complex (2 lines),  __int128 (1 line),  alignof (1 line)
+   - _Complex is a C11 construct
+   - __int128 is a non-standard construct (GNU extension)
+   - alignof is a C11 construct
+  WARNING: code seems to contain inline assembly ('asm(...)')
+  Overall difficulty score:
+  asm: 1
+  includes: 1
+  keywords: 3
+  libc: 2
+  malloc: 1
+  recursion: 1
diff --git a/tests/float/builtins.c b/tests/float/builtins.c
index 1b2d53069a31c06abd0b437c3a1b388ed79672e0..614f78d751bfd7f5f816de33a7bd6146acd742b4 100644
--- a/tests/float/builtins.c
+++ b/tests/float/builtins.c
@@ -2,7 +2,7 @@
    OPT: -eva @EVA_CONFIG@ -then -main main_log_exp
 */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 #include "math.h"
 
 void main(int c, char **v)
diff --git a/tests/float/oracle/builtins.res.oracle b/tests/float/oracle/builtins.res.oracle
index 5039c250f6b7711f4c2d73630e0df5ae8926e78d..0314e931b5a92f9bc007ab7731e4456550165500 100644
--- a/tests/float/oracle/builtins.res.oracle
+++ b/tests/float/oracle/builtins.res.oracle
@@ -11,17 +11,13 @@
   Called from builtins.c:12.
 [eva] using specification for function Frama_C_float_interval
 [eva] builtins.c:12: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] builtins.c:12: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_double_interval <- main.
   Called from builtins.c:13.
 [eva] using specification for function Frama_C_double_interval
 [eva] builtins.c:13: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] builtins.c:13: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] Recording results for main
 [eva] Done for function main
diff --git a/tests/float/oracle/cond.res.oracle b/tests/float/oracle/cond.res.oracle
index 27e81d6dc944d269ef634354776c90bd54ee1940..80dde9ff11713507b42eaff929c50c759a3dce37 100644
--- a/tests/float/oracle/cond.res.oracle
+++ b/tests/float/oracle/cond.res.oracle
@@ -16,24 +16,18 @@
   Called from cond.c:12.
 [eva] using specification for function Frama_C_float_interval
 [eva] cond.c:12: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] cond.c:12: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- main.
   Called from cond.c:15.
 [eva] cond.c:15: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] cond.c:15: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] cond.c:18: Warning: assertion got status unknown.
 [eva] computing for function Frama_C_float_interval <- main.
   Called from cond.c:20.
 [eva] cond.c:20: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] cond.c:20: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] Recording results for main
 [eva] Done for function main
diff --git a/tests/float/oracle/nonlin.0.res.oracle b/tests/float/oracle/nonlin.0.res.oracle
index f1e3762e46998e127a7fa8f744e42cd1eac9675b..42d729351cb63c8b12f12002bdfb07ae97d06d53 100644
--- a/tests/float/oracle/nonlin.0.res.oracle
+++ b/tests/float/oracle/nonlin.0.res.oracle
@@ -42,16 +42,12 @@
   Called from nonlin.c:18.
 [eva] using specification for function Frama_C_float_interval
 [eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- nonlin_f <- main.
   Called from nonlin.c:19.
 [eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] nonlin.c:22: assertion got status valid.
 [eva] nonlin.c:26: assertion got status valid.
@@ -158,16 +154,12 @@
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:61.
 [eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:62.
 [eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] nonlin.c:63: Warning: 
   accessing out of bounds index.
@@ -206,16 +198,12 @@
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:84.
 [eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:85.
 [eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] nonlin.c:92: Warning: 
   non-finite float value. assert \is_finite(\mul_float(v1, v1));
@@ -249,9 +237,7 @@
 [eva] computing for function Frama_C_float_interval <- around_zeros <- main.
   Called from nonlin.c:108.
 [eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] nonlin.c:113: Warning: 
   non-finite float value.
@@ -264,9 +250,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:126.
 [eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] nonlin.c:131: Warning: 
   non-finite double value. assert \is_finite(nondet);
@@ -276,9 +260,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:136.
 [eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] Recording results for subdivide_strategy
 [eva] Done for function subdivide_strategy
diff --git a/tests/float/oracle/nonlin.1.res.oracle b/tests/float/oracle/nonlin.1.res.oracle
index 244530720993a3a7e052fc2c7c6f87e33eac1545..c5dac9ca707683e6969cfce971489611bb88f9dd 100644
--- a/tests/float/oracle/nonlin.1.res.oracle
+++ b/tests/float/oracle/nonlin.1.res.oracle
@@ -42,16 +42,12 @@
   Called from nonlin.c:18.
 [eva] using specification for function Frama_C_float_interval
 [eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- nonlin_f <- main.
   Called from nonlin.c:19.
 [eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] nonlin.c:22: assertion got status valid.
 [eva:nonlin] nonlin.c:24: non-linear 'a + b * (c - a)', lv 'a'
@@ -162,16 +158,12 @@
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:61.
 [eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:62.
 [eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:63: non-linear 'i * i', lv 'i'
 [eva:nonlin] nonlin.c:63: subdividing on i
@@ -221,16 +213,12 @@
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:84.
 [eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:85.
 [eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:92: non-linear 'v1 * v1', lv 'v1'
 [eva:nonlin] nonlin.c:92: non-linear 'v2 * v2', lv 'v2'
@@ -268,9 +256,7 @@
 [eva] computing for function Frama_C_float_interval <- around_zeros <- main.
   Called from nonlin.c:108.
 [eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:113: non-linear '(f + f) - f', lv 'f'
 [eva:nonlin] nonlin.c:113: non-linear 'f1 / (((f + f) - f) - f1)', lv 'f1'
@@ -286,9 +272,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:126.
 [eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:130: non-linear 'x_0 * x_0', lv 'x_0'
 [eva:nonlin] nonlin.c:130: subdividing on x_0
@@ -302,9 +286,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:136.
 [eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:140: subdividing on x_0
 [eva] Recording results for subdivide_strategy
diff --git a/tests/float/oracle/nonlin.2.res.oracle b/tests/float/oracle/nonlin.2.res.oracle
index c34017d84d4a9ae84d71a2e2f54072c4703619fd..352093e03bcf77a2ec63db5bfad0780f2b9de997 100644
--- a/tests/float/oracle/nonlin.2.res.oracle
+++ b/tests/float/oracle/nonlin.2.res.oracle
@@ -42,16 +42,12 @@
   Called from nonlin.c:18.
 [eva] using specification for function Frama_C_float_interval
 [eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- nonlin_f <- main.
   Called from nonlin.c:19.
 [eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] nonlin.c:22: assertion got status valid.
 [eva:nonlin] nonlin.c:24: non-linear 'a + b * (c - a)', lv 'a'
@@ -162,16 +158,12 @@
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:61.
 [eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:62.
 [eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:63: non-linear 'i * i', lv 'i'
 [eva:nonlin] nonlin.c:63: subdividing on i
@@ -218,16 +210,12 @@
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:84.
 [eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:85.
 [eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:92: non-linear 'v1 * v1', lv 'v1'
 [eva:nonlin] nonlin.c:92: non-linear 'v2 * v2', lv 'v2'
@@ -251,9 +239,7 @@
 [eva] computing for function Frama_C_float_interval <- around_zeros <- main.
   Called from nonlin.c:108.
 [eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:113: non-linear '(f + f) - f', lv 'f'
 [eva:nonlin] nonlin.c:113: non-linear 'f1 / (((f + f) - f) - f1)', lv 'f1'
@@ -265,9 +251,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:126.
 [eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:130: non-linear 'x_0 * x_0', lv 'x_0'
 [eva:nonlin] nonlin.c:130: subdividing on x_0
@@ -276,9 +260,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:136.
 [eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:140: subdividing on x_0
 [eva] Recording results for subdivide_strategy
diff --git a/tests/float/oracle/nonlin.3.res.oracle b/tests/float/oracle/nonlin.3.res.oracle
index d23a6174a0cadc609bb5457dd506babb182eb65d..d2e06be00ee2be37e5019e5d0183e1d7301e8a6d 100644
--- a/tests/float/oracle/nonlin.3.res.oracle
+++ b/tests/float/oracle/nonlin.3.res.oracle
@@ -42,16 +42,12 @@
   Called from nonlin.c:18.
 [eva] using specification for function Frama_C_float_interval
 [eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- nonlin_f <- main.
   Called from nonlin.c:19.
 [eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] nonlin.c:22: assertion got status valid.
 [eva] nonlin.c:26: assertion got status valid.
@@ -158,16 +154,12 @@
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:61.
 [eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:62.
 [eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] nonlin.c:63: Warning: 
   accessing out of bounds index.
@@ -206,16 +198,12 @@
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:84.
 [eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:85.
 [eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] nonlin.c:92: Warning: 
   non-finite float value. assert \is_finite(\mul_float(v1, v1));
@@ -249,9 +237,7 @@
 [eva] computing for function Frama_C_float_interval <- around_zeros <- main.
   Called from nonlin.c:108.
 [eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] nonlin.c:113: Warning: 
   non-finite float value.
@@ -264,9 +250,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:126.
 [eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:alarm] nonlin.c:131: Warning: 
   non-finite float value. assert \is_finite(nondet);
@@ -276,9 +260,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:136.
 [eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] Recording results for subdivide_strategy
 [eva] Done for function subdivide_strategy
diff --git a/tests/float/oracle/nonlin.4.res.oracle b/tests/float/oracle/nonlin.4.res.oracle
index 20a680fb4f8c999495bd8c39d38b551737bbc1a4..b21a406a3b430d71f61d4bdec248136f1a8fcd7f 100644
--- a/tests/float/oracle/nonlin.4.res.oracle
+++ b/tests/float/oracle/nonlin.4.res.oracle
@@ -42,16 +42,12 @@
   Called from nonlin.c:18.
 [eva] using specification for function Frama_C_float_interval
 [eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- nonlin_f <- main.
   Called from nonlin.c:19.
 [eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] nonlin.c:22: assertion got status valid.
 [eva:nonlin] nonlin.c:24: non-linear 'a + b * (c - a)', lv 'a'
@@ -162,16 +158,12 @@
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:61.
 [eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:62.
 [eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:63: non-linear 'i * i', lv 'i'
 [eva:nonlin] nonlin.c:63: subdividing on i
@@ -221,16 +213,12 @@
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:84.
 [eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:85.
 [eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:92: non-linear 'v1 * v1', lv 'v1'
 [eva:nonlin] nonlin.c:92: non-linear 'v2 * v2', lv 'v2'
@@ -268,9 +256,7 @@
 [eva] computing for function Frama_C_float_interval <- around_zeros <- main.
   Called from nonlin.c:108.
 [eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:113: non-linear '(f + f) - f', lv 'f'
 [eva:nonlin] nonlin.c:113: non-linear 'f1 / (((f + f) - f) - f1)', lv 'f1'
@@ -286,9 +272,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:126.
 [eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:130: non-linear 'x_0 * x_0', lv 'x_0'
 [eva:nonlin] nonlin.c:130: subdividing on x_0
@@ -302,9 +286,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:136.
 [eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:140: subdividing on x_0
 [eva] Recording results for subdivide_strategy
diff --git a/tests/float/oracle/nonlin.5.res.oracle b/tests/float/oracle/nonlin.5.res.oracle
index 5a90665f5e4c99e945c480c7c69d501d54c561e8..0b7e0cad33be8205b342c70de1fd48d93f645367 100644
--- a/tests/float/oracle/nonlin.5.res.oracle
+++ b/tests/float/oracle/nonlin.5.res.oracle
@@ -42,16 +42,12 @@
   Called from nonlin.c:18.
 [eva] using specification for function Frama_C_float_interval
 [eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:18: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- nonlin_f <- main.
   Called from nonlin.c:19.
 [eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:19: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] nonlin.c:22: assertion got status valid.
 [eva:nonlin] nonlin.c:24: non-linear 'a + b * (c - a)', lv 'a'
@@ -162,16 +158,12 @@
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:61.
 [eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:61: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- other <- main.
   Called from nonlin.c:62.
 [eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:62: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:63: non-linear 'i * i', lv 'i'
 [eva:nonlin] nonlin.c:63: subdividing on i
@@ -218,16 +210,12 @@
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:84.
 [eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:84: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- norm <- main.
   Called from nonlin.c:85.
 [eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:85: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:92: non-linear 'v1 * v1', lv 'v1'
 [eva:nonlin] nonlin.c:92: non-linear 'v2 * v2', lv 'v2'
@@ -251,9 +239,7 @@
 [eva] computing for function Frama_C_float_interval <- around_zeros <- main.
   Called from nonlin.c:108.
 [eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:108: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:113: non-linear '(f + f) - f', lv 'f'
 [eva:nonlin] nonlin.c:113: non-linear 'f1 / (((f + f) - f) - f1)', lv 'f1'
@@ -265,9 +251,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:126.
 [eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:126: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:130: non-linear 'x_0 * x_0', lv 'x_0'
 [eva:nonlin] nonlin.c:130: subdividing on x_0
@@ -276,9 +260,7 @@
 [eva] computing for function Frama_C_float_interval <- subdivide_strategy <- main.
   Called from nonlin.c:136.
 [eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] nonlin.c:136: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva:nonlin] nonlin.c:140: subdividing on x_0
 [eva] Recording results for subdivide_strategy
diff --git a/tests/float/oracle/precise_cos_sin.res.oracle b/tests/float/oracle/precise_cos_sin.res.oracle
index ceaed12dc7a422f635a570f5fea4df483107e6ef..10a6b7fae42104936583a8201dae47a8e436b936 100644
--- a/tests/float/oracle/precise_cos_sin.res.oracle
+++ b/tests/float/oracle/precise_cos_sin.res.oracle
@@ -8,9 +8,7 @@
   Called from precise_cos_sin.c:12.
 [eva] using specification for function Frama_C_float_interval
 [eva] precise_cos_sin.c:12: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] precise_cos_sin.c:12: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] precise_cos_sin.c:15: Call to builtin sin
 [eva] precise_cos_sin.c:15: 
diff --git a/tests/float/oracle_equality/cond.res.oracle b/tests/float/oracle_equality/cond.res.oracle
index 4cd8c3819bdb64f63d5e9a5ad88e1e7fa18fadeb..3af1cb44d15c34f17c0bceeedf4b3451fa35edd5 100644
--- a/tests/float/oracle_equality/cond.res.oracle
+++ b/tests/float/oracle_equality/cond.res.oracle
@@ -1,4 +1,4 @@
-45,46c45,46
+39,40c39,40
 <   dz ∈ [0x1.0000000000001p0 .. 0x1.4000000000000p3]
 <   dt ∈ [-0x1.4000000000000p3 .. 0x1.fffffffffffffp-1]
 ---
diff --git a/tests/float/oracle_equality/nonlin.1.res.oracle b/tests/float/oracle_equality/nonlin.1.res.oracle
index 219fb5edaa60ceb558e2ae210ac981f0d144e48a..a2da22e4c93e104dac96393c8d404c2e109f517d 100644
--- a/tests/float/oracle_equality/nonlin.1.res.oracle
+++ b/tests/float/oracle_equality/nonlin.1.res.oracle
@@ -1,2 +1,2 @@
-61a62
+57a58
 > [eva:nonlin] nonlin.c:44: subdividing on a
diff --git a/tests/float/oracle_equality/nonlin.2.res.oracle b/tests/float/oracle_equality/nonlin.2.res.oracle
index 219fb5edaa60ceb558e2ae210ac981f0d144e48a..a2da22e4c93e104dac96393c8d404c2e109f517d 100644
--- a/tests/float/oracle_equality/nonlin.2.res.oracle
+++ b/tests/float/oracle_equality/nonlin.2.res.oracle
@@ -1,2 +1,2 @@
-61a62
+57a58
 > [eva:nonlin] nonlin.c:44: subdividing on a
diff --git a/tests/float/oracle_equality/nonlin.4.res.oracle b/tests/float/oracle_equality/nonlin.4.res.oracle
index 219fb5edaa60ceb558e2ae210ac981f0d144e48a..a2da22e4c93e104dac96393c8d404c2e109f517d 100644
--- a/tests/float/oracle_equality/nonlin.4.res.oracle
+++ b/tests/float/oracle_equality/nonlin.4.res.oracle
@@ -1,2 +1,2 @@
-61a62
+57a58
 > [eva:nonlin] nonlin.c:44: subdividing on a
diff --git a/tests/float/oracle_equality/nonlin.5.res.oracle b/tests/float/oracle_equality/nonlin.5.res.oracle
index 219fb5edaa60ceb558e2ae210ac981f0d144e48a..a2da22e4c93e104dac96393c8d404c2e109f517d 100644
--- a/tests/float/oracle_equality/nonlin.5.res.oracle
+++ b/tests/float/oracle_equality/nonlin.5.res.oracle
@@ -1,2 +1,2 @@
-61a62
+57a58
 > [eva:nonlin] nonlin.c:44: subdividing on a
diff --git a/tests/float/oracle_octagon/nonlin.1.res.oracle b/tests/float/oracle_octagon/nonlin.1.res.oracle
index 6eefc1b9fe0c8e2bfb44c95f71f61bc9f761dcf4..32ee5946f24c027cb7bf9fbb4f5475f1efd4b0a9 100644
--- a/tests/float/oracle_octagon/nonlin.1.res.oracle
+++ b/tests/float/oracle_octagon/nonlin.1.res.oracle
@@ -1,5 +1,5 @@
-274a275,276
+260a261,262
 > [eva:nonlin] nonlin.c:113: non-linear 'f + f', lv 'f'
 > [eva:nonlin] nonlin.c:113: subdividing on f
-277d278
+263d264
 < [eva:nonlin] nonlin.c:113: subdividing on f
diff --git a/tests/float/oracle_octagon/nonlin.2.res.oracle b/tests/float/oracle_octagon/nonlin.2.res.oracle
index af64eb11946572bd8f9d116a6d6731adf1112bcb..012ad84c26fdedd40b52a9415821dc093e6e5493 100644
--- a/tests/float/oracle_octagon/nonlin.2.res.oracle
+++ b/tests/float/oracle_octagon/nonlin.2.res.oracle
@@ -1,5 +1,5 @@
-257a258,259
+243a244,245
 > [eva:nonlin] nonlin.c:113: non-linear 'f + f', lv 'f'
 > [eva:nonlin] nonlin.c:113: subdividing on f
-260d261
+246d247
 < [eva:nonlin] nonlin.c:113: subdividing on f
diff --git a/tests/float/oracle_octagon/nonlin.4.res.oracle b/tests/float/oracle_octagon/nonlin.4.res.oracle
index 6eefc1b9fe0c8e2bfb44c95f71f61bc9f761dcf4..32ee5946f24c027cb7bf9fbb4f5475f1efd4b0a9 100644
--- a/tests/float/oracle_octagon/nonlin.4.res.oracle
+++ b/tests/float/oracle_octagon/nonlin.4.res.oracle
@@ -1,5 +1,5 @@
-274a275,276
+260a261,262
 > [eva:nonlin] nonlin.c:113: non-linear 'f + f', lv 'f'
 > [eva:nonlin] nonlin.c:113: subdividing on f
-277d278
+263d264
 < [eva:nonlin] nonlin.c:113: subdividing on f
diff --git a/tests/float/oracle_octagon/nonlin.5.res.oracle b/tests/float/oracle_octagon/nonlin.5.res.oracle
index af64eb11946572bd8f9d116a6d6731adf1112bcb..012ad84c26fdedd40b52a9415821dc093e6e5493 100644
--- a/tests/float/oracle_octagon/nonlin.5.res.oracle
+++ b/tests/float/oracle_octagon/nonlin.5.res.oracle
@@ -1,5 +1,5 @@
-257a258,259
+243a244,245
 > [eva:nonlin] nonlin.c:113: non-linear 'f + f', lv 'f'
 > [eva:nonlin] nonlin.c:113: subdividing on f
-260d261
+246d247
 < [eva:nonlin] nonlin.c:113: subdividing on f
diff --git a/tests/float/precise_cos_sin.c b/tests/float/precise_cos_sin.c
index cee74467f216fea00b30688d2bde37f2e017d43f..f99adad364bc19cd8c5719b82f4d6fa447958ddd 100644
--- a/tests/float/precise_cos_sin.c
+++ b/tests/float/precise_cos_sin.c
@@ -2,7 +2,7 @@
    OPT: -eva @EVA_CONFIG@ -eva-slevel 1000 -float-normal
 */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 #include <math.h>
 
 
diff --git a/tests/idct/oracle/ieee_1180_1990.res.oracle b/tests/idct/oracle/ieee_1180_1990.res.oracle
index b29a4a707c40c6ccb368ad80e34cce3c990f63ff..32e6e21539e6842e33fc3ff8bf5cc4521b059b1e 100644
--- a/tests/idct/oracle/ieee_1180_1990.res.oracle
+++ b/tests/idct/oracle/ieee_1180_1990.res.oracle
@@ -2146,6 +2146,29 @@
             default behavior
             by Frama-C kernel.
 
+--------------------------------------------------------------------------------
+--- Properties of Function 'getline'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            assigns *(*lineptr + (0 .. *n - 1)), *n, *stream, \result;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            assigns *(*lineptr + (0 .. *n - 1)) \from *stream;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            assigns *n \from *stream;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            assigns *stream \from *stream;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            assigns \result \from *stream;
+            Unverifiable but considered Valid.
+[  Valid  ] Default behavior
+            default behavior
+            by Frama-C kernel.
+
 --------------------------------------------------------------------------------
 --- Properties of Function 'fmemopen'
 --------------------------------------------------------------------------------
@@ -2160,15 +2183,15 @@
             errno_set:
               __fc_errno ≡ \old(__fc_errno) ∨ __fc_errno ∈ {22, 24, 12}
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 592)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 593)
             assigns __fc_errno, \result;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 592)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 593)
             assigns __fc_errno
               \from (indirect: buf), (indirect: size),
                     (indirect: *(mode + (0 .. strlen{Old}(mode))));
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 594)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 595)
             assigns \result
               \from __fc_p_fopen, (indirect: buf), (indirect: size),
                     (indirect: *(mode + (0 .. strlen{Old}(mode))));
@@ -2176,7 +2199,7 @@
 [  Valid  ] Default behavior
             default behavior
             by Frama-C kernel.
-[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 601) 
+[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 592) 
             allocates \old(buf);
             Unverifiable but considered Valid.
 
@@ -2184,29 +2207,60 @@
 --- Properties of Function 'asprintf'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition 'result_error_or_written_byes'
+[ Extern  ] Post-condition 'result_error_or_written_bytes'
             ensures
-            result_error_or_written_byes: \result ≡ -1 ∨ \result ≥ 0
+            result_error_or_written_bytes: \result ≡ -1 ∨ \result ≥ 0
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 613)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 614)
             assigns __fc_heap_status, \result, *strp;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 613)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 614)
             assigns __fc_heap_status
               \from (indirect: *(fmt + (0 ..))), __fc_heap_status;
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 614)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 615)
             assigns \result
               \from (indirect: *(fmt + (0 ..))), (indirect: __fc_heap_status);
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 615)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 616)
             assigns *strp
               \from *(fmt + (0 ..)), (indirect: __fc_heap_status);
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             default behavior
             by Frama-C kernel.
-[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 618) 
+[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 613) 
+            allocates *\old(strp);
+            Unverifiable but considered Valid.
+
+--------------------------------------------------------------------------------
+--- Properties of Function 'vasprintf'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Post-condition 'result_error_or_written_bytes'
+            ensures
+            result_error_or_written_bytes: \result ≡ -1 ∨ \result ≥ 0
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 627)
+            assigns __fc_heap_status, \result, *strp;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 627)
+            assigns __fc_heap_status
+              \from (indirect: *(fmt + (0 ..))), (indirect: ap),
+                    __fc_heap_status;
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 629)
+            assigns \result
+              \from (indirect: *(fmt + (0 ..))), (indirect: __fc_heap_status);
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 630)
+            assigns *strp
+              \from *(fmt + (0 ..)), ap, (indirect: __fc_heap_status);
+            Unverifiable but considered Valid.
+[  Valid  ] Default behavior
+            default behavior
+            by Frama-C kernel.
+[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 626) 
             allocates *\old(strp);
             Unverifiable but considered Valid.
 
@@ -4257,9 +4311,9 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-   194 Completely validated
+   196 Completely validated
     16 Locally validated
-   570 Considered valid
+   581 Considered valid
     56 To be validated
-   836 Total
+   849 Total
 --------------------------------------------------------------------------------
diff --git a/tests/idct/oracle_multidim/ieee_1180_1990.res.oracle b/tests/idct/oracle_multidim/ieee_1180_1990.res.oracle
index 47aa5d3e5dd20d6f1977724377123cb11af05543..e69b1bce17cf37606daa135221c9c880a23f0a59 100644
--- a/tests/idct/oracle_multidim/ieee_1180_1990.res.oracle
+++ b/tests/idct/oracle_multidim/ieee_1180_1990.res.oracle
@@ -265,7 +265,7 @@
 <      "output.\n"[bits 0 to 71]
 ---
 >     idct_init; idct_mc1[0..7][0..7]; idct_mc2[0..7][0..7]
-3909,3931d3743
+3963,3985d3797
 < [    -    ] Assertion 'Eva,initialization' (file idct.c, line 129)
 <             assert Eva: initialization: \initialized(&tmp1[i][j]);
 <             tried with Eva.
@@ -289,7 +289,7 @@
 <             assert Eva: initialization: \initialized(&tmp1[i][j]);
 <             By RedundantAlarms, with pending:
 <              - Assertion 'Eva,initialization' (file idct.c, line 145)
-3935,3957d3746
+3989,4011d3800
 < [    -    ] Assertion 'Eva,initialization' (file idct.c, line 163)
 <             assert Eva: initialization: \initialized(&tmp1[i][j]);
 <             tried with Eva.
@@ -313,11 +313,11 @@
 <             assert Eva: initialization: \initialized(&tmp1[i][j]);
 <             By RedundantAlarms, with pending:
 <              - Assertion 'Eva,initialization' (file idct.c, line 180)
-3979,3981d3767
+4033,4035d3821
 < [    -    ] Assertion 'Eva,initialization' (file ieee_1180_1990.c, line 109)
 <             assert Eva: initialization: \initialized(&tmp1[i][j]);
 <             tried with Eva.
-3985,4018d3770
+4039,4072d3824
 < [    -    ] Assertion 'Eva,initialization' (file ieee_1180_1990.c, line 116)
 <             assert Eva: initialization: \initialized(&tmp2[i][j]);
 <             tried with Eva.
@@ -352,11 +352,11 @@
 < [    -    ] Assertion 'Eva,float_to_int' (file ieee_1180_1990.c, line 124)
 <             assert Eva: float_to_int: tmp2[i][j] - 0.5 < 2147483648;
 <             tried with Eva.
-4039,4041d3790
+4093,4095d3844
 < [    -    ] Assertion 'Eva,initialization' (file ieee_1180_1990.c, line 150)
 <             assert Eva: initialization: \initialized(&tmp1[i][j]);
 <             tried with Eva.
-4045,4078d3793
+4099,4132d3847
 < [    -    ] Assertion 'Eva,initialization' (file ieee_1180_1990.c, line 157)
 <             assert Eva: initialization: \initialized(&tmp2[i][j]);
 <             tried with Eva.
@@ -391,7 +391,7 @@
 < [    -    ] Assertion 'Eva,float_to_int' (file ieee_1180_1990.c, line 165)
 <             assert Eva: float_to_int: tmp2[i][j] - 0.5 < 2147483648;
 <             tried with Eva.
-4178,4194c3893,3899
+4232,4248c3947,3953
 < [ Partial ] Assertion 'Eva,initialization' (file ieee_1180_1990.c, line 358)
 <             assert Eva: initialization: \initialized(&res[i].pmse[j][k]);
 <             By RedundantAlarms, with pending:
@@ -417,7 +417,7 @@
 >             reachability of stmt line 196 in main
 >             by Eva.
 > [  Dead   ] Instance of 'Pre-condition (file FRAMAC_SHARE/libc/stdio.h, line 211)' at call 'printf_va_1' (file ieee_1180_1990.c, line 195)
-4198,4199c3903,3906
+4252,4253c3957,3960
 <             by Eva.
 < [  Valid  ] Instance of 'Pre-condition (file FRAMAC_SHARE/libc/stdio.h, line 211)' at call 'printf_va_2' (file ieee_1180_1990.c, line 196)
 ---
@@ -425,22 +425,22 @@
 >             By Eva because:
 >              - Unreachable call 'printf_va_1' (file ieee_1180_1990.c, line 195)
 > [  Dead   ] Instance of 'Pre-condition (file FRAMAC_SHARE/libc/stdio.h, line 211)' at call 'printf_va_2' (file ieee_1180_1990.c, line 196)
-4203c3910,3912
+4257c3964,3966
 <             by Eva.
 ---
 >             Locally valid, but unreachable.
 >             By Eva because:
 >              - Unreachable call 'printf_va_2' (file ieee_1180_1990.c, line 196)
-4260,4261c3969
-<    194 Completely validated
+4314,4315c4023
+<    196 Completely validated
 <     16 Locally validated
 ---
->    192 Completely validated
-4263,4264c3971,3974
+>    194 Completely validated
+4317,4318c4025,4028
 <     56 To be validated
-<    836 Total
+<    849 Total
 ---
 >     32 To be validated
 >      2 Dead properties
 >      2 Unreachable
->    798 Total
+>    811 Total
diff --git a/tests/libc/oracle/argz_c.res.oracle b/tests/libc/oracle/argz_c.res.oracle
index 38884838a6fe0a2ad80311c8f255521d860e08fc..5e0b1929b42c7aa9d766a2fbcef20238c149fbcb 100644
--- a/tests/libc/oracle/argz_c.res.oracle
+++ b/tests/libc/oracle/argz_c.res.oracle
@@ -22,6 +22,7 @@
   \return(getenv) == 0 (auto)
   \return(bsearch) == 0 (auto)
   \return(realpath) == 0 (auto)
+  \return(canonicalize_file_name) == 0 (auto)
   \return(memchr) == 0 (auto)
   \return(memrchr) == 0 (auto)
   \return(memcpy) == 0 (auto)
@@ -43,8 +44,10 @@
   \return(stpcpy) == 0 (auto)
   \return(strcat) == 0 (auto)
   \return(strncat) == 0 (auto)
+  \return(memmem) == 0 (auto)
   \return(strdup) == 0 (auto)
   \return(strndup) == 0 (auto)
+  \return(stpncpy) == 0 (auto)
   \return(strsignal) == 0 (auto)
   \return(argz_count) == 0, 6 (auto)
   \return(argz_append) == 0, 6 (auto)
@@ -62,24 +65,24 @@
   
 [eva] computing for function argz_create <- main.
   Called from argz_c.c:20.
-[eva] FRAMAC_SHARE/libc/argz.c:240: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:240: 
+[eva] FRAMAC_SHARE/libc/argz.c:246: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:246: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:240: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:240: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:245: Call to builtin malloc
-[eva] FRAMAC_SHARE/libc/argz.c:245: 
-  allocating variable __malloc_argz_create_l245
+[eva] FRAMAC_SHARE/libc/argz.c:246: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:246: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:251: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/argz.c:251: 
+  allocating variable __malloc_argz_create_l251
 [eva] computing for function stpcpy <- argz_create <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:250.
+  Called from FRAMAC_SHARE/libc/argz.c:256.
 [eva] Recording results for stpcpy
 [eva] Done for function stpcpy
 [eva] computing for function stpcpy <- argz_create <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:250.
+  Called from FRAMAC_SHARE/libc/argz.c:256.
 [eva] Recording results for stpcpy
 [eva] Done for function stpcpy
 [eva] computing for function stpcpy <- argz_create <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:250.
+  Called from FRAMAC_SHARE/libc/argz.c:256.
 [eva] Recording results for stpcpy
 [eva] Done for function stpcpy
 [eva] Recording results for argz_create
@@ -93,12 +96,12 @@
 [eva] argz_c.c:23: function free: precondition 'freeable' got status valid.
 [eva] computing for function argz_create_sep <- main.
   Called from argz_c.c:25.
-[eva] FRAMAC_SHARE/libc/argz.c:196: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:196: 
-  function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:202: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/argz.c:202: Call to builtin strlen
 [eva] FRAMAC_SHARE/libc/argz.c:202: 
-  allocating variable __malloc_argz_create_sep_l202
+  function strlen: precondition 'valid_string_s' got status valid.
+[eva] FRAMAC_SHARE/libc/argz.c:208: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/argz.c:208: 
+  allocating variable __malloc_argz_create_sep_l208
 [eva] Recording results for argz_create_sep
 [eva] Done for function argz_create_sep
 [eva] computing for function exit <- main.
@@ -112,11 +115,11 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_count <- main.
   Called from argz_c.c:28.
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:260: 
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
 [eva] Recording results for argz_count
 [eva] Done for function argz_count
 [eva] computing for function __FC_assert <- main.
@@ -126,24 +129,24 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_add <- main.
   Called from argz_c.c:30.
-[eva] FRAMAC_SHARE/libc/argz.c:282: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:282: 
+[eva] FRAMAC_SHARE/libc/argz.c:288: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:288: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] computing for function argz_append <- argz_add <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:282.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
+  Called from FRAMAC_SHARE/libc/argz.c:288.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
   function realloc: precondition 'freeable' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
-[eva] FRAMAC_SHARE/libc/argz.c:273: 
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/argz.c:279: 
   function memcpy: precondition 'valid_dest' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:273: 
+[eva] FRAMAC_SHARE/libc/argz.c:279: 
   function memcpy: precondition 'valid_src' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:273: 
+[eva] FRAMAC_SHARE/libc/argz.c:279: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
@@ -159,14 +162,14 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_add_sep <- main.
   Called from argz_c.c:33.
-[eva] FRAMAC_SHARE/libc/argz.c:287: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:287: 
-  function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:293: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:293: Call to builtin strlen
 [eva] FRAMAC_SHARE/libc/argz.c:293: 
+  function strlen: precondition 'valid_string_s' got status valid.
+[eva] FRAMAC_SHARE/libc/argz.c:299: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:299: 
   function realloc: precondition 'freeable' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:293: 
-  allocating variable __realloc_argz_add_sep_l293
+[eva] FRAMAC_SHARE/libc/argz.c:299: 
+  allocating variable __realloc_argz_add_sep_l299
 [eva] Recording results for argz_add_sep
 [eva] Done for function argz_add_sep
 [eva] computing for function exit <- main.
@@ -179,12 +182,12 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_count <- main.
   Called from argz_c.c:36.
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:260: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:266: Call to builtin strlen
 [eva] Recording results for argz_count
 [eva] Done for function argz_count
 [eva] computing for function __FC_assert <- main.
@@ -194,10 +197,10 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_append <- main.
   Called from argz_c.c:38.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_0
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_0
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] computing for function exit <- main.
@@ -210,13 +213,13 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_add <- main.
   Called from argz_c.c:41.
-[eva] FRAMAC_SHARE/libc/argz.c:282: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:288: Call to builtin strlen
 [eva] computing for function argz_append <- argz_add <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:282.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_1
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:288.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_1
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] Recording results for argz_add
@@ -231,269 +234,269 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_replace <- main.
   Called from argz_c.c:45.
-[eva] FRAMAC_SHARE/libc/argz.c:72: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:72: 
+[eva] FRAMAC_SHARE/libc/argz.c:78: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:78: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:72: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:72: 
+[eva] FRAMAC_SHARE/libc/argz.c:78: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:78: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
+  Called from FRAMAC_SHARE/libc/argz.c:80.
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:75.
+  Called from FRAMAC_SHARE/libc/argz.c:81.
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
-[eva] FRAMAC_SHARE/libc/argz.c:129: 
+  Called from FRAMAC_SHARE/libc/argz.c:80.
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/argz.c:135: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:181: 
+[eva] FRAMAC_SHARE/libc/string.h:202: 
   cannot evaluate ACSL term, unsupported logic var p
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:75.
+  Called from FRAMAC_SHARE/libc/argz.c:81.
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+  Called from FRAMAC_SHARE/libc/argz.c:80.
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:75.
+  Called from FRAMAC_SHARE/libc/argz.c:81.
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+  Called from FRAMAC_SHARE/libc/argz.c:80.
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:75.
+  Called from FRAMAC_SHARE/libc/argz.c:81.
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function strndup <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:79.
-[eva:loop-unroll:auto] FRAMAC_SHARE/libc/string.c:333: Automatic loop unrolling.
-[eva] FRAMAC_SHARE/libc/string.c:336: Call to builtin malloc
-[eva] FRAMAC_SHARE/libc/string.c:336: allocating variable __malloc_strndup_l336
-[eva] FRAMAC_SHARE/libc/string.c:341: Call to builtin memcpy
-[eva] FRAMAC_SHARE/libc/string.c:341: 
+  Called from FRAMAC_SHARE/libc/argz.c:85.
+[eva:loop-unroll:auto] FRAMAC_SHARE/libc/string.c:336: Automatic loop unrolling.
+[eva] FRAMAC_SHARE/libc/string.c:339: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/string.c:339: allocating variable __malloc_strndup_l339
+[eva] FRAMAC_SHARE/libc/string.c:344: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/string.c:344: 
   function memcpy: precondition 'valid_dest' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:341: 
+[eva] FRAMAC_SHARE/libc/string.c:344: 
   function memcpy: precondition 'valid_src' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:341: 
+[eva] FRAMAC_SHARE/libc/string.c:344: 
   function memcpy: precondition 'separation' got status valid.
 [eva] Recording results for strndup
 [eva] Done for function strndup
 [eva] computing for function str_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:82.
-[eva] FRAMAC_SHARE/libc/argz.c:49: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:49: 
+  Called from FRAMAC_SHARE/libc/argz.c:88.
+[eva] FRAMAC_SHARE/libc/argz.c:55: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:55: 
   function realloc: precondition 'freeable' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:49: allocating variable __realloc_str_append_l49
+[eva] FRAMAC_SHARE/libc/argz.c:55: allocating variable __realloc_str_append_l55
 [eva] computing for function mempcpy <- str_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:52.
+  Called from FRAMAC_SHARE/libc/argz.c:58.
 [eva:loop-unroll:auto] FRAMAC_SHARE/libc/string.c:54: Automatic loop unrolling.
 [eva] Recording results for mempcpy
 [eva] Done for function mempcpy
-[eva] FRAMAC_SHARE/libc/argz.c:56: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:56: 
+[eva] FRAMAC_SHARE/libc/argz.c:62: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:62: 
   function free: precondition 'freeable' got status valid.
 [eva] Recording results for str_append
 [eva] Done for function str_append
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:84.
+  Called from FRAMAC_SHARE/libc/argz.c:90.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] FRAMAC_SHARE/libc/argz.c:89: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:89: 
+[eva] FRAMAC_SHARE/libc/argz.c:95: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:95: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] computing for function str_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:89.
-[eva] FRAMAC_SHARE/libc/argz.c:49: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:49: 
-  allocating variable __realloc_str_append_l49_0
+  Called from FRAMAC_SHARE/libc/argz.c:95.
+[eva] FRAMAC_SHARE/libc/argz.c:55: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:55: 
+  allocating variable __realloc_str_append_l55_0
 [eva] computing for function mempcpy <- str_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:52.
+  Called from FRAMAC_SHARE/libc/argz.c:58.
 [eva] Recording results for mempcpy
 [eva] Done for function mempcpy
-[eva] FRAMAC_SHARE/libc/argz.c:56: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:62: Call to builtin free
 [eva] Recording results for str_append
 [eva] Done for function str_append
 [eva] computing for function argz_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:98.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_2
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:104.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_2
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] computing for function argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:102.
-[eva] FRAMAC_SHARE/libc/argz.c:282: Call to builtin strlen
+  Called from FRAMAC_SHARE/libc/argz.c:108.
+[eva] FRAMAC_SHARE/libc/argz.c:288: Call to builtin strlen
 [eva] computing for function argz_append <- argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:282.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_3
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:288.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_3
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] Recording results for argz_add
 [eva] Done for function argz_add
-[eva] FRAMAC_SHARE/libc/argz.c:103: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:103: 
+[eva] FRAMAC_SHARE/libc/argz.c:109: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:109: 
   function free: precondition 'freeable' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:103: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:103: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:109: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:109: Call to builtin free
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+  Called from FRAMAC_SHARE/libc/argz.c:80.
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:75.
+  Called from FRAMAC_SHARE/libc/argz.c:81.
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:110.
-[eva] FRAMAC_SHARE/libc/argz.c:282: Call to builtin strlen
+  Called from FRAMAC_SHARE/libc/argz.c:116.
+[eva] FRAMAC_SHARE/libc/argz.c:288: Call to builtin strlen
 [eva] computing for function argz_append <- argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:282.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_4
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:288.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_4
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] Recording results for argz_add
 [eva] Done for function argz_add
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+  Called from FRAMAC_SHARE/libc/argz.c:80.
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:75.
+  Called from FRAMAC_SHARE/libc/argz.c:81.
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:110.
-[eva] FRAMAC_SHARE/libc/argz.c:282: Call to builtin strlen
+  Called from FRAMAC_SHARE/libc/argz.c:116.
+[eva] FRAMAC_SHARE/libc/argz.c:288: Call to builtin strlen
 [eva] computing for function argz_append <- argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:282.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_5
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:288.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_5
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] Recording results for argz_add
 [eva] Done for function argz_add
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+  Called from FRAMAC_SHARE/libc/argz.c:80.
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:75.
+  Called from FRAMAC_SHARE/libc/argz.c:81.
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:110.
-[eva] FRAMAC_SHARE/libc/argz.c:282: Call to builtin strlen
+  Called from FRAMAC_SHARE/libc/argz.c:116.
+[eva] FRAMAC_SHARE/libc/argz.c:288: Call to builtin strlen
 [eva] computing for function argz_append <- argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:282.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_6
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:288.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_6
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] Recording results for argz_add
 [eva] Done for function argz_add
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+  Called from FRAMAC_SHARE/libc/argz.c:80.
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:75.
+  Called from FRAMAC_SHARE/libc/argz.c:81.
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function strndup <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:79.
-[eva] FRAMAC_SHARE/libc/string.c:336: Call to builtin malloc
-[eva] FRAMAC_SHARE/libc/string.c:336: 
-  allocating variable __malloc_strndup_l336_0
-[eva] FRAMAC_SHARE/libc/string.c:341: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:85.
+[eva] FRAMAC_SHARE/libc/string.c:339: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/string.c:339: 
+  allocating variable __malloc_strndup_l339_0
+[eva] FRAMAC_SHARE/libc/string.c:344: Call to builtin memcpy
 [eva] Recording results for strndup
 [eva] Done for function strndup
 [eva] computing for function str_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:82.
-[eva] FRAMAC_SHARE/libc/argz.c:49: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:49: 
-  allocating variable __realloc_str_append_l49_1
+  Called from FRAMAC_SHARE/libc/argz.c:88.
+[eva] FRAMAC_SHARE/libc/argz.c:55: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:55: 
+  allocating variable __realloc_str_append_l55_1
 [eva] computing for function mempcpy <- str_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:52.
+  Called from FRAMAC_SHARE/libc/argz.c:58.
 [eva] Recording results for mempcpy
 [eva] Done for function mempcpy
-[eva] FRAMAC_SHARE/libc/argz.c:56: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:62: Call to builtin free
 [eva] Recording results for str_append
 [eva] Done for function str_append
 [eva] computing for function strstr <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:84.
+  Called from FRAMAC_SHARE/libc/argz.c:90.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] FRAMAC_SHARE/libc/argz.c:89: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:95: Call to builtin strlen
 [eva] computing for function str_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:89.
-[eva] FRAMAC_SHARE/libc/argz.c:49: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:49: 
-  allocating variable __realloc_str_append_l49_2
+  Called from FRAMAC_SHARE/libc/argz.c:95.
+[eva] FRAMAC_SHARE/libc/argz.c:55: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:55: 
+  allocating variable __realloc_str_append_l55_2
 [eva] computing for function mempcpy <- str_append <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:52.
+  Called from FRAMAC_SHARE/libc/argz.c:58.
 [eva] Recording results for mempcpy
 [eva] Done for function mempcpy
-[eva] FRAMAC_SHARE/libc/argz.c:56: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:62: Call to builtin free
 [eva] Recording results for str_append
 [eva] Done for function str_append
 [eva] computing for function argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:102.
-[eva] FRAMAC_SHARE/libc/argz.c:282: Call to builtin strlen
+  Called from FRAMAC_SHARE/libc/argz.c:108.
+[eva] FRAMAC_SHARE/libc/argz.c:288: Call to builtin strlen
 [eva] computing for function argz_append <- argz_add <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:282.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_7
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:288.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_7
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] Recording results for argz_add
 [eva] Done for function argz_add
-[eva] FRAMAC_SHARE/libc/argz.c:103: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:103: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:109: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:109: Call to builtin free
 [eva] computing for function argz_next <- argz_replace <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:74.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+  Called from FRAMAC_SHARE/libc/argz.c:80.
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
-[eva] FRAMAC_SHARE/libc/argz.c:115: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:115: 
+[eva] FRAMAC_SHARE/libc/argz.c:121: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:121: 
   function free: precondition 'freeable' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:120: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:120: 
+[eva] FRAMAC_SHARE/libc/argz.c:126: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:126: 
   function free: precondition 'freeable' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:120: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:120: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:120: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:120: Call to builtin free
-[eva] FRAMAC_SHARE/libc/argz.c:120: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:126: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:126: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:126: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:126: Call to builtin free
+[eva] FRAMAC_SHARE/libc/argz.c:126: Call to builtin free
 [eva] Recording results for argz_replace
 [eva] Done for function argz_replace
 [eva] computing for function exit <- main.
@@ -520,20 +523,20 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_next <- main.
   Called from argz_c.c:52.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function argz_delete <- main.
   Called from argz_c.c:54.
-[eva] FRAMAC_SHARE/libc/argz.c:184: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:184: 
+[eva] FRAMAC_SHARE/libc/argz.c:190: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:190: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:186: Call to builtin memmove
-[eva] FRAMAC_SHARE/libc/argz.c:186: 
+[eva] FRAMAC_SHARE/libc/argz.c:192: Call to builtin memmove
+[eva] FRAMAC_SHARE/libc/argz.c:192: 
   function memmove: precondition 'valid_dest' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:186: 
+[eva] FRAMAC_SHARE/libc/argz.c:192: 
   function memmove: precondition 'valid_src' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:124: 
+[eva] FRAMAC_SHARE/libc/string.h:141: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Recording results for argz_delete
 [eva] Done for function argz_delete
@@ -548,12 +551,12 @@
 [eva] Done for function argz_next
 [eva] computing for function argz_next <- main.
   Called from argz_c.c:58.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function argz_next <- main.
   Called from argz_c.c:58.
-[eva] FRAMAC_SHARE/libc/argz.c:129: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/argz.c:135: Call to builtin strchr
 [eva] Recording results for argz_next
 [eva] Done for function argz_next
 [eva] computing for function __FC_assert <- main.
@@ -563,8 +566,8 @@
 [eva] Done for function __FC_assert
 [eva] computing for function argz_delete <- main.
   Called from argz_c.c:61.
-[eva] FRAMAC_SHARE/libc/argz.c:184: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:186: Call to builtin memmove
+[eva] FRAMAC_SHARE/libc/argz.c:190: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:192: Call to builtin memmove
 [eva] Recording results for argz_delete
 [eva] Done for function argz_delete
 [eva] computing for function __FC_assert <- main.
@@ -578,23 +581,23 @@
 [eva] Done for function argz_next
 [eva] computing for function argz_insert <- main.
   Called from argz_c.c:64.
-[eva] FRAMAC_SHARE/libc/argz.c:153: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/argz.c:153: 
+[eva] FRAMAC_SHARE/libc/argz.c:159: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/argz.c:159: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:157: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:157: 
+[eva] FRAMAC_SHARE/libc/argz.c:163: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:163: 
   function realloc: precondition 'freeable' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:157: 
-  allocating variable __realloc_argz_insert_l157
-[eva] FRAMAC_SHARE/libc/argz.c:161: Call to builtin memmove
-[eva] FRAMAC_SHARE/libc/argz.c:161: 
+[eva] FRAMAC_SHARE/libc/argz.c:163: 
+  allocating variable __realloc_argz_insert_l163
+[eva] FRAMAC_SHARE/libc/argz.c:167: Call to builtin memmove
+[eva] FRAMAC_SHARE/libc/argz.c:167: 
   function memmove: precondition 'valid_dest' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:161: 
+[eva] FRAMAC_SHARE/libc/argz.c:167: 
   function memmove: precondition 'valid_src' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:162: Call to builtin memmove
-[eva] FRAMAC_SHARE/libc/argz.c:162: 
+[eva] FRAMAC_SHARE/libc/argz.c:168: Call to builtin memmove
+[eva] FRAMAC_SHARE/libc/argz.c:168: 
   function memmove: precondition 'valid_dest' got status valid.
-[eva] FRAMAC_SHARE/libc/argz.c:162: 
+[eva] FRAMAC_SHARE/libc/argz.c:168: 
   function memmove: precondition 'valid_src' got status valid.
 [eva] Recording results for argz_insert
 [eva] Done for function argz_insert
@@ -609,14 +612,14 @@
 [eva] computing for function argz_insert <- main.
   Called from argz_c.c:67.
 [eva] computing for function argz_add <- argz_insert <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:142.
-[eva] FRAMAC_SHARE/libc/argz.c:282: Call to builtin strlen
+  Called from FRAMAC_SHARE/libc/argz.c:148.
+[eva] FRAMAC_SHARE/libc/argz.c:288: Call to builtin strlen
 [eva] computing for function argz_append <- argz_add <- argz_insert <- main.
-  Called from FRAMAC_SHARE/libc/argz.c:282.
-[eva] FRAMAC_SHARE/libc/argz.c:271: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/argz.c:271: 
-  allocating variable __realloc_argz_append_l271_8
-[eva] FRAMAC_SHARE/libc/argz.c:273: Call to builtin memcpy
+  Called from FRAMAC_SHARE/libc/argz.c:288.
+[eva] FRAMAC_SHARE/libc/argz.c:277: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/argz.c:277: 
+  allocating variable __realloc_argz_append_l277_8
+[eva] FRAMAC_SHARE/libc/argz.c:279: Call to builtin memcpy
 [eva] Recording results for argz_append
 [eva] Done for function argz_append
 [eva] Recording results for argz_add
@@ -639,45 +642,45 @@
 [eva:final-states] Values at end of function mempcpy:
   i ∈ {0; 3}
   __retres ∈
-          {{ (void *)&__realloc_str_append_l49[3] ;
-             (void *)&__realloc_str_append_l49_0[3] ;
-             (void *)&__realloc_str_append_l49_1[3] ;
-             (void *)&__realloc_str_append_l49_2[3] }}
-  __realloc_str_append_l49[0] ∈ {98}
+          {{ (void *)&__realloc_str_append_l55[3] ;
+             (void *)&__realloc_str_append_l55_0[3] ;
+             (void *)&__realloc_str_append_l55_1[3] ;
+             (void *)&__realloc_str_append_l55_2[3] }}
+  __realloc_str_append_l55[0] ∈ {98}
                           [1] ∈ {108}
                           [2] ∈ {97}
                           [3] ∈ UNINITIALIZED
-  __realloc_str_append_l49_1[0] ∈ {98}
+  __realloc_str_append_l55_1[0] ∈ {98}
                             [1] ∈ {108}
                             [2] ∈ {97}
                             [3] ∈ UNINITIALIZED
 [eva:final-states] Values at end of function argz_append:
   dst ∈
-     {{ NULL ; &__realloc_argz_append_l271_2[0] ;
-        &__realloc_argz_append_l271_3[0] ; &__realloc_argz_append_l271_4[0] ;
-        &__realloc_argz_append_l271_5[0] ; &__realloc_argz_append_l271_6[0] ;
-        &__realloc_argz_append_l271_7[0] }}
+     {{ NULL ; &__realloc_argz_append_l277_2[0] ;
+        &__realloc_argz_append_l277_3[0] ; &__realloc_argz_append_l277_4[0] ;
+        &__realloc_argz_append_l277_5[0] ; &__realloc_argz_append_l277_6[0] ;
+        &__realloc_argz_append_l277_7[0] }}
   dst_len ∈ {0; 7; 11; 14; 17; 19; 23}
   new_argz_len ∈ {7; 10; 11; 14; 17; 18; 19; 21; 23; 24}
   new_argz ∈
-          {{ NULL ; &__realloc_argz_append_l271[0] ;
-             &__realloc_argz_append_l271_0[0] ;
-             &__realloc_argz_append_l271_1[0] ;
-             &__realloc_argz_append_l271_2[0] ;
-             &__realloc_argz_append_l271_3[0] ;
-             &__realloc_argz_append_l271_4[0] ;
-             &__realloc_argz_append_l271_5[0] ;
-             &__realloc_argz_append_l271_6[0] ;
-             &__realloc_argz_append_l271_7[0] ;
-             &__realloc_argz_append_l271_8[0] }}
+          {{ NULL ; &__realloc_argz_append_l277[0] ;
+             &__realloc_argz_append_l277_0[0] ;
+             &__realloc_argz_append_l277_1[0] ;
+             &__realloc_argz_append_l277_2[0] ;
+             &__realloc_argz_append_l277_3[0] ;
+             &__realloc_argz_append_l277_4[0] ;
+             &__realloc_argz_append_l277_5[0] ;
+             &__realloc_argz_append_l277_6[0] ;
+             &__realloc_argz_append_l277_7[0] ;
+             &__realloc_argz_append_l277_8[0] }}
   argz ∈
-      {{ &__malloc_argz_create_sep_l202[0] ; &__realloc_argz_append_l271[0] ;
-         &__realloc_argz_add_sep_l293[0] ; &__realloc_argz_append_l271_0[0] ;
-         &__realloc_argz_append_l271_1[0] ; &__realloc_argz_insert_l157[0] ;
-         &__realloc_argz_append_l271_8[0] }}
+      {{ &__malloc_argz_create_sep_l208[0] ; &__realloc_argz_append_l277[0] ;
+         &__realloc_argz_add_sep_l299[0] ; &__realloc_argz_append_l277_0[0] ;
+         &__realloc_argz_append_l277_1[0] ; &__realloc_argz_insert_l163[0] ;
+         &__realloc_argz_append_l277_8[0] }}
   len ∈ {7; 10; 16; 18; 21; 24}
   __retres ∈ {0; 12}
-  __realloc_argz_append_l271[0] ∈ {97}
+  __realloc_argz_append_l277[0] ∈ {97}
                             [1] ∈ {0}
                             [2] ∈ {98}
                             [3] ∈ {0}
@@ -687,7 +690,7 @@
                             [7] ∈ {101}
                             [8] ∈ {102}
                             [9] ∈ {0}
-  __realloc_argz_append_l271_0[0] ∈ {97}
+  __realloc_argz_append_l277_0[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -705,7 +708,7 @@
                               [15] ∈ {0}
                               [16] ∈ {107}
                               [17] ∈ {0}
-  __realloc_argz_append_l271_1[0] ∈ {97}
+  __realloc_argz_append_l277_1[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -726,14 +729,14 @@
                               [18] ∈ {101}
                               [19] ∈ {102}
                               [20] ∈ {0}
-  __realloc_argz_append_l271_2[0] ∈ {97}
+  __realloc_argz_append_l277_2[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
                               [4] ∈ {99}
                               [5] ∈ {100}
                               [6] ∈ {0}
-  __realloc_argz_append_l271_3[0] ∈ {97}
+  __realloc_argz_append_l277_3[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -744,7 +747,7 @@
                               [8] ∈ {108}
                               [9] ∈ {97}
                               [10] ∈ {0}
-  __realloc_argz_append_l271_4[0] ∈ {97}
+  __realloc_argz_append_l277_4[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -758,7 +761,7 @@
                               [11] ∈ {103}
                               [12] ∈ {104}
                               [13] ∈ {0}
-  __realloc_argz_append_l271_5[0] ∈ {97}
+  __realloc_argz_append_l277_5[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -775,7 +778,7 @@
                               [14] ∈ {105}
                               [15] ∈ {106}
                               [16] ∈ {0}
-  __realloc_argz_append_l271_6[0] ∈ {97}
+  __realloc_argz_append_l277_6[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -794,7 +797,7 @@
                               [16] ∈ {0}
                               [17] ∈ {107}
                               [18] ∈ {0}
-  __realloc_argz_append_l271_7[0] ∈ {97}
+  __realloc_argz_append_l277_7[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -817,7 +820,7 @@
                               [20] ∈ {108}
                               [21] ∈ {97}
                               [22] ∈ {0}
-  __realloc_argz_append_l271_8[0] ∈ {109}
+  __realloc_argz_append_l277_8[0] ∈ {109}
                               [1] ∈ {110}
                               [2] ∈ {111}
                               [3] ∈ {0}
@@ -842,8 +845,8 @@
                               [23] ∈ {0}
 [eva:final-states] Values at end of function stpcpy:
   i ∈ {2; 4}
-  __retres ∈ {{ &__malloc_argz_create_l245{[4], [7], [12]} }}
-  __malloc_argz_create_l245[0] ∈ {116}
+  __retres ∈ {{ &__malloc_argz_create_l251{[4], [7], [12]} }}
+  __malloc_argz_create_l251[0] ∈ {116}
                            [1] ∈ {104}
                            [2] ∈ {105}
                            [3] ∈ {115}
@@ -859,54 +862,54 @@
 [eva:final-states] Values at end of function str_append:
   new_len ∈ {3}
   new_to ∈
-        {{ NULL ; &__realloc_str_append_l49[0] ;
-           &__realloc_str_append_l49_0[0] ; &__realloc_str_append_l49_1[0] ;
-           &__realloc_str_append_l49_2[0] }}
+        {{ NULL ; &__realloc_str_append_l55[0] ;
+           &__realloc_str_append_l55_0[0] ; &__realloc_str_append_l55_1[0] ;
+           &__realloc_str_append_l55_2[0] }}
   to_len ∈ {0; 3}
   to ∈
-    {{ NULL ; &__realloc_str_append_l49[0] ; &__realloc_str_append_l49_0[0] ;
-       &__realloc_str_append_l49_1[0] ; &__realloc_str_append_l49_2[0] }}
-  __realloc_str_append_l49[0] ∈ {98}
+    {{ NULL ; &__realloc_str_append_l55[0] ; &__realloc_str_append_l55_0[0] ;
+       &__realloc_str_append_l55_1[0] ; &__realloc_str_append_l55_2[0] }}
+  __realloc_str_append_l55[0] ∈ {98}
                           [1] ∈ {108}
                           [2] ∈ {97}
                           [3] ∈ {0}
-  __realloc_str_append_l49_0[0] ∈ {98}
+  __realloc_str_append_l55_0[0] ∈ {98}
                             [1] ∈ {108}
                             [2] ∈ {97}
                             [3] ∈ {0}
-  __realloc_str_append_l49_1[0] ∈ {98}
+  __realloc_str_append_l55_1[0] ∈ {98}
                             [1] ∈ {108}
                             [2] ∈ {97}
                             [3] ∈ {0}
-  __realloc_str_append_l49_2[0] ∈ {98}
+  __realloc_str_append_l55_2[0] ∈ {98}
                             [1] ∈ {108}
                             [2] ∈ {97}
                             [3] ∈ {0}
 [eva:final-states] Values at end of function argz_next:
   entry ∈
        {{ NULL ;
-          &__realloc_argz_append_l271_1{[2], [4], [7], [10], [13], [16],
+          &__realloc_argz_append_l277_1{[2], [4], [7], [10], [13], [16],
                                         [18], [21]} ;
-          &__realloc_argz_append_l271_7{[2], [5]} }}
+          &__realloc_argz_append_l277_7{[2], [5]} }}
   __retres ∈
           {{ NULL ;
-             &__realloc_argz_append_l271_1{[0], [2], [4], [7], [10], [13],
+             &__realloc_argz_append_l277_1{[0], [2], [4], [7], [10], [13],
                                            [16], [18]} ;
-             &__realloc_argz_append_l271_7{[0], [2], [5]} }}
+             &__realloc_argz_append_l277_7{[0], [2], [5]} }}
 [eva:final-states] Values at end of function argz_add:
   dst ∈
-     {{ &__realloc_argz_append_l271_2[0] ; &__realloc_argz_append_l271_3[0] ;
-        &__realloc_argz_append_l271_4[0] ; &__realloc_argz_append_l271_5[0] ;
-        &__realloc_argz_append_l271_6[0] ;
-        &__realloc_argz_append_l271_7[0] }}
+     {{ &__realloc_argz_append_l277_2[0] ; &__realloc_argz_append_l277_3[0] ;
+        &__realloc_argz_append_l277_4[0] ; &__realloc_argz_append_l277_5[0] ;
+        &__realloc_argz_append_l277_6[0] ;
+        &__realloc_argz_append_l277_7[0] }}
   dst_len ∈ {7; 11; 14; 17; 19; 23}
   argz ∈
-      {{ &__malloc_argz_create_sep_l202[0] ; &__realloc_argz_append_l271[0] ;
-         &__realloc_argz_append_l271_0[0] ;
-         &__realloc_argz_append_l271_1[0] ; &__realloc_argz_insert_l157[0] ;
-         &__realloc_argz_append_l271_8[0] }}
+      {{ &__malloc_argz_create_sep_l208[0] ; &__realloc_argz_append_l277[0] ;
+         &__realloc_argz_append_l277_0[0] ;
+         &__realloc_argz_append_l277_1[0] ; &__realloc_argz_insert_l163[0] ;
+         &__realloc_argz_append_l277_8[0] }}
   len ∈ {7; 10; 18; 21; 24}
-  __realloc_argz_append_l271[0] ∈ {97}
+  __realloc_argz_append_l277[0] ∈ {97}
                             [1] ∈ {0}
                             [2] ∈ {98}
                             [3] ∈ {0}
@@ -916,7 +919,7 @@
                             [7] ∈ {101}
                             [8] ∈ {102}
                             [9] ∈ {0}
-  __realloc_argz_append_l271_1[0] ∈ {97}
+  __realloc_argz_append_l277_1[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -937,7 +940,7 @@
                               [18] ∈ {101}
                               [19] ∈ {102}
                               [20] ∈ {0}
-  __realloc_argz_append_l271_3[0] ∈ {97}
+  __realloc_argz_append_l277_3[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -948,7 +951,7 @@
                               [8] ∈ {108}
                               [9] ∈ {97}
                               [10] ∈ {0}
-  __realloc_argz_append_l271_4[0] ∈ {97}
+  __realloc_argz_append_l277_4[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -962,7 +965,7 @@
                               [11] ∈ {103}
                               [12] ∈ {104}
                               [13] ∈ {0}
-  __realloc_argz_append_l271_5[0] ∈ {97}
+  __realloc_argz_append_l277_5[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -979,7 +982,7 @@
                               [14] ∈ {105}
                               [15] ∈ {106}
                               [16] ∈ {0}
-  __realloc_argz_append_l271_6[0] ∈ {97}
+  __realloc_argz_append_l277_6[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -998,7 +1001,7 @@
                               [16] ∈ {0}
                               [17] ∈ {107}
                               [18] ∈ {0}
-  __realloc_argz_append_l271_7[0] ∈ {97}
+  __realloc_argz_append_l277_7[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
@@ -1021,7 +1024,7 @@
                               [20] ∈ {108}
                               [21] ∈ {97}
                               [22] ∈ {0}
-  __realloc_argz_append_l271_8[0] ∈ {109}
+  __realloc_argz_append_l277_8[0] ∈ {109}
                               [1] ∈ {110}
                               [2] ∈ {111}
                               [3] ∈ {0}
@@ -1046,10 +1049,10 @@
                               [23] ∈ {0}
 [eva:final-states] Values at end of function argz_add_sep:
   nlen ∈ {6}
-  argz ∈ {{ NULL ; &__realloc_argz_add_sep_l293[0] }}
+  argz ∈ {{ NULL ; &__realloc_argz_add_sep_l299[0] }}
   len ∈ {10; 16}
   __retres ∈ {0; 12}
-  __realloc_argz_add_sep_l293[0] ∈ {97}
+  __realloc_argz_add_sep_l299[0] ∈ {97}
                              [1] ∈ {0}
                              [2] ∈ {98}
                              [3] ∈ {0}
@@ -1067,8 +1070,8 @@
                              [15] ∈ {0}
 [eva:final-states] Values at end of function argz_count:
   argz ∈
-      {{ &__malloc_argz_create_sep_l202[7] ;
-         &__realloc_argz_add_sep_l293[16] }}
+      {{ &__malloc_argz_create_sep_l208[7] ;
+         &__realloc_argz_add_sep_l299[16] }}
   len ∈ {0}
   count ∈ {3; 6}
 [eva:final-states] Values at end of function argz_create:
@@ -1076,11 +1079,11 @@
   argc ∈ {3}
   tlen ∈ {13}
   ap ∈ {{ &argv[3] }} or UNINITIALIZED
-  p ∈ {{ &__malloc_argz_create_l245[13] }} or UNINITIALIZED
-  argz ∈ {{ NULL ; &__malloc_argz_create_l245[0] }}
+  p ∈ {{ &__malloc_argz_create_l251[13] }} or UNINITIALIZED
+  argz ∈ {{ NULL ; &__malloc_argz_create_l251[0] }}
   len ∈ {13} or UNINITIALIZED
   __retres ∈ {0; 12}
-  __malloc_argz_create_l245[0] ∈ {116}
+  __malloc_argz_create_l251[0] ∈ {116}
                            [1] ∈ {104}
                            [2] ∈ {105}
                            [3] ∈ {115}
@@ -1096,10 +1099,10 @@
 [eva:final-states] Values at end of function argz_create_sep:
   __fc_heap_status ∈ [--..--]
   nlen ∈ {7; 8}
-  argz ∈ {{ NULL ; &__malloc_argz_create_sep_l202[0] }}
+  argz ∈ {{ NULL ; &__malloc_argz_create_sep_l208[0] }}
   len ∈ {7; 13}
   __retres ∈ {0; 12}
-  __malloc_argz_create_sep_l202[0] ∈ {97}
+  __malloc_argz_create_sep_l208[0] ∈ {97}
                                [1] ∈ {0}
                                [2] ∈ {98}
                                [3] ∈ {0}
@@ -1109,7 +1112,7 @@
                                [7] ∈ UNINITIALIZED
 [eva:final-states] Values at end of function argz_delete:
   len ∈ {17; 21}
-  __realloc_argz_append_l271_7[0] ∈ {97}
+  __realloc_argz_append_l277_7[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {99}
                               [3] ∈ {100}
@@ -1134,15 +1137,15 @@
                               [22] ∈ {0}
 [eva:final-states] Values at end of function argz_insert:
   before ∈
-        {{ NULL ; &__realloc_argz_append_l271_7[0] ;
-           &__realloc_argz_insert_l157[0] }}
+        {{ NULL ; &__realloc_argz_append_l277_7[0] ;
+           &__realloc_argz_insert_l163[0] }}
   argz ∈
-      {{ &__realloc_argz_append_l271_7[0] ; &__realloc_argz_insert_l157[0] ;
-         &__realloc_argz_append_l271_8[0] }}
+      {{ &__realloc_argz_append_l277_7[0] ; &__realloc_argz_insert_l163[0] ;
+         &__realloc_argz_append_l277_8[0] }}
   len ∈ {17; 21; 24}
-  p ∈ {{ &__realloc_argz_append_l271_7[0] }} or ESCAPINGADDR
+  p ∈ {{ &__realloc_argz_append_l277_7[0] }} or ESCAPINGADDR
   __retres ∈ {0; 12}
-  __realloc_argz_insert_l157[0] ∈ {109}
+  __realloc_argz_insert_l163[0] ∈ {109}
                             [1] ∈ {110}
                             [2] ∈ {111}
                             [3] ∈ {0}
@@ -1163,7 +1166,7 @@
                             [18] ∈ {108}
                             [19] ∈ {97}
                             [20] ∈ {0}
-  __realloc_argz_append_l271_8[0] ∈ {109}
+  __realloc_argz_append_l277_8[0] ∈ {109}
                               [1] ∈ {110}
                               [2] ∈ {111}
                               [3] ∈ {0}
@@ -1190,22 +1193,22 @@
   __fc_errno ∈ [--..--]
   __fc_heap_status ∈ [--..--]
   l ∈ {0}
-  p ∈ {{ NULL ; &__malloc_strndup_l336 ; &__malloc_strndup_l336_0 }}
-  __retres ∈ {{ NULL ; &__malloc_strndup_l336 ; &__malloc_strndup_l336_0 }}
-  __malloc_strndup_l336 ∈ {0}
-  __malloc_strndup_l336_0 ∈ {0}
+  p ∈ {{ NULL ; &__malloc_strndup_l339 ; &__malloc_strndup_l339_0 }}
+  __retres ∈ {{ NULL ; &__malloc_strndup_l339 ; &__malloc_strndup_l339_0 }}
+  __malloc_strndup_l339 ∈ {0}
+  __malloc_strndup_l339_0 ∈ {0}
 [eva:final-states] Values at end of function strstr:
-  __retres ∈ {{ NULL ; &__realloc_argz_append_l271_1{[7], [18]} }}
+  __retres ∈ {{ NULL ; &__realloc_argz_append_l277_1{[7], [18]} }}
 [eva:final-states] Values at end of function argz_replace:
   __fc_errno ∈ [--..--]
   __fc_heap_status ∈ [--..--]
   er ∈ {0; 12}
   argz ∈
-      {{ &__realloc_argz_append_l271_1[0] ;
-         &__realloc_argz_append_l271_7[0] }}
+      {{ &__realloc_argz_append_l277_1[0] ;
+         &__realloc_argz_append_l277_7[0] }}
   len ∈ {21; 23}
   replace_count ∈ {2; 3}
-  __realloc_argz_append_l271_7[0] ∈ {97}
+  __realloc_argz_append_l277_7[0] ∈ {97}
                               [1] ∈ {0}
                               [2] ∈ {98}
                               [3] ∈ {0}
diff --git a/tests/libc/oracle/coverage.res.oracle b/tests/libc/oracle/coverage.res.oracle
index b53e4177747716d5b42c5a65a0cddd47dcb12058..1b980123959c5fa59f0c4054c99e9d4a83f40544 100644
--- a/tests/libc/oracle/coverage.res.oracle
+++ b/tests/libc/oracle/coverage.res.oracle
@@ -28,7 +28,7 @@
   main: 4 stmts out of 4 (100.0%)
 [metrics] Eva coverage statistics
   =======================
-  Syntactically reachable functions = 2 (out of 99)
+  Syntactically reachable functions = 2 (out of 103)
   Semantically reached functions = 2
   Coverage estimation = 100.0%
 [metrics] Statements analyzed by Eva
diff --git a/tests/libc/oracle/fc_builtin_c.res.oracle b/tests/libc/oracle/fc_builtin_c.res.oracle
index 79f1355c8e22c72b66f9ff2c8d652848fbd4ca5a..e64a6da01dd2bb7919cd7a38465ccde30fd12851 100644
--- a/tests/libc/oracle/fc_builtin_c.res.oracle
+++ b/tests/libc/oracle/fc_builtin_c.res.oracle
@@ -7,7 +7,7 @@
 [eva] computing for function Frama_C_interval <- main.
   Called from fc_builtin_c.c:8.
 [eva] computing for function Frama_C_update_entropy <- Frama_C_interval <- main.
-  Called from FRAMAC_SHARE/libc/__fc_builtin.c:66.
+  Called from FRAMAC_SHARE/libc/__fc_builtin.c:82.
 [eva] Recording results for Frama_C_update_entropy
 [eva] Done for function Frama_C_update_entropy
 [eva] Recording results for Frama_C_interval
@@ -18,8 +18,8 @@
 [eva] computing for function Frama_C_char_interval <- main.
   Called from fc_builtin_c.c:12.
 [eva] computing for function Frama_C_interval <- Frama_C_char_interval <- main.
-  Called from FRAMAC_SHARE/libc/__fc_builtin.c:77.
-[eva] FRAMAC_SHARE/libc/__fc_builtin.c:66: 
+  Called from FRAMAC_SHARE/libc/__fc_builtin.c:93.
+[eva] FRAMAC_SHARE/libc/__fc_builtin.c:82: 
   Reusing old results for call to Frama_C_update_entropy
 [eva] Recording results for Frama_C_interval
 [eva] Done for function Frama_C_interval
@@ -30,7 +30,7 @@
   assertion 'sampling,unknown' got status unknown.
 [eva] computing for function Frama_C_unsigned_int_interval <- main.
   Called from fc_builtin_c.c:16.
-[eva] FRAMAC_SHARE/libc/__fc_builtin.c:100: 
+[eva] FRAMAC_SHARE/libc/__fc_builtin.c:133: 
   Reusing old results for call to Frama_C_update_entropy
 [eva] Recording results for Frama_C_unsigned_int_interval
 [eva] Done for function Frama_C_unsigned_int_interval
@@ -39,7 +39,7 @@
   assertion 'sampling,unknown' got status unknown.
 [eva] computing for function Frama_C_float_interval <- main.
   Called from fc_builtin_c.c:20.
-[eva] FRAMAC_SHARE/libc/__fc_builtin.c:82: 
+[eva] FRAMAC_SHARE/libc/__fc_builtin.c:103: 
   Reusing old results for call to Frama_C_update_entropy
 [eva] Recording results for Frama_C_float_interval
 [eva] Done for function Frama_C_float_interval
@@ -48,7 +48,7 @@
   assertion 'sampling,unknown' got status unknown.
 [eva] computing for function Frama_C_double_interval <- main.
   Called from fc_builtin_c.c:25.
-[eva] FRAMAC_SHARE/libc/__fc_builtin.c:88: 
+[eva] FRAMAC_SHARE/libc/__fc_builtin.c:109: 
   Reusing old results for call to Frama_C_update_entropy
 [eva] Recording results for Frama_C_double_interval
 [eva] Done for function Frama_C_double_interval
@@ -57,7 +57,7 @@
   assertion 'sampling,unknown' got status unknown.
 [eva] computing for function Frama_C_long_interval <- main.
   Called from fc_builtin_c.c:29.
-[eva] FRAMAC_SHARE/libc/__fc_builtin.c:112: 
+[eva] FRAMAC_SHARE/libc/__fc_builtin.c:145: 
   Reusing old results for call to Frama_C_update_entropy
 [eva] Recording results for Frama_C_long_interval
 [eva] Done for function Frama_C_long_interval
@@ -66,7 +66,7 @@
   assertion 'sampling,unknown' got status unknown.
 [eva] computing for function Frama_C_unsigned_long_interval <- main.
   Called from fc_builtin_c.c:34.
-[eva] FRAMAC_SHARE/libc/__fc_builtin.c:124: 
+[eva] FRAMAC_SHARE/libc/__fc_builtin.c:157: 
   Reusing old results for call to Frama_C_update_entropy
 [eva] Recording results for Frama_C_unsigned_long_interval
 [eva] Done for function Frama_C_unsigned_long_interval
diff --git a/tests/libc/oracle/fc_libc.0.res.oracle b/tests/libc/oracle/fc_libc.0.res.oracle
index f1b5fe1e343d056445dc05e361a8f5f6d73093c9..1c30bf3978c0942907017a876cba68216a01456d 100644
--- a/tests/libc/oracle/fc_libc.0.res.oracle
+++ b/tests/libc/oracle/fc_libc.0.res.oracle
@@ -16,7 +16,6 @@
   
 /* Generated by Frama-C */
 #include "__fc_builtin.c"
-#include "__fc_builtin.h"
 #include "__fc_define_fd_set_t.h"
 #include "__fc_define_timeval.h"
 #include "__fc_gcc_builtins.h"
diff --git a/tests/libc/oracle/fc_libc.1.res.oracle b/tests/libc/oracle/fc_libc.1.res.oracle
index b5874f1ef25baa4b60527857038a1a5052e3bc20..4b450b8cdfee446d12483317f7b9bba1266f42c8 100644
--- a/tests/libc/oracle/fc_libc.1.res.oracle
+++ b/tests/libc/oracle/fc_libc.1.res.oracle
@@ -1,7 +1,16 @@
 [kernel] Parsing fc_libc.c (with preprocessing)
 /* Generated by Frama-C */
-typedef unsigned int size_t;
 typedef long wchar_t;
+typedef unsigned int wint_t;
+typedef int ptrdiff_t;
+typedef unsigned int size_t;
+typedef int ssize_t;
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned int uintptr_t;
+typedef long long intmax_t;
+typedef unsigned long long uintmax_t;
 struct __fc_div_t {
    int quot ;
    int rem ;
@@ -17,8 +26,6 @@ struct __fc_lldiv_t {
    long long rem ;
 };
 typedef struct __fc_lldiv_t lldiv_t;
-typedef int ptrdiff_t;
-typedef int ssize_t;
 typedef int error_t;
 struct __fc_fenv_t {
    unsigned short __control_word ;
@@ -36,6 +43,7 @@ struct __fc_fenv_t {
    unsigned short __unused5 ;
 };
 typedef struct __fc_fenv_t fenv_t;
+typedef unsigned int fexcept_t;
 struct __fc_glob_t {
    unsigned int gl_pathc ;
    char **gl_pathv ;
@@ -48,11 +56,6 @@ struct __fc_glob_t {
    int (*gl_stat)(char const * restrict , void * restrict ) ;
 };
 typedef struct __fc_glob_t glob_t;
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned int uintptr_t;
-typedef long long intmax_t;
 struct __fc_imaxdiv_t {
    intmax_t quot ;
    intmax_t rem ;
@@ -112,10 +115,7 @@ struct __fc_pthread_mutexattr_t {
    int _fc ;
 };
 typedef struct __fc_pthread_mutexattr_t pthread_mutexattr_t;
-struct __fc_pthread_t {
-   unsigned long _fc ;
-};
-typedef struct __fc_pthread_t pthread_t;
+typedef unsigned long pthread_t;
 typedef int pid_t;
 typedef unsigned int gid_t;
 typedef unsigned int uid_t;
@@ -306,6 +306,17 @@ typedef unsigned long long atomic_ullong;
 typedef void * const * va_list;
 typedef unsigned int id_t;
 typedef int suseconds_t;
+enum length_modifier {
+    NONE = 0,
+    HH = 1,
+    H = 2,
+    L = 3,
+    LL = 4,
+    J = 5,
+    Z = 6,
+    T = 7,
+    UPPER_L = 8
+};
 typedef unsigned int useconds_t;
 struct dirent {
    ino_t d_ino ;
@@ -349,12 +360,12 @@ struct pollfd {
    short revents ;
 };
 typedef unsigned long nfds_t;
-typedef int jmp_buf[5];
-struct __fc_sigjmp_buf {
-   jmp_buf buf ;
+typedef int __jmp_buf[8];
+struct __jmp_buf_tag {
+   __jmp_buf __jmpbuf ;
+   int saved ;
    sigset_t sigs ;
 };
-typedef struct __fc_sigjmp_buf sigjmp_buf;
 struct __fc_code {
    char const *c_name ;
    int c_val ;
@@ -400,9 +411,24 @@ struct termios {
    tcflag_t c_lflag ;
    cc_t c_cc[32] ;
 };
+/*@ ghost extern int __fc_heap_status; */
+
+/*@
+axiomatic dynamic_allocation {
+  predicate is_allocable{L}(ℤ n) 
+    reads __fc_heap_status;
+  
+  axiom never_allocable{L}:
+    ∀ ℤ i; i < 0 ∨ i > 4294967295U ⇒ ¬is_allocable(i);
+  
+  }
+ */
 int volatile Frama_C_entropy_source __attribute__((__unused__));
  __attribute__((__FC_BUILTIN__)) void Frama_C_make_unknown(char *p, size_t l);
 
+ __attribute__((__FC_BUILTIN__)) void Frama_C_make_unknown_wchar(wchar_t *p,
+                                                                 size_t l);
+
  __attribute__((__FC_BUILTIN__)) int Frama_C_nondet(int a, int b);
 
  __attribute__((__FC_BUILTIN__)) void *Frama_C_nondet_ptr(void *a, void *b);
@@ -415,17 +441,58 @@ int volatile Frama_C_entropy_source __attribute__((__unused__));
  __attribute__((__FC_BUILTIN__)) char Frama_C_char_interval(char min,
                                                             char max);
 
+ __attribute__((__FC_BUILTIN__)) unsigned short Frama_C_unsigned_short_interval
+(unsigned short min, unsigned short max);
+
+ __attribute__((__FC_BUILTIN__)) short Frama_C_short_interval(short min,
+                                                              short max);
+
  __attribute__((__FC_BUILTIN__)) unsigned int Frama_C_unsigned_int_interval
 (unsigned int min, unsigned int max);
 
+ __attribute__((__FC_BUILTIN__)) unsigned long Frama_C_unsigned_long_interval
+(unsigned long min, unsigned long max);
+
  __attribute__((__FC_BUILTIN__)) long Frama_C_long_interval(long min,
                                                             long max);
 
+ __attribute__((__FC_BUILTIN__)) unsigned long long Frama_C_unsigned_long_long_interval
+(unsigned long long min, unsigned long long max);
+
+ __attribute__((__FC_BUILTIN__)) long long Frama_C_long_long_interval
+(long long min, long long max);
+
+ __attribute__((__FC_BUILTIN__)) size_t Frama_C_size_t_interval(size_t min,
+                                                                size_t max);
+
+ __attribute__((__FC_BUILTIN__)) intmax_t Frama_C_intmax_t_interval(intmax_t min,
+                                                                    intmax_t max);
+
+ __attribute__((__FC_BUILTIN__)) uintmax_t Frama_C_uintmax_t_interval
+(uintmax_t min, uintmax_t max);
+
+ __attribute__((__FC_BUILTIN__)) ptrdiff_t Frama_C_ptrdiff_t_interval
+(ptrdiff_t min, ptrdiff_t max);
+
+ __attribute__((__FC_BUILTIN__)) wint_t Frama_C_wint_t_interval(wint_t min,
+                                                                wint_t max);
+
+ __attribute__((__FC_BUILTIN__)) double Frama_C_double_interval(double min,
+                                                                double max);
+
  __attribute__((__noreturn__, __FC_BUILTIN__)) void Frama_C_abort(void);
 
+unsigned short volatile __fc_unsigned_short_entropy;
 unsigned int volatile __fc_unsigned_int_entropy;
 long volatile __fc_long_entropy;
 unsigned long volatile __fc_unsigned_long_entropy;
+long long volatile __fc_long_long_entropy;
+unsigned long long volatile __fc_unsigned_long_long_entropy;
+size_t volatile __fc_size_t_entropy;
+intmax_t volatile __fc_intmax_t_entropy;
+uintmax_t volatile __fc_uintmax_t_entropy;
+ptrdiff_t volatile __fc_ptrdiff_t_entropy;
+wint_t volatile __fc_wint_t_entropy;
 /*@ assigns Frama_C_entropy_source;
     assigns Frama_C_entropy_source \from Frama_C_entropy_source;
  */
@@ -455,6 +522,27 @@ void Frama_C_make_unknown(char *p, size_t l)
   return;
 }
 
+/*@ requires valid_p: \valid(p + (0 .. l - 1));
+    ensures initialization: \initialized(\old(p) + (0 .. \old(l) - 1));
+    assigns *(p + (0 .. l - 1)), Frama_C_entropy_source;
+    assigns *(p + (0 .. l - 1)) \from Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) void Frama_C_make_unknown_wchar(wchar_t *p,
+                                                                 size_t l);
+void Frama_C_make_unknown_wchar(wchar_t *p, size_t l)
+{
+  Frama_C_update_entropy();
+  {
+    size_t i = (size_t)0;
+    while (i < l) {
+      *(p + i) = (wchar_t)Frama_C_entropy_source;
+      i ++;
+    }
+  }
+  return;
+}
+
 /*@ ensures result_a_or_b: \result ≡ \old(a) ∨ \result ≡ \old(b);
     assigns \result, Frama_C_entropy_source;
     assigns \result \from a, b, Frama_C_entropy_source;
@@ -519,6 +607,54 @@ char Frama_C_char_interval(char min, char max)
   return __retres;
 }
 
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) short Frama_C_short_interval(short min,
+                                                              short max);
+short Frama_C_short_interval(short min, short max)
+{
+  short __retres;
+  int tmp;
+  tmp = Frama_C_interval((int)min,(int)max);
+  __retres = (short)tmp;
+  return __retres;
+}
+
+/*@ assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+    
+    behavior finite:
+      assumes finite: \is_finite(min) ∧ \is_finite(max);
+      requires order: min ≤ max;
+      ensures
+        result_bounded:
+          \is_finite(\result) ∧ \old(min) ≤ \result ≤ \old(max);
+    
+    behavior infinite_not_nan:
+      assumes infinite: \is_infinite(min) ∨ \is_infinite(max);
+      assumes not_nan: ¬\is_NaN(min) ∧ ¬\is_NaN(max);
+      requires order: min ≤ max;
+      ensures
+        result_bounded:
+          ¬\is_NaN(\result) ∧ \old(min) ≤ \result ≤ \old(max);
+    
+    disjoint behaviors infinite_not_nan, finite;
+ */
+ __attribute__((__FC_BUILTIN__)) double Frama_C_double_interval(double min,
+                                                                double max);
+double Frama_C_double_interval(double min, double max)
+{
+  double tmp;
+  Frama_C_update_entropy();
+  if (Frama_C_entropy_source) tmp = min; else tmp = max;
+  return tmp;
+}
+
 /*@ requires order: min ≤ max;
     ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
     assigns \result, Frama_C_entropy_source;
@@ -537,6 +673,27 @@ unsigned char Frama_C_unsigned_char_interval(unsigned char min,
   return __retres;
 }
 
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) unsigned short Frama_C_unsigned_short_interval
+(unsigned short min, unsigned short max);
+unsigned short Frama_C_unsigned_short_interval(unsigned short min,
+                                               unsigned short max)
+{
+  unsigned short r;
+  unsigned short aux;
+  Frama_C_update_entropy();
+  aux = __fc_unsigned_short_entropy;
+  if ((int)aux >= (int)min) 
+    if ((int)aux <= (int)max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
 /*@ requires order: min ≤ max;
     ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
     assigns \result, Frama_C_entropy_source;
@@ -577,6 +734,173 @@ long Frama_C_long_interval(long min, long max)
   return r;
 }
 
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) unsigned long Frama_C_unsigned_long_interval
+(unsigned long min, unsigned long max);
+unsigned long Frama_C_unsigned_long_interval(unsigned long min,
+                                             unsigned long max)
+{
+  unsigned long r;
+  unsigned long aux;
+  Frama_C_update_entropy();
+  aux = __fc_unsigned_long_entropy;
+  if (aux >= min) 
+    if (aux <= max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) long long Frama_C_long_long_interval
+(long long min, long long max);
+long long Frama_C_long_long_interval(long long min, long long max)
+{
+  long long r;
+  long long aux;
+  Frama_C_update_entropy();
+  aux = __fc_long_long_entropy;
+  if (aux >= min) 
+    if (aux <= max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) unsigned long long Frama_C_unsigned_long_long_interval
+(unsigned long long min, unsigned long long max);
+unsigned long long Frama_C_unsigned_long_long_interval(unsigned long long min,
+                                                       unsigned long long max)
+{
+  unsigned long long r;
+  unsigned long long aux;
+  Frama_C_update_entropy();
+  aux = __fc_unsigned_long_long_entropy;
+  if (aux >= min) 
+    if (aux <= max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) size_t Frama_C_size_t_interval(size_t min,
+                                                                size_t max);
+size_t Frama_C_size_t_interval(size_t min, size_t max)
+{
+  size_t r;
+  size_t aux;
+  Frama_C_update_entropy();
+  aux = __fc_size_t_entropy;
+  if (aux >= min) 
+    if (aux <= max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) intmax_t Frama_C_intmax_t_interval(intmax_t min,
+                                                                    intmax_t max);
+intmax_t Frama_C_intmax_t_interval(intmax_t min, intmax_t max)
+{
+  intmax_t r;
+  intmax_t aux;
+  Frama_C_update_entropy();
+  aux = __fc_intmax_t_entropy;
+  if (aux >= min) 
+    if (aux <= max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) uintmax_t Frama_C_uintmax_t_interval
+(uintmax_t min, uintmax_t max);
+uintmax_t Frama_C_uintmax_t_interval(uintmax_t min, uintmax_t max)
+{
+  uintmax_t r;
+  uintmax_t aux;
+  Frama_C_update_entropy();
+  aux = __fc_uintmax_t_entropy;
+  if (aux >= min) 
+    if (aux <= max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) ptrdiff_t Frama_C_ptrdiff_t_interval
+(ptrdiff_t min, ptrdiff_t max);
+ptrdiff_t Frama_C_ptrdiff_t_interval(ptrdiff_t min, ptrdiff_t max)
+{
+  ptrdiff_t r;
+  ptrdiff_t aux;
+  Frama_C_update_entropy();
+  aux = __fc_ptrdiff_t_entropy;
+  if (aux >= min) 
+    if (aux <= max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
+/*@ requires order: min ≤ max;
+    ensures result_bounded: \old(min) ≤ \result ≤ \old(max);
+    assigns \result, Frama_C_entropy_source;
+    assigns \result \from min, max, Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+ __attribute__((__FC_BUILTIN__)) wint_t Frama_C_wint_t_interval(wint_t min,
+                                                                wint_t max);
+wint_t Frama_C_wint_t_interval(wint_t min, wint_t max)
+{
+  wint_t r;
+  wint_t aux;
+  Frama_C_update_entropy();
+  aux = __fc_wint_t_entropy;
+  if (aux >= min) 
+    if (aux <= max) r = aux; else r = min;
+  else r = min;
+  return r;
+}
+
+/*@ terminates \false;
+    ensures never_terminates: \false;
+    exits always_exits: \true;
+    assigns \nothing;
+ */
 extern  __attribute__((__noreturn__)) void __builtin_abort(void);
 
 /*@ terminates \false;
@@ -591,18 +915,6 @@ void Frama_C_abort(void)
 
 int __fc_errno;
 
-/*@ ghost extern int __fc_heap_status; */
-
-/*@
-axiomatic dynamic_allocation {
-  predicate is_allocable{L}(ℤ n) 
-    reads __fc_heap_status;
-  
-  axiom never_allocable{L}:
-    ∀ ℤ i; i < 0 ∨ i > 4294967295U ⇒ ¬is_allocable(i);
-  
-  }
- */
 /*@
 axiomatic MemCmp {
   logic ℤ memcmp{L1, L2}(char *s1, char *s2, ℤ n) 
@@ -869,10 +1181,6 @@ axiomatic WcsChr {
   
   }
  */
-/*@ logic ℤ minimum(ℤ i, ℤ j) = i < j? i: j;
- */
-/*@ logic ℤ maximum(ℤ i, ℤ j) = i < j? j: i;
- */
 /*@
 predicate valid_string{L}(char *s) =
   0 ≤ strlen(s) ∧ \valid(s + (0 .. strlen(s)));
@@ -905,50 +1213,64 @@ predicate valid_read_nwstring{L}(wchar_t *s, ℤ n) =
 /*@
 predicate valid_wstring_or_null{L}(wchar_t *s) =
   s ≡ \null ∨ valid_wstring(s);
+ */
+/*@ logic ℤ strnlen{L}(char *s, ℤ n) = \at(\min(strlen(s), n),L);
 
 */
-/*@ requires valid_nptr: \valid_read(nptr);
+/*@ requires valid_nptr: valid_read_string(nptr);
     assigns \result;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
  */
 extern double atof(char const *nptr);
 
 int atoi(char const *p);
 
-/*@ requires valid_nptr: \valid_read(nptr);
+/*@ requires valid_nptr: valid_read_string(nptr);
     assigns \result;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
  */
 extern long atol(char const *nptr);
 
-/*@ requires valid_nptr: \valid_read(nptr);
+/*@ requires valid_nptr: valid_read_string(nptr);
     assigns \result;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
  */
 extern long long atoll(char const *nptr);
 
 /*@ requires valid_string_nptr: valid_read_string(nptr);
     requires separation: \separated(nptr, endptr);
     assigns \result, *endptr;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
     assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
+      \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+            (indirect: endptr);
     
     behavior no_storage:
       assumes null_endptr: endptr ≡ \null;
       assigns \result;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns \result
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
     
     behavior store_position:
       assumes nonnull_endptr: endptr ≢ \null;
       requires valid_endptr: \valid(endptr);
       ensures initialization: \initialized(\old(endptr));
       ensures valid_endptr_content: \valid_read(*\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      ensures
+        endptr_same_base:
+          \base_addr(*\old(endptr)) ≡ \base_addr(\old(nptr));
       assigns \result, *endptr;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns \result
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
       assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
+        \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+              (indirect: endptr);
     
     complete behaviors store_position, no_storage;
     disjoint behaviors store_position, no_storage;
@@ -958,23 +1280,31 @@ extern double strtod(char const * restrict nptr, char ** restrict endptr);
 /*@ requires valid_string_nptr: valid_read_string(nptr);
     requires separation: \separated(nptr, endptr);
     assigns \result, *endptr;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
     assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
+      \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+            (indirect: endptr);
     
     behavior no_storage:
       assumes null_endptr: endptr ≡ \null;
       assigns \result;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns \result
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
     
     behavior store_position:
       assumes nonnull_endptr: endptr ≢ \null;
       requires valid_endptr: \valid(endptr);
       ensures initialization: \initialized(\old(endptr));
       ensures valid_endptr_content: \valid_read(*\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      ensures
+        endptr_same_base:
+          \base_addr(*\old(endptr)) ≡ \base_addr(\old(nptr));
       assigns \result, *endptr;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns \result
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
       assigns *endptr
         \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
     
@@ -986,25 +1316,34 @@ extern float strtof(char const * restrict nptr, char ** restrict endptr);
 /*@ requires valid_string_nptr: valid_read_string(nptr);
     requires separation: \separated(nptr, endptr);
     assigns \result, *endptr;
-    assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+    assigns \result
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
     assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
+      \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+            (indirect: endptr);
     
     behavior no_storage:
       assumes null_endptr: endptr ≡ \null;
       assigns \result;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns \result
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
     
     behavior store_position:
       assumes nonnull_endptr: endptr ≢ \null;
       requires valid_endptr: \valid(endptr);
       ensures initialization: \initialized(\old(endptr));
       ensures valid_endptr_content: \valid_read(*\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      ensures
+        endptr_same_base:
+          \base_addr(*\old(endptr)) ≡ \base_addr(\old(nptr));
       assigns \result, *endptr;
-      assigns \result \from (indirect: nptr), (indirect: *(nptr + (0 ..)));
+      assigns \result
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr))));
       assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr);
+        \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+              (indirect: endptr);
     
     complete behaviors store_position, no_storage;
     disjoint behaviors store_position, no_storage;
@@ -1017,16 +1356,18 @@ extern long double strtold(char const * restrict nptr,
     requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
     assigns \result, *endptr;
     assigns \result
-      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
             (indirect: base);
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+            (indirect: endptr), (indirect: base);
     
     behavior no_storage:
       assumes null_endptr: endptr ≡ \null;
       assigns \result;
       assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
               (indirect: base);
     
     behavior store_position:
@@ -1034,14 +1375,17 @@ extern long double strtold(char const * restrict nptr,
       requires valid_endptr: \valid(endptr);
       ensures initialization: \initialized(\old(endptr));
       ensures valid_endptr_content: \valid_read(*\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      ensures
+        endptr_same_base:
+          \base_addr(*\old(endptr)) ≡ \base_addr(\old(nptr));
       assigns \result, *endptr;
       assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
               (indirect: base);
       assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-              (indirect: base);
+        \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+              (indirect: endptr), (indirect: base);
     
     complete behaviors store_position, no_storage;
     disjoint behaviors store_position, no_storage;
@@ -1054,16 +1398,18 @@ extern long strtol(char const * restrict nptr, char ** restrict endptr,
     requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
     assigns \result, *endptr;
     assigns \result
-      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
             (indirect: base);
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+            (indirect: endptr), (indirect: base);
     
     behavior no_storage:
       assumes null_endptr: endptr ≡ \null;
       assigns \result;
       assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
               (indirect: base);
     
     behavior store_position:
@@ -1071,14 +1417,17 @@ extern long strtol(char const * restrict nptr, char ** restrict endptr,
       requires valid_endptr: \valid(endptr);
       ensures initialization: \initialized(\old(endptr));
       ensures valid_endptr_content: \valid_read(*\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      ensures
+        endptr_same_base:
+          \base_addr(*\old(endptr)) ≡ \base_addr(\old(nptr));
       assigns \result, *endptr;
       assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
               (indirect: base);
       assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-              (indirect: base);
+        \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+              (indirect: endptr), (indirect: base);
     
     complete behaviors store_position, no_storage;
     disjoint behaviors store_position, no_storage;
@@ -1091,16 +1440,18 @@ extern long long strtoll(char const * restrict nptr, char ** restrict endptr,
     requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
     assigns \result, *endptr;
     assigns \result
-      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
             (indirect: base);
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+            (indirect: endptr), (indirect: base);
     
     behavior no_storage:
       assumes null_endptr: endptr ≡ \null;
       assigns \result;
       assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
               (indirect: base);
     
     behavior store_position:
@@ -1108,14 +1459,17 @@ extern long long strtoll(char const * restrict nptr, char ** restrict endptr,
       requires valid_endptr: \valid(endptr);
       ensures initialization: \initialized(\old(endptr));
       ensures valid_endptr_content: \valid_read(*\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      ensures
+        endptr_same_base:
+          \base_addr(*\old(endptr)) ≡ \base_addr(\old(nptr));
       assigns \result, *endptr;
       assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
               (indirect: base);
       assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-              (indirect: base);
+        \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+              (indirect: endptr), (indirect: base);
     
     complete behaviors store_position, no_storage;
     disjoint behaviors store_position, no_storage;
@@ -1128,16 +1482,18 @@ extern unsigned long strtoul(char const * restrict nptr,
     requires base_range: base ≡ 0 ∨ (2 ≤ base ≤ 36);
     assigns \result, *endptr;
     assigns \result
-      \from (indirect: nptr), (indirect: *(nptr + (0 ..))), (indirect: base);
-    assigns *endptr
-      \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
+      \from (indirect: nptr), (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
             (indirect: base);
+    assigns *endptr
+      \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+            (indirect: endptr), (indirect: base);
     
     behavior no_storage:
       assumes null_endptr: endptr ≡ \null;
       assigns \result;
       assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
               (indirect: base);
     
     behavior store_position:
@@ -1145,14 +1501,17 @@ extern unsigned long strtoul(char const * restrict nptr,
       requires valid_endptr: \valid(endptr);
       ensures initialization: \initialized(\old(endptr));
       ensures valid_endptr_content: \valid_read(*\old(endptr));
-      ensures position_subset: \subset(*\old(endptr), \old(nptr) + (0 ..));
+      ensures
+        endptr_same_base:
+          \base_addr(*\old(endptr)) ≡ \base_addr(\old(nptr));
       assigns \result, *endptr;
       assigns \result
-        \from (indirect: nptr), (indirect: *(nptr + (0 ..))),
+        \from (indirect: nptr),
+              (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
               (indirect: base);
       assigns *endptr
-        \from nptr, (indirect: *(nptr + (0 ..))), (indirect: endptr),
-              (indirect: base);
+        \from nptr, (indirect: *(nptr + (0 .. strlen{Old}(nptr)))),
+              (indirect: endptr), (indirect: base);
     
     complete behaviors store_position, no_storage;
     disjoint behaviors store_position, no_storage;
@@ -1165,7 +1524,7 @@ extern unsigned long long strtoull(char const * restrict nptr,
 unsigned long const __fc_rand_max = (unsigned long)2147483647;
 /*@ ensures result_range: 0 ≤ \result ≤ __fc_rand_max;
     assigns \result, __fc_random_counter;
-    assigns \result \from __fc_random_counter;
+    assigns \result \from (indirect: __fc_random_counter);
     assigns __fc_random_counter \from __fc_random_counter;
  */
 extern int rand(void);
@@ -1176,7 +1535,7 @@ extern void srand(unsigned int seed);
 
 /*@ ensures result_range: 0 ≤ \result ≤ __fc_rand_max;
     assigns \result;
-    assigns \result \from __fc_random_counter;
+    assigns \result \from (indirect: __fc_random_counter);
  */
 extern long random(void);
 
@@ -1194,21 +1553,24 @@ unsigned short *__fc_p_random48_counter = __fc_random48_counter;
  */
 extern void srand48(long seed);
 
-/*@ requires
+/*@ requires valid_seed16v: \valid(seed16v + (0 .. 2));
+    requires
       initialization: initialized_seed16v: \initialized(seed16v + (0 .. 2));
     ensures random48_initialized: __fc_random48_init ≡ 1;
     ensures result_counter: \result ≡ __fc_p_random48_counter;
     assigns __fc_random48_counter[0 .. 2], __fc_random48_init, \result;
-    assigns __fc_random48_counter[0 .. 2]
-      \from (indirect: *(seed16v + (0 .. 2)));
+    assigns __fc_random48_counter[0 .. 2] \from *(seed16v + (0 .. 2));
     assigns __fc_random48_init \from \nothing;
     assigns \result \from __fc_p_random48_counter;
  */
 extern unsigned short *seed48(unsigned short seed16v[3]);
 
-/*@ ensures random48_initialized: __fc_random48_init ≡ 1;
+/*@ requires valid_param: \valid(param + (0 .. 6));
+    requires
+      initialization: initialized_param: \initialized(param + (0 .. 6));
+    ensures random48_initialized: __fc_random48_init ≡ 1;
     assigns __fc_random48_counter[0 .. 2], __fc_random48_init;
-    assigns __fc_random48_counter[0 .. 2] \from *(param + (0 .. 5));
+    assigns __fc_random48_counter[0 .. 2] \from *(param + (0 .. 6));
     assigns __fc_random48_init \from \nothing;
  */
 extern void lcong48(unsigned short param[7]);
@@ -1222,7 +1584,8 @@ extern void lcong48(unsigned short param[7]);
  */
 extern double drand48(void);
 
-/*@ requires
+/*@ requires valid_xsubi: \valid(xsubi + (0 .. 2));
+    requires
       initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
     ensures result_range: \is_finite(\result) ∧ 0.0 ≤ \result < 1.0;
     assigns __fc_random48_counter[0 .. 2], \result;
@@ -1241,7 +1604,8 @@ extern double erand48(unsigned short xsubi[3]);
  */
 extern long lrand48(void);
 
-/*@ requires
+/*@ requires valid_xsubi: \valid(xsubi + (0 .. 2));
+    requires
       initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
     ensures result_range: 0 ≤ \result < 2147483648;
     assigns __fc_random48_counter[0 .. 2], \result;
@@ -1260,7 +1624,8 @@ extern long nrand48(unsigned short xsubi[3]);
  */
 extern long mrand48(void);
 
-/*@ requires
+/*@ requires valid_xsubi: \valid(xsubi + (0 .. 2));
+    requires
       initialization: initialized_xsubi: \initialized(xsubi + (0 .. 2));
     ensures result_range: -2147483648 ≤ \result < 2147483648;
     assigns __fc_random48_counter[0 .. 2], \result;
@@ -1433,7 +1798,8 @@ extern  __attribute__((__noreturn__)) void quick_exit(int status);
         command ≡ \null ∨ valid_read_string(command);
     assigns \result;
     assigns \result
-      \from (indirect: command), (indirect: *(command + (0 ..)));
+      \from (indirect: command),
+            (indirect: *(command + (0 .. strlen{Old}(command))));
  */
 extern int system(char const *command);
 
@@ -1498,16 +1864,27 @@ extern long labs(long j);
  */
 extern long long llabs(long long j);
 
-/*@ assigns \result;
-    assigns \result \from numer, denom; */
+/*@ requires denom_nonzero: denom ≢ 0;
+    requires no_overflow: ¬(numer ≡ -2147483647 - 1 ∧ denom ≡ -1);
+    assigns \result;
+    assigns \result \from numer, denom;
+ */
 extern div_t div(int numer, int denom);
 
-/*@ assigns \result;
-    assigns \result \from numer, denom; */
+/*@ requires denom_nonzero: denom ≢ 0;
+    requires no_overflow: ¬(numer ≡ -2147483647L - 1L ∧ denom ≡ -1);
+    assigns \result;
+    assigns \result \from numer, denom;
+ */
 extern ldiv_t ldiv(long numer, long denom);
 
-/*@ assigns \result;
-    assigns \result \from numer, denom; */
+/*@ requires denom_nonzero: denom ≢ 0;
+    requires
+      no_overflow:
+        ¬(numer ≡ -9223372036854775807LL - 1LL ∧ denom ≡ -1);
+    assigns \result;
+    assigns \result \from numer, denom;
+ */
 extern lldiv_t lldiv(long long numer, long long denom);
 
 /*@ ghost extern int __fc_mblen_state; */
@@ -1596,6 +1973,15 @@ char *realpath(char const * restrict file_name, char * restrict resolved_name);
 
 char *canonicalize_file_name(char const *path);
 
+/*@ requires valid_p: \valid((char *)buf + (0 .. n - 1));
+    ensures
+      initialization: \initialized((char *)\old(buf) + (0 .. \old(n) - 1));
+    assigns *((char *)buf + (0 .. n - 1)), Frama_C_entropy_source;
+    assigns *((char *)buf + (0 .. n - 1)) \from Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+ */
+void arc4random_buf(void *buf, size_t n);
+
 /*@
 predicate non_escaping{L}(void *s, ℤ n) =
   ∀ ℤ i; 0 ≤ i < n ⇒ ¬\dangling((char *)s + i);
@@ -1641,15 +2027,16 @@ int strncmp(char const *s1, char const *s2, size_t n);
     requires valid_string_s2: valid_read_string(s2);
     assigns \result;
     assigns \result
-      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
+      \from (indirect: *(s1 + (0 .. strlen{Old}(s1)))),
+            (indirect: *(s2 + (0 .. strlen{Old}(s2))));
  */
 extern int strcoll(char const *s1, char const *s2);
 
 char *strchr(char const *s, int c);
 
 /*@ requires valid_string_s: valid_read_string(s);
-    ensures
-      result_same_base: \subset(\result, \old(s) + (0 .. strlen(\old(s))));
+    ensures result_valid_string: valid_read_string(\result);
+    ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
     assigns \result;
     assigns \result
       \from s, (indirect: *(s + (0 .. strlen{Old}(s)))), (indirect: c);
@@ -1663,7 +2050,8 @@ char *strrchr(char const *s, int c);
     ensures result_bounded: 0 ≤ \result ≤ strlen(\old(s));
     assigns \result;
     assigns \result
-      \from (indirect: *(s + (0 ..))), (indirect: *(reject + (0 ..)));
+      \from (indirect: *(s + (0 .. strlen{Old}(s)))),
+            (indirect: *(reject + (0 .. strlen{Old}(reject))));
  */
 extern size_t strcspn(char const *s, char const *reject);
 
@@ -1671,9 +2059,9 @@ extern size_t strcspn(char const *s, char const *reject);
     requires valid_string_accept: valid_read_string(accept);
     ensures result_bounded: 0 ≤ \result ≤ strlen(\old(s));
     assigns \result;
-    assigns \result \from *(s + (0 ..)), *(accept + (0 ..));
     assigns \result
-      \from (indirect: *(s + (0 ..))), (indirect: *(accept + (0 ..)));
+      \from (indirect: *(s + (0 .. strlen{Old}(s)))),
+            (indirect: *(accept + (0 .. strlen{Old}(accept))));
  */
 extern size_t strspn(char const *s, char const *accept);
 
@@ -1681,9 +2069,13 @@ extern size_t strspn(char const *s, char const *accept);
     requires valid_string_accept: valid_read_string(accept);
     ensures
       result_null_or_same_base:
-        \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
+        \result ≡ \null ∨
+        (valid_read_string(\result) ∧
+         \base_addr(\result) ≡ \base_addr(\old(s)));
     assigns \result;
-    assigns \result \from s, *(s + (0 ..)), *(accept + (0 ..));
+    assigns \result
+      \from s, (indirect: *(s + (0 .. strlen{Old}(s)))),
+            (indirect: *(accept + (0 .. strlen{Old}(accept))));
  */
 extern char *strpbrk(char const *s, char const *accept);
 
@@ -1694,32 +2086,37 @@ char *strstr(char const *haystack, char const *needle);
     ensures
       result_null_or_in_haystack:
         \result ≡ \null ∨
-        (\subset(\result, \old(haystack) + (0 ..)) ∧ \valid_read(\result));
+        (valid_read_string(\result) ∧
+         \base_addr(\result) ≡ \base_addr(\old(haystack)));
     assigns \result;
     assigns \result
-      \from haystack, (indirect: *(haystack + (0 ..))),
-            (indirect: *(needle + (0 ..)));
+      \from haystack, (indirect: *(haystack + (0 .. strlen{Old}(haystack)))),
+            (indirect: *(needle + (0 .. strlen{Old}(needle))));
  */
 extern char *strcasestr(char const *haystack, char const *needle);
 
 char *__fc_strtok_ptr;
 /*@ requires valid_string_delim: valid_read_string(delim);
+    requires
+      separation:
+        \separated(delim + (0 .. strlen(delim)), s + (0 .. strlen(s)));
     assigns *(s + (0 ..)), *(__fc_strtok_ptr + (0 ..)), \result,
             __fc_strtok_ptr;
     assigns *(s + (0 ..))
       \from *(s + (0 ..)), (indirect: s), (indirect: __fc_strtok_ptr),
-            (indirect: *(delim + (0 ..)));
+            (indirect: *(delim + (0 .. strlen{Old}(delim))));
     assigns *(__fc_strtok_ptr + (0 ..))
       \from *(__fc_strtok_ptr + (0 ..)), (indirect: s),
-            (indirect: __fc_strtok_ptr), (indirect: *(delim + (0 ..)));
+            (indirect: __fc_strtok_ptr),
+            (indirect: *(delim + (0 .. strlen{Old}(delim))));
     assigns \result
       \from s, __fc_strtok_ptr, (indirect: *(s + (0 ..))),
             (indirect: *(__fc_strtok_ptr + (0 ..))),
-            (indirect: *(delim + (0 ..)));
+            (indirect: *(delim + (0 .. strlen{Old}(delim))));
     assigns __fc_strtok_ptr
       \from \old(__fc_strtok_ptr), s,
             (indirect: *(__fc_strtok_ptr + (0 ..))),
-            (indirect: *(delim + (0 ..)));
+            (indirect: *(delim + (0 .. strlen{Old}(delim))));
     
     behavior new_str:
       assumes s_not_null: s ≢ \null;
@@ -1727,40 +2124,50 @@ char *__fc_strtok_ptr;
         valid_string_s_or_delim_not_found:
           valid_string(s) ∨
           (valid_read_string(s) ∧
-           (∀ int i;
+           (∀ ℤ i;
               0 ≤ i < strlen(delim) ⇒
               ¬(strchr(s, *(delim + i)) ≡ \true)));
       ensures
-        result_subset:
-          \result ≡ \null ∨ \subset(\result, \old(s) + (0 ..));
-      ensures ptr_subset: \subset(__fc_strtok_ptr, \old(s) + (0 ..));
+        result_same_base:
+          \result ≡ \null ∨
+          (valid_read_string(\result) ∧
+           \base_addr(\result) ≡ \base_addr(\old(s)));
+      ensures ptr_valid_string: valid_read_string(__fc_strtok_ptr);
+      ensures
+        ptr_same_base: \base_addr(__fc_strtok_ptr) ≡ \base_addr(\old(s));
       assigns __fc_strtok_ptr, *(s + (0 ..)), \result;
       assigns __fc_strtok_ptr
-        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
+        \from s, (indirect: *(s + (0 ..))),
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
       assigns *(s + (0 ..))
-        \from *(s + (0 ..)), (indirect: s), (indirect: *(delim + (0 ..)));
+        \from *(s + (0 ..)), (indirect: s),
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
       assigns \result
-        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
+        \from s, (indirect: *(s + (0 ..))),
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
     
     behavior resume_str:
       assumes s_null: s ≡ \null;
       requires not_first_call: __fc_strtok_ptr ≢ \null;
       ensures
-        result_subset:
+        result_same_base:
           \result ≡ \null ∨
-          \subset(\result, \old(__fc_strtok_ptr) + (0 ..));
+          (valid_read_string(\result) ∧
+           \base_addr(\result) ≡ \base_addr(\old(__fc_strtok_ptr)));
+      ensures ptr_valid_string: valid_read_string(__fc_strtok_ptr);
       ensures
-        ptr_subset: \subset(__fc_strtok_ptr, \old(__fc_strtok_ptr) + (0 ..));
+        ptr_same_base:
+          \base_addr(__fc_strtok_ptr) ≡ \base_addr(\old(__fc_strtok_ptr));
       assigns *(__fc_strtok_ptr + (0 ..)), __fc_strtok_ptr, \result;
       assigns *(__fc_strtok_ptr + (0 ..))
         \from *(__fc_strtok_ptr + (0 ..)), (indirect: __fc_strtok_ptr),
-              (indirect: *(delim + (0 ..)));
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
       assigns __fc_strtok_ptr
         \from \old(__fc_strtok_ptr), (indirect: *(__fc_strtok_ptr + (0 ..))),
-              (indirect: *(delim + (0 ..)));
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
       assigns \result
         \from __fc_strtok_ptr, (indirect: *(__fc_strtok_ptr + (0 ..))),
-              (indirect: *(delim + (0 ..)));
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
     
     complete behaviors resume_str, new_str;
     disjoint behaviors resume_str, new_str;
@@ -1768,20 +2175,27 @@ char *__fc_strtok_ptr;
 extern char *strtok(char * restrict s, char const * restrict delim);
 
 /*@ requires valid_string_delim: valid_read_string(delim);
+    requires
+      separation:
+        \separated(
+          delim + (0 .. strlen(delim)), s + (0 .. strlen(s)),
+          *saveptr + (0 ..)
+          );
     requires valid_saveptr: \valid(saveptr);
     assigns *(s + (0 ..)), *(*saveptr + (0 ..)), \result, *saveptr;
     assigns *(s + (0 ..))
       \from *(s + (0 ..)), (indirect: s), (indirect: *saveptr),
-            (indirect: *(delim + (0 ..)));
+            (indirect: *(delim + (0 .. strlen{Old}(delim))));
     assigns *(*saveptr + (0 ..))
       \from *(*saveptr + (0 ..)), (indirect: s), (indirect: *saveptr),
-            (indirect: *(delim + (0 ..)));
+            (indirect: *(delim + (0 .. strlen{Old}(delim))));
     assigns \result
       \from s, *saveptr, (indirect: *(s + (0 ..))),
-            (indirect: *(*saveptr + (0 ..))), (indirect: *(delim + (0 ..)));
+            (indirect: *(*saveptr + (0 ..))),
+            (indirect: *(delim + (0 .. strlen{Old}(delim))));
     assigns *saveptr
       \from \old(*saveptr), s, (indirect: *(*saveptr + (0 ..))),
-            (indirect: *(delim + (0 ..)));
+            (indirect: *(delim + (0 .. strlen{Old}(delim))));
     
     behavior new_str:
       assumes s_not_null: s ≢ \null;
@@ -1789,41 +2203,51 @@ extern char *strtok(char * restrict s, char const * restrict delim);
         valid_string_s_or_delim_not_found:
           valid_string(s) ∨
           (valid_read_string(s) ∧
-           (∀ int i;
+           (∀ ℤ i;
               0 ≤ i < strlen(delim) ⇒
               ¬(strchr(s, *(delim + i)) ≡ \true)));
       ensures
-        result_subset:
-          \result ≡ \null ∨ \subset(\result, \old(s) + (0 ..));
-      ensures initialization: \initialized(\old(saveptr));
-      ensures saveptr_subset: \subset(*\old(saveptr), \old(s) + (0 ..));
+        result_same_base:
+          \result ≡ \null ∨
+          (valid_read_string(\result) ∧
+           \base_addr(\result) ≡ \base_addr(\old(s)));
+      ensures saveptr_valid_string: valid_read_string(*\old(saveptr));
+      ensures
+        saveptr_same_base: \base_addr(*\old(saveptr)) ≡ \base_addr(\old(s));
       assigns *saveptr, *(s + (0 ..)), \result;
       assigns *saveptr
-        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
+        \from s, (indirect: *(s + (0 ..))),
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
       assigns *(s + (0 ..))
-        \from *(s + (0 ..)), (indirect: s), (indirect: *(delim + (0 ..)));
+        \from *(s + (0 ..)), (indirect: s),
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
       assigns \result
-        \from s, (indirect: *(s + (0 ..))), (indirect: *(delim + (0 ..)));
+        \from s, (indirect: *(s + (0 ..))),
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
     
     behavior resume_str:
       assumes s_null: s ≡ \null;
       requires not_first_call: *saveptr ≢ \null;
       requires initialization: saveptr: \initialized(saveptr);
       ensures
-        result_subset:
-          \result ≡ \null ∨ \subset(\result, \old(*saveptr) + (0 ..));
+        result_same_base:
+          \result ≡ \null ∨
+          (valid_read_string(\result) ∧
+           \base_addr(\result) ≡ \base_addr(\old(*saveptr)));
+      ensures saveptr_valid_string: valid_read_string(*\old(saveptr));
       ensures
-        saveptr_subset: \subset(*\old(saveptr), \old(*saveptr) + (0 ..));
+        saveptr_same_base:
+          \base_addr(*\old(saveptr)) ≡ \base_addr(\old(*saveptr));
       assigns *(*saveptr + (0 ..)), *saveptr, \result;
       assigns *(*saveptr + (0 ..))
         \from *(*saveptr + (0 ..)), (indirect: *saveptr),
-              (indirect: *(delim + (0 ..)));
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
       assigns *saveptr
         \from \old(*saveptr), (indirect: *(*saveptr + (0 ..))),
-              (indirect: *(delim + (0 ..)));
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
       assigns \result
         \from *saveptr, (indirect: *(*saveptr + (0 ..))),
-              (indirect: *(delim + (0 ..)));
+              (indirect: *(delim + (0 .. strlen{Old}(delim))));
     
     complete behaviors resume_str, new_str;
     disjoint behaviors resume_str, new_str;
@@ -1831,12 +2255,24 @@ extern char *strtok(char * restrict s, char const * restrict delim);
 extern char *strtok_r(char * restrict s, char const * restrict delim,
                       char ** restrict saveptr);
 
-/*@ requires
-      valid_string_stringp: \valid(stringp) ∧ valid_string(*stringp);
-    requires valid_string_delim: valid_read_string(delim);
-    assigns *stringp, \result;
-    assigns *stringp \from *(delim + (..)), *(*(stringp + (..)));
-    assigns \result \from *(delim + (..)), *(*(stringp + (..)));
+/*@ requires valid_stringp: \valid(stringp);
+    assigns *(*(stringp + (0 ..))), \result;
+    assigns *(*(stringp + (0 ..)))
+      \from (indirect: *(delim + (0 .. strlen{Old}(delim)))),
+            *(*(stringp + (0 ..)));
+    assigns \result \from *stringp;
+    
+    behavior no_stringp:
+      assumes stringp_null: *stringp ≡ \null;
+      ensures result_null: \result ≡ \null;
+    
+    behavior valid_stringp:
+      assumes stringp_not_null: *stringp ≢ \null;
+      requires valid_string_stringp: valid_string(*stringp);
+      ensures
+        valid_result:
+          valid_string(\result) ∧
+          \base_addr(\result) ≡ \base_addr(*\old(stringp));
  */
 extern char *strsep(char **stringp, char const *delim);
 
@@ -1875,6 +2311,12 @@ char *strncat(char *dest, char const *src, size_t n);
 /*@ requires valid_string_src: valid_read_string(src);
     requires valid_string_dest: valid_string(dest);
     requires room_nstring: \valid(dest + (0 .. n - 1));
+    requires
+      separation:
+        \separated(
+          dest + (0 .. \min(n - 1, strlen(dest) + strlen(src))),
+          src + (0 .. strnlen(src, n - 1))
+          );
     ensures
       bounded_result: \result ≡ strlen(\old(dest)) + strlen(\old(src));
     assigns *(dest + (strlen{Old}(dest) .. n)), \result;
@@ -1888,18 +2330,70 @@ extern size_t strlcat(char * restrict dest, char const * restrict src,
 
 /*@ requires valid_dest: \valid(dest + (0 .. n - 1));
     requires valid_string_src: valid_read_string(src);
+    requires
+      separation: \separated(dest + (0 .. n - 1), src + (0 .. strlen(src)));
     assigns *(dest + (0 .. n - 1)), \result;
     assigns *(dest + (0 .. n - 1))
-      \from (indirect: *(src + (0 ..))), (indirect: n);
-    assigns \result \from dest;
+      \from *(src + (0 .. strlen{Old}(src))), (indirect: n);
+    assigns \result \from (indirect: *(src + (0 .. strlen{Old}(src))));
  */
 extern size_t strxfrm(char * restrict dest, char const * restrict src,
                       size_t n);
 
+/*@ requires
+      valid_haystack: \valid_read((char *)haystack + (0 .. haystacklen - 1));
+    requires
+      valid_needle: \valid_read((char *)needle + (0 .. needlelen - 1));
+    ensures
+      result_null_or_valid:
+        \result ≡ \null ∨ \valid_read((char *)\result);
+    ensures
+      result_null_or_same_base:
+        \result ≡ \null ∨
+        \base_addr(\result) ≡ \base_addr(\old(haystack));
+    assigns \result;
+    assigns \result
+      \from haystack,
+            (indirect: *((char *)haystack + (0 .. haystacklen - 1))),
+            (indirect: *((char *)needle + (0 .. needlelen - 1)));
+ */
+extern void *memmem(void const *haystack, size_t haystacklen,
+                    void const *needle, size_t needlelen);
+
 char *strdup(char const *s);
 
 char *strndup(char const *s, size_t n);
 
+/*@ requires valid_string_src: valid_read_nstring(src, n);
+    requires valid_dest: \valid(dest + (0 .. n - 1));
+    requires separation: \separated(src + (0 .. n - 1), dest + (0 .. n - 1));
+    ensures initialization: \initialized(\old(dest) + (0 .. \old(n) - 1));
+    assigns *(dest + (0 .. n - 1)), \result;
+    assigns *(dest + (0 .. n - 1))
+      \from *(src + (0 .. n - 1)), (indirect: n);
+    assigns \result
+      \from dest, (indirect: *(src + (0 .. n - 1))), (indirect: n);
+    
+    behavior src_is_a_string:
+      assumes src_has_nul: strlen(src) < n;
+      ensures valid_string_dest: valid_read_string(\old(dest));
+      ensures same_contents: strcmp(\old(dest), \old(src)) ≡ 0;
+      ensures
+        dest_nul_padded:
+          ∀ ℤ i;
+            strlen(\old(src)) ≤ i < \old(n) ⇒ *(\old(dest) + i) ≡ 0;
+      ensures
+        result_points_to_nul: \result ≡ \old(dest) + strlen(\old(src));
+    
+    behavior src_too_long:
+      assumes src_no_nul: ∀ ℤ i; 0 ≤ i < n ⇒ *(src + i) ≢ 0;
+      ensures
+        same_partial_contents: strncmp(\old(src), \old(dest), \old(n)) ≡ 0;
+      ensures result_points_to_end: \result ≡ \old(dest) + \old(n);
+ */
+extern char *stpncpy(char * restrict dest, char const * restrict src,
+                     size_t n);
+
 char __fc_strsignal[64];
 char * const __fc_p_strsignal = __fc_strsignal;
 char *strsignal(int signum);
@@ -1955,6 +2449,9 @@ error_t argz_replace(char **argz, size_t *argz_len, char const *str,
 
 char *argz_next(char const *argz, size_t argz_len, char const *entry);
 
+/*@ assigns *(argz + (0 ..));
+    assigns *(argz + (0 ..)) \from *(argz + (0 ..)), (indirect: len), sep;
+ */
 void argz_stringify(char *argz, size_t len, int sep)
 {
   if (len > (size_t)0) 
@@ -1977,6 +2474,12 @@ void argz_stringify(char *argz, size_t len, int sep)
   return;
 }
 
+/*@ assigns *to, *to_len, *(*(to + (0 .. \old(*to_len) + buf_len)));
+    assigns *to \from *to, (indirect: *to_len), (indirect: buf_len);
+    assigns *to_len \from *to_len, buf_len;
+    assigns *(*(to + (0 .. \old(*to_len) + buf_len)))
+      \from *(*(to + (0 .. \old(*to_len)))), *(buf + (0 .. buf_len));
+ */
 static void str_append(char **to, size_t *to_len, char const *buf,
                        size_t const buf_len)
 {
@@ -1996,6 +2499,21 @@ static void str_append(char **to, size_t *to_len, char const *buf,
   return;
 }
 
+/*@ assigns *(*argz + (0 ..)), *argz_len, *replace_count, \result;
+    assigns *(*argz + (0 ..))
+      \from *(*argz + (0 ..)), *argz_len, *(str + (0 ..)), *(with + (0 ..)),
+            *replace_count;
+    assigns *argz_len
+      \from *(*argz + (0 ..)), *argz_len, *(str + (0 ..)), *(with + (0 ..)),
+            *replace_count;
+    assigns *replace_count
+      \from *(*argz + (0 ..)), *argz_len, *(str + (0 ..)), *(with + (0 ..)),
+            *replace_count;
+    assigns \result
+      \from *(*argz + (0 ..)), *argz_len, *(str + (0 ..)), *(with + (0 ..)),
+            *replace_count;
+    allocates *\old(argz);
+ */
 error_t argz_replace(char **argz, size_t *argz_len, char const *str,
                      char const *with, unsigned int *replace_count)
 {
@@ -2075,6 +2593,9 @@ error_t argz_replace(char **argz, size_t *argz_len, char const *str,
   return er;
 }
 
+/*@ assigns \result;
+    assigns \result \from *(argz + (0 ..)), argz_len, entry;
+ */
 char *argz_next(char const *argz, size_t argz_len, char const *entry)
 {
   char *__retres;
@@ -2102,6 +2623,18 @@ char *argz_next(char const *argz, size_t argz_len, char const *entry)
   return_label: return __retres;
 }
 
+/*@ assigns *(*argz + (0 ..)), *argz_len, \result;
+    assigns *(*argz + (0 ..))
+      \from *(*argz + (0 ..)), *argz_len, before, *(before + (0 ..)),
+            *(entry + (0 ..));
+    assigns *argz_len
+      \from *(*argz + (0 ..)), *argz_len, before, *(before + (0 ..)),
+            *(entry + (0 ..));
+    assigns \result
+      \from *(*argz + (0 ..)), *argz_len, before, *(before + (0 ..)),
+            *(entry + (0 ..));
+    allocates *\old(argz);
+ */
 error_t argz_insert(char **argz, size_t *argz_len, char *before,
                     char const *entry)
 {
@@ -2148,6 +2681,10 @@ error_t argz_insert(char **argz, size_t *argz_len, char *before,
   }
 }
 
+/*@ assigns *(*(argv + (0 ..)) + (0 ..));
+    assigns *(*(argv + (0 ..)) + (0 ..))
+      \from *(argz + (0 .. len)), (indirect: len);
+ */
 void argz_extract(char const *argz, size_t len, char **argv)
 {
   while (len > (size_t)0) {
@@ -2163,6 +2700,12 @@ void argz_extract(char const *argz, size_t len, char **argv)
   return;
 }
 
+/*@ assigns *(*argz + (0 ..)), *argz_len;
+    assigns *(*argz + (0 ..))
+      \from *(*argz + (0 ..)), *argz_len, *(entry + (0 ..));
+    assigns *argz_len \from *(*argz + (0 ..)), *argz_len, *(entry + (0 ..));
+    frees *argz;
+ */
 void argz_delete(char **argz, size_t *argz_len, char *entry)
 {
   if (entry) {
@@ -2180,9 +2723,12 @@ void argz_delete(char **argz, size_t *argz_len, char *entry)
   return;
 }
 
-/*@ assigns \result, *(*(argz + (..)));
-    assigns \result \from \nothing;
-    assigns *(*(argz + (..))) \from \nothing;
+/*@ assigns *(*argz + (0 ..)), *len, \result;
+    assigns *(*argz + (0 ..))
+      \from *(string + (0 ..)), delim, *(*argz + (0 ..)), *len;
+    assigns *len \from *(string + (0 ..)), delim, *(*argz + (0 ..)), *len;
+    assigns \result \from *(string + (0 ..)), delim, *(*argz + (0 ..)), *len;
+    allocates *\old(argz);
  */
 error_t argz_create_sep(char const *string, int delim, char **argz,
                         size_t *len)
@@ -2239,6 +2785,12 @@ error_t argz_create_sep(char const *string, int delim, char **argz,
   return_label: return __retres;
 }
 
+/*@ assigns *(*argz + (0 ..)), *len, \result;
+    assigns *(*argz + (0 ..)) \from *(*(argv + (0 ..)) + (0 ..));
+    assigns *len \from *(*(argv + (0 ..)) + (0 ..));
+    assigns \result \from *(*(argv + (0 ..)) + (0 ..));
+    allocates *\old(argz);
+ */
 error_t argz_create(char * const *argv, char **argz, size_t *len)
 {
   error_t __retres;
@@ -2273,6 +2825,10 @@ error_t argz_create(char * const *argv, char **argz, size_t *len)
   return_label: return __retres;
 }
 
+/*@ assigns \result;
+    assigns \result
+      \from (indirect: *(argz + (0 .. strlen{Old}(argz)))), (indirect: len);
+ */
 size_t argz_count(char const *argz, size_t len)
 {
   size_t count = (size_t)0;
@@ -2285,6 +2841,16 @@ size_t argz_count(char const *argz, size_t len)
   return count;
 }
 
+/*@ assigns *(*argz + (0 ..)), *argz_len, \result;
+    assigns *(*argz + (0 ..))
+      \from *(*argz + (0 ..)), *argz_len, *(buf + (0 ..)), buf_len;
+    assigns *argz_len
+      \from *(*argz + (0 ..)), *argz_len, *(buf + (0 ..)), buf_len;
+    assigns \result
+      \from (indirect: *(*argz + (0 ..))), (indirect: *argz_len),
+            (indirect: *(buf + (0 ..))), (indirect: buf_len);
+    allocates *\old(argz);
+ */
 error_t argz_append(char **argz, size_t *argz_len, char const *buf,
                     size_t buf_len)
 {
@@ -2305,6 +2871,13 @@ error_t argz_append(char **argz, size_t *argz_len, char const *buf,
   return_label: return __retres;
 }
 
+/*@ assigns *(*argz + (0 ..)), *argz_len, \result;
+    assigns *(*argz + (0 ..))
+      \from *(*argz + (0 ..)), *argz_len, *(str + (0 ..));
+    assigns *argz_len \from *(*argz + (0 ..)), *argz_len, *(str + (0 ..));
+    assigns \result \from *(*argz + (0 ..)), *argz_len, *(str + (0 ..));
+    allocates *\old(argz);
+ */
 error_t argz_add(char **argz, size_t *argz_len, char const *str)
 {
   error_t tmp_0;
@@ -2317,6 +2890,12 @@ error_t argz_add(char **argz, size_t *argz_len, char const *str)
   return tmp_0;
 }
 
+/*@ assigns *(*argz + (0 ..)), *argz_len, \result;
+    assigns *(*argz + (0 ..)) \from *(string + (0 ..)), delim;
+    assigns *argz_len \from *(string + (0 ..)), delim;
+    assigns \result \from *(string + (0 ..)), delim;
+    allocates *\old(argz);
+ */
 error_t argz_add_sep(char **argz, size_t *argz_len, char const *string,
                      int delim)
 {
@@ -2827,13 +3406,65 @@ int toupper(int c)
 }
 
 int __fc_errno = 0;
-int fetestexcept(int excepts);
+fenv_t volatile __fc_fenv_state;
+/*@ assigns __fc_fenv_state, \result;
+    assigns __fc_fenv_state \from (indirect: excepts), __fc_fenv_state;
+    assigns \result \from (indirect: __fc_fenv_state), (indirect: excepts);
+ */
+extern int feclearexcept(int excepts);
+
+/*@ assigns *envp, \result;
+    assigns *envp \from __fc_fenv_state;
+    assigns \result \from (indirect: __fc_fenv_state);
+ */
+extern int fegetenv(fenv_t *envp);
+
+/*@ assigns *flagp, \result;
+    assigns *flagp \from __fc_fenv_state, excepts;
+    assigns \result \from (indirect: __fc_fenv_state), (indirect: excepts);
+ */
+extern int fegetexceptflag(fexcept_t *flagp, int excepts);
+
+/*@ assigns \result;
+    assigns \result \from __fc_fenv_state; */
+extern int fegetround(void);
 
 int feholdexcept(fenv_t *envp);
 
+/*@ assigns \result;
+    assigns \result \from (indirect: __fc_fenv_state), (indirect: excepts);
+ */
+extern int feraiseexcept(int excepts);
+
 int fesetenv(fenv_t const *envp);
 
+/*@ assigns __fc_fenv_state, \result;
+    assigns __fc_fenv_state \from *flagp, excepts;
+    assigns \result
+      \from (indirect: __fc_fenv_state), (indirect: *flagp),
+            (indirect: excepts);
+ */
+extern int fesetexceptflag(fexcept_t const *flagp, int excepts);
+
+/*@ assigns __fc_fenv_state, \result;
+    assigns __fc_fenv_state
+      \from (indirect: __fc_fenv_state), (indirect: round);
+    assigns \result \from (indirect: __fc_fenv_state), (indirect: round);
+ */
+extern int fesetround(int round);
+
+int fetestexcept(int excepts);
+
+/*@ assigns __fc_fenv_state, \result;
+    assigns __fc_fenv_state \from __fc_fenv_state, *envp;
+    assigns \result \from (indirect: __fc_fenv_state), (indirect: *envp);
+ */
+extern int feupdateenv(fenv_t const *envp);
+
 static int volatile fetestexcept___fc_random_fetestexcept;
+/*@ assigns \result;
+    assigns \result \from (indirect: excepts), __fc_fenv_state;
+ */
 int fetestexcept(int excepts)
 {
   int __retres;
@@ -2841,7 +3472,11 @@ int fetestexcept(int excepts)
   return __retres;
 }
 
-fenv_t volatile __fc_fenv_state;
+/*@ assigns *envp, __fc_fenv_state, \result;
+    assigns *envp \from __fc_fenv_state;
+    assigns __fc_fenv_state \from __fc_fenv_state;
+    assigns \result \from (indirect: __fc_fenv_state);
+ */
 int feholdexcept(fenv_t *envp)
 {
   int __retres;
@@ -2850,6 +3485,10 @@ int feholdexcept(fenv_t *envp)
   return __retres;
 }
 
+/*@ assigns __fc_fenv_state, \result;
+    assigns __fc_fenv_state \from *envp;
+    assigns \result \from (indirect: __fc_fenv_state), (indirect: *envp);
+ */
 int fesetenv(fenv_t const *envp)
 {
   int __retres;
@@ -2863,6 +3502,15 @@ int glob(char const *pattern, int flags,
 
 void globfree(glob_t *pglob);
 
+/*@ assigns *pglob, \result;
+    assigns *pglob
+      \from (indirect: *(pattern + (0 .. strlen{Old}(pattern)))), flags,
+            (indirect: errfunc);
+    assigns \result
+      \from (indirect: *(pattern + (0 .. strlen{Old}(pattern)))),
+            (indirect: flags), (indirect: errfunc);
+    allocates \old(pglob)->gl_pathv;
+ */
 int glob(char const *pattern, int flags,
          int (*errfunc)(char const *epath, int eerrno), glob_t *pglob)
 {
@@ -2870,7 +3518,8 @@ int glob(char const *pattern, int flags,
   int tmp;
   unsigned int tmp_0;
   char **tmp_1;
-  int tmp_4;
+  int tmp_2;
+  int tmp_5;
   tmp = Frama_C_interval(0,10);
   pglob->gl_pathc = (unsigned int)tmp;
   if (flags & (1 << 3)) tmp_0 = pglob->gl_offs; else tmp_0 = (unsigned int)0;
@@ -2925,18 +3574,20 @@ int glob(char const *pattern, int flags,
     }
   }
   *(pglob->gl_pathv + ((prev_len + reserve_offs) + pglob->gl_pathc)) = (char *)0;
-  tmp_4 = Frama_C_nondet(0,1);
-  if (tmp_4) {
+  tmp_2 = Frama_C_nondet(0,1 << 8);
+  pglob->gl_flags = flags | tmp_2;
+  tmp_5 = Frama_C_nondet(0,1);
+  if (tmp_5) {
     __retres = 0;
     goto return_label;
   }
   else {
     if (errfunc) {
+      int tmp_4;
       int tmp_3;
-      int tmp_2;
-      tmp_2 = Frama_C_interval(0,255);
-      tmp_3 = (*errfunc)("glob.c error path",tmp_2);
-      int res = tmp_3;
+      tmp_3 = Frama_C_interval(0,255);
+      tmp_4 = (*errfunc)("glob.c error path",tmp_3);
+      int res = tmp_4;
       if (res) {
         __retres = 2;
         goto return_label;
@@ -2953,6 +3604,9 @@ int glob(char const *pattern, int flags,
   return_label: return __retres;
 }
 
+/*@ assigns *pglob;
+    assigns *pglob \from *pglob;
+    frees pglob->gl_pathv; */
 void globfree(glob_t *pglob)
 {
   if (pglob->gl_pathc > (unsigned int)0) free((void *)pglob->gl_pathv);
@@ -4588,6 +5242,11 @@ int getaddrinfo(char const * restrict nodename,
 }
 
 struct __fc_gethostbyname __fc_ghbn;
+/*@ assigns *(answer + (0 .. anslen - 1)), \result;
+    assigns *(answer + (0 .. anslen - 1))
+      \from (indirect: anslen), Frama_C_entropy_source;
+    assigns \result \from (indirect: anslen), Frama_C_entropy_source;
+ */
 static int res_search(char const *dname, int rec_class, int type,
                       char *answer, int anslen)
 {
@@ -4604,6 +5263,12 @@ static int res_search(char const *dname, int rec_class, int type,
   return tmp;
 }
 
+/*@ assigns *\result, Frama_C_entropy_source;
+    assigns *\result
+      \from *(name + (0 .. strlen{Old}(name))), Frama_C_entropy_source;
+    assigns Frama_C_entropy_source \from Frama_C_entropy_source;
+    allocates \result;
+ */
 struct hostent *gethostbyname(char const *name)
 {
   struct hostent *__retres;
@@ -4735,6 +5400,21 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, size_t buflen,
                struct passwd **result);
 
 static int __fc_getpw_init;
+/*@ assigns __fc_getpw_init, __fc_getpw_pw_name[0 .. 63],
+            __fc_getpw_pw_passwd[0 .. 63], __fc_getpw_pw_gecos[0 .. 63],
+            __fc_getpw_pw_dir[0 .. 63], __fc_getpw_pw_shell[0 .. 63],
+            *(buf + (0 .. buflen - 1)), *pwd, *result, \result;
+    assigns __fc_getpw_init \from __fc_pwd;
+    assigns __fc_getpw_pw_name[0 .. 63] \from __fc_pwd;
+    assigns __fc_getpw_pw_passwd[0 .. 63] \from __fc_pwd;
+    assigns __fc_getpw_pw_gecos[0 .. 63] \from __fc_pwd;
+    assigns __fc_getpw_pw_dir[0 .. 63] \from __fc_pwd;
+    assigns __fc_getpw_pw_shell[0 .. 63] \from __fc_pwd;
+    assigns *(buf + (0 .. buflen - 1)) \from __fc_pwd;
+    assigns *pwd \from __fc_pwd;
+    assigns *result \from __fc_pwd;
+    assigns \result \from __fc_pwd;
+ */
 static int __fc_getpw_r(struct passwd *pwd, char *buf, size_t buflen,
                         struct passwd **result)
 {
@@ -5517,17 +6197,22 @@ extern wchar_t *fgetws(wchar_t * restrict ws, int n, FILE * restrict stream);
  */
 extern int wcscasecmp(wchar_t const *ws1, wchar_t const *ws2);
 
+wchar_t *wcsdup(wchar_t const *ws);
+
+void __fc_atomic_init_marker(void *obj, unsigned long long value);
+
 void atomic_thread_fence(memory_order order);
 
 void atomic_signal_fence(memory_order order);
 
-_Bool __fc_atomic_is_lock_free(void *obj);
+_Bool __fc_atomic_is_lock_free(void *obj, size_t obj_size);
 
-void __fc_atomic_store_marker(void *object, unsigned long long desired);
+void __fc_atomic_store_marker(void *object, unsigned long long desired,
+                              size_t obj_size);
 
 void __fc_atomic_store_explicit_marker(void *object,
                                        unsigned long long desired,
-                                       memory_order order);
+                                       memory_order order, size_t obj_size);
 
 unsigned long long __fc_atomic_load(void *obj, size_t obj_size);
 
@@ -5621,22 +6306,28 @@ void atomic_flag_clear(atomic_flag volatile *object);
 void atomic_flag_clear_explicit(atomic_flag volatile *object,
                                 memory_order order);
 
+/*@ assigns \nothing; */
 void __fc_atomic_init_marker(void *obj, unsigned long long value)
 {
   return;
 }
 
+/*@ assigns \nothing; */
 void atomic_thread_fence(memory_order order)
 {
   return;
 }
 
+/*@ assigns \nothing; */
 void atomic_signal_fence(memory_order order)
 {
   return;
 }
 
-_Bool __fc_atomic_is_lock_free(void *obj)
+/*@ assigns \result;
+    assigns \result \from (indirect: obj), (indirect: obj_size);
+ */
+_Bool __fc_atomic_is_lock_free(void *obj, size_t obj_size)
 {
   _Bool __retres;
   int tmp;
@@ -5645,18 +6336,30 @@ _Bool __fc_atomic_is_lock_free(void *obj)
   return __retres;
 }
 
-void __fc_atomic_store_marker(void *object, unsigned long long desired)
+/*@ assigns *((char *)object + (0 .. obj_size - 1));
+    assigns *((char *)object + (0 .. obj_size - 1)) \from desired;
+ */
+void __fc_atomic_store_marker(void *object, unsigned long long desired,
+                              size_t obj_size)
 {
   return;
 }
 
+/*@ assigns *((char *)object + (0 .. obj_size - 1));
+    assigns *((char *)object + (0 .. obj_size - 1))
+      \from desired, (indirect: order);
+ */
 void __fc_atomic_store_explicit_marker(void *object,
                                        unsigned long long desired,
-                                       memory_order order)
+                                       memory_order order, size_t obj_size)
 {
   return;
 }
 
+/*@ assigns \result;
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_load(void *obj, size_t obj_size)
 {
   unsigned long long __retres;
@@ -5684,11 +6387,16 @@ unsigned long long __fc_atomic_load(void *obj, size_t obj_size)
             __retres = *((atomic_ullong volatile *)obj);
             goto return_label;
           }
-          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",50,"0");
+          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",53,"0");
   __retres = (unsigned long long)0;
   return_label: return __retres;
 }
 
+/*@ assigns \result;
+    assigns \result
+      \from *((char *)object + (0 .. obj_size - 1)), (indirect: order),
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_load_explicit(void *object,
                                              memory_order order,
                                              size_t obj_size)
@@ -5698,6 +6406,14 @@ unsigned long long __fc_atomic_load_explicit(void *object,
   return tmp;
 }
 
+/*@ assigns \result, *((char *)obj + (0 .. obj_size - 1));
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), desired,
+            (indirect: obj_size);
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), desired,
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_exchange(void *obj,
                                         unsigned long long desired,
                                         size_t obj_size)
@@ -5727,10 +6443,18 @@ unsigned long long __fc_atomic_exchange(void *obj,
             r = *((atomic_ullong volatile *)obj);
             *((atomic_ullong volatile *)obj) = desired;
           }
-          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",79,"0");
+          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",82,"0");
   return r;
 }
 
+/*@ assigns \result, *((char *)object + (0 .. obj_size - 1));
+    assigns \result
+      \from *((char *)object + (0 .. obj_size - 1)), desired,
+            (indirect: order), (indirect: obj_size);
+    assigns *((char *)object + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)), desired,
+            (indirect: order), (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_exchange_explicit(void *object,
                                                  unsigned long long desired,
                                                  memory_order order,
@@ -5741,6 +6465,21 @@ unsigned long long __fc_atomic_exchange_explicit(void *object,
   return tmp;
 }
 
+/*@ assigns *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), \result;
+    assigns *((char *)object + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), desired,
+            (indirect: obj_size);
+    assigns *((char *)expected + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), desired,
+            (indirect: obj_size);
+    assigns \result
+      \from (indirect: *((char *)object + (0 .. obj_size - 1))),
+            (indirect: *((char *)expected + (0 .. obj_size - 1))),
+            (indirect: obj_size);
+ */
 _Bool __fc_atomic_compare_exchange_strong(void *object, void *expected,
                                           unsigned long long desired,
                                           size_t obj_size)
@@ -5753,6 +6492,21 @@ _Bool __fc_atomic_compare_exchange_strong(void *object, void *expected,
   return __retres;
 }
 
+/*@ assigns *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), \result;
+    assigns *((char *)object + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), desired,
+            (indirect: success), (indirect: failure), (indirect: obj_size);
+    assigns *((char *)expected + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), desired,
+            (indirect: success), (indirect: failure), (indirect: obj_size);
+    assigns \result
+      \from (indirect: *((char *)object + (0 .. obj_size - 1))),
+            (indirect: *((char *)expected + (0 .. obj_size - 1))),
+            (indirect: success), (indirect: failure), (indirect: obj_size);
+ */
 _Bool __fc_atomic_compare_exchange_strong_explicit(void *object,
                                                    void *expected,
                                                    unsigned long long desired,
@@ -5765,6 +6519,21 @@ _Bool __fc_atomic_compare_exchange_strong_explicit(void *object,
   return tmp;
 }
 
+/*@ assigns *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), \result;
+    assigns *((char *)object + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), desired,
+            (indirect: obj_size);
+    assigns *((char *)expected + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), desired,
+            (indirect: obj_size);
+    assigns \result
+      \from (indirect: *((char *)object + (0 .. obj_size - 1))),
+            (indirect: *((char *)expected + (0 .. obj_size - 1))),
+            (indirect: desired), (indirect: obj_size);
+ */
 _Bool __fc_atomic_compare_exchange_weak(void *object, void *expected,
                                         unsigned long long desired,
                                         size_t obj_size)
@@ -5774,6 +6543,22 @@ _Bool __fc_atomic_compare_exchange_weak(void *object, void *expected,
   return tmp;
 }
 
+/*@ assigns *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), \result;
+    assigns *((char *)object + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), desired,
+            (indirect: success), (indirect: failure), (indirect: obj_size);
+    assigns *((char *)expected + (0 .. obj_size - 1))
+      \from *((char *)object + (0 .. obj_size - 1)),
+            *((char *)expected + (0 .. obj_size - 1)), desired,
+            (indirect: success), (indirect: failure), (indirect: obj_size);
+    assigns \result
+      \from (indirect: *((char *)object + (0 .. obj_size - 1))),
+            (indirect: *((char *)expected + (0 .. obj_size - 1))),
+            (indirect: desired), (indirect: success), (indirect: failure),
+            (indirect: obj_size);
+ */
 _Bool __fc_atomic_compare_exchange_weak_explicit(void *object,
                                                  void *expected,
                                                  unsigned long long desired,
@@ -5786,6 +6571,14 @@ _Bool __fc_atomic_compare_exchange_weak_explicit(void *object,
   return tmp;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_add(void *obj,
                                          unsigned long long operand,
                                          size_t obj_size)
@@ -5815,10 +6608,18 @@ unsigned long long __fc_atomic_fetch_add(void *obj,
             r = *((atomic_ullong volatile *)obj);
             *((atomic_ullong volatile *)obj) += operand;
           }
-          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",139,"0");
+          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",142,"0");
   return r;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_add_explicit(void *obj,
                                                   unsigned long long operand,
                                                   memory_order order,
@@ -5829,6 +6630,14 @@ unsigned long long __fc_atomic_fetch_add_explicit(void *obj,
   return tmp;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_sub(void *obj,
                                          unsigned long long operand,
                                          size_t obj_size)
@@ -5858,10 +6667,18 @@ unsigned long long __fc_atomic_fetch_sub(void *obj,
             r = *((atomic_ullong volatile *)obj);
             *((atomic_ullong volatile *)obj) -= operand;
           }
-          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",163,"0");
+          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",166,"0");
   return r;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_sub_explicit(void *obj,
                                                   unsigned long long operand,
                                                   memory_order order,
@@ -5872,6 +6689,14 @@ unsigned long long __fc_atomic_fetch_sub_explicit(void *obj,
   return tmp;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_or(void *obj,
                                         unsigned long long operand,
                                         size_t obj_size)
@@ -5901,10 +6726,18 @@ unsigned long long __fc_atomic_fetch_or(void *obj,
             r = *((atomic_ullong volatile *)obj);
             *((atomic_ullong volatile *)obj) |= operand;
           }
-          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",187,"0");
+          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",190,"0");
   return r;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_or_explicit(void *obj,
                                                  unsigned long long operand,
                                                  memory_order order,
@@ -5915,6 +6748,14 @@ unsigned long long __fc_atomic_fetch_or_explicit(void *obj,
   return tmp;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_xor(void *obj,
                                          unsigned long long operand,
                                          size_t obj_size)
@@ -5944,10 +6785,18 @@ unsigned long long __fc_atomic_fetch_xor(void *obj,
             r = *((atomic_ullong volatile *)obj);
             *((atomic_ullong volatile *)obj) ^= operand;
           }
-          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",217,"0");
+          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",220,"0");
   return r;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_xor_explicit(void *obj,
                                                   unsigned long long operand,
                                                   memory_order order,
@@ -5958,6 +6807,14 @@ unsigned long long __fc_atomic_fetch_xor_explicit(void *obj,
   return tmp;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand,
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_and(void *obj,
                                          unsigned long long operand,
                                          size_t obj_size)
@@ -5987,10 +6844,18 @@ unsigned long long __fc_atomic_fetch_and(void *obj,
             r = *((atomic_ullong volatile *)obj);
             *((atomic_ullong volatile *)obj) &= operand;
           }
-          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",247,"0");
+          else __FC_assert(0 != 0,"FRAMAC_SHARE/libc/stdatomic.c",250,"0");
   return r;
 }
 
+/*@ assigns *((char *)obj + (0 .. obj_size - 1)), \result;
+    assigns *((char *)obj + (0 .. obj_size - 1))
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+    assigns \result
+      \from *((char *)obj + (0 .. obj_size - 1)), operand, (indirect: order),
+            (indirect: obj_size);
+ */
 unsigned long long __fc_atomic_fetch_and_explicit(void *obj,
                                                   unsigned long long operand,
                                                   memory_order order,
@@ -6001,6 +6866,10 @@ unsigned long long __fc_atomic_fetch_and_explicit(void *obj,
   return tmp;
 }
 
+/*@ assigns *object, \result;
+    assigns *object \from *object;
+    assigns \result \from (indirect: object);
+ */
 _Bool atomic_flag_test_and_set(atomic_flag volatile *object)
 {
   _Bool r = (_Bool)((int)object->__fc_val != 0);
@@ -6008,6 +6877,10 @@ _Bool atomic_flag_test_and_set(atomic_flag volatile *object)
   return r;
 }
 
+/*@ assigns *object, \result;
+    assigns *object \from *object, (indirect: order);
+    assigns \result \from (indirect: object), (indirect: order);
+ */
 _Bool atomic_flag_test_and_set_explicit(atomic_flag volatile *object,
                                         memory_order order)
 {
@@ -6016,12 +6889,16 @@ _Bool atomic_flag_test_and_set_explicit(atomic_flag volatile *object,
   return r;
 }
 
+/*@ assigns *object;
+    assigns *object \from *object; */
 void atomic_flag_clear(atomic_flag volatile *object)
 {
   object->__fc_val = (unsigned char)0;
   return;
 }
 
+/*@ assigns *object;
+    assigns *object \from *object, (indirect: order); */
 void atomic_flag_clear_explicit(atomic_flag volatile *object,
                                 memory_order order)
 {
@@ -6179,18 +7056,13 @@ extern int setvbuf(FILE * restrict stream, char * restrict buf, int mode,
 extern int vfprintf(FILE * restrict stream, char const * restrict format,
                     va_list arg);
 
-/*@ assigns *stream;
-    assigns *stream \from *(format + (..)), *stream; */
-extern int vfscanf(FILE * restrict stream, char const * restrict format,
-                   va_list arg);
+int vfscanf(FILE * restrict stream, char const * restrict format, va_list arg);
 
 /*@ assigns *__fc_stdout;
     assigns *__fc_stdout \from arg; */
 extern int vprintf(char const * restrict format, va_list arg);
 
-/*@ assigns *__fc_stdin;
-    assigns *__fc_stdin \from *(format + (..)); */
-extern int vscanf(char const * restrict format, va_list arg);
+int vscanf(char const * restrict format, va_list arg);
 
 /*@ assigns *(s + (0 .. n - 1));
     assigns *(s + (0 .. n - 1)) \from *(format + (..)), arg;
@@ -6515,6 +7387,8 @@ FILE *fmemopen(void * restrict buf, size_t size, char const * restrict mode);
 
 int asprintf(char **strp, char const *fmt, void * const *__va_params);
 
+int vasprintf(char **strp, char const *fmt, va_list ap);
+
 FILE __fc_initial_stdout =
   {.__fc_FILE_id = (unsigned int)1, .__fc_FILE_data = 0U};
 FILE *__fc_stdout = & __fc_initial_stdout;
@@ -6524,7 +7398,10 @@ FILE *__fc_stderr = & __fc_initial_stderr;
 FILE __fc_initial_stdin =
   {.__fc_FILE_id = (unsigned int)0, .__fc_FILE_data = 0U};
 FILE *__fc_stdin = & __fc_initial_stdin;
-/*@ requires valid_mode: valid_read_string(mode); */
+/*@ requires valid_mode: valid_read_string(mode);
+    assigns \result;
+    assigns \result \from *(mode + (0 .. strlen{Old}(mode)));
+ */
 static _Bool is_valid_mode(char const *mode)
 {
   _Bool __retres;
@@ -6561,6 +7438,12 @@ static _Bool is_valid_mode(char const *mode)
   return_label: return __retres;
 }
 
+/*@ assigns *(*lineptr + (0 .. *n - 1)), *n, *stream, \result;
+    assigns *(*lineptr + (0 .. *n - 1)) \from *stream;
+    assigns *n \from *stream;
+    assigns *stream \from *stream;
+    assigns \result \from *stream;
+ */
 ssize_t getline(char **lineptr, size_t *n, FILE *stream)
 {
   ssize_t __retres;
@@ -6660,21 +7543,19 @@ ssize_t getline(char **lineptr, size_t *n, FILE *stream)
 
 /*@ requires valid_strp: \valid(strp);
     requires valid_fmt: valid_read_string(fmt);
-    ensures result_error_or_written_byes: \result ≡ -1 ∨ \result ≥ 0;
+    ensures result_error_or_written_bytes: \result ≡ -1 ∨ \result ≥ 0;
     assigns __fc_heap_status, \result, *strp;
     assigns __fc_heap_status
-      \from (indirect: *(fmt + (0 ..))), __fc_heap_status;
+      \from (indirect: *(fmt + (0 ..))), (indirect: ap), __fc_heap_status;
     assigns \result
       \from (indirect: *(fmt + (0 ..))), (indirect: __fc_heap_status);
-    assigns *strp \from *(fmt + (0 ..)), (indirect: __fc_heap_status);
+    assigns *strp \from *(fmt + (0 ..)), ap, (indirect: __fc_heap_status);
     allocates *\old(strp);
  */
-int asprintf(char **strp, char const *fmt, void * const *__va_params)
+int vasprintf(char **strp, char const *fmt, va_list ap)
 {
   int __retres;
-  va_list args;
   int tmp;
-  args = __va_params;
   tmp = Frama_C_interval(1,256);
   size_t len = (size_t)tmp;
   *strp = (char *)malloc(len);
@@ -6688,6 +7569,25 @@ int asprintf(char **strp, char const *fmt, void * const *__va_params)
   return_label: return __retres;
 }
 
+/*@ requires valid_strp: \valid(strp);
+    requires valid_fmt: valid_read_string(fmt);
+    ensures result_error_or_written_bytes: \result ≡ -1 ∨ \result ≥ 0;
+    assigns __fc_heap_status, \result, *strp;
+    assigns __fc_heap_status
+      \from (indirect: *(fmt + (0 ..))), __fc_heap_status;
+    assigns \result
+      \from (indirect: *(fmt + (0 ..))), (indirect: __fc_heap_status);
+    assigns *strp \from *(fmt + (0 ..)), (indirect: __fc_heap_status);
+    allocates *\old(strp);
+ */
+int asprintf(char **strp, char const *fmt, void * const *__va_params)
+{
+  va_list args;
+  args = __va_params;
+  int res = vasprintf(strp,fmt,args);
+  return res;
+}
+
 /*@ requires valid_stream: \valid(stream);
     requires room_s: \valid(s + (0 .. size - 1));
     ensures result_null_or_same: \result ≡ \null ∨ \result ≡ \old(s);
@@ -6856,6 +7756,390 @@ FILE *fmemopen(void * restrict buf, size_t size, char const * restrict mode)
   return_label: return __retres;
 }
 
+/*@ assigns *stream;
+    assigns *stream \from *(format + (..)), *stream; */
+int vfscanf(FILE * restrict stream, char const * restrict format, va_list arg)
+{
+  int __retres;
+  char const *p = format;
+  char conversion_counter = (char)0;
+  while (*p) {
+    if ((int)*p == '%') {
+      enum length_modifier lm = NONE;
+      char asterisks = (char)0;
+      p ++;
+      if ((int)*p == '%') break;
+      while (1) {
+        switch ((int)*p) {
+          case '-': case '+': case ' ': case '#': case '0': break;
+          default: goto post_flags;
+        }
+        p ++;
+      }
+      post_flags:
+      while (1) {
+        if ((int)*p >= '0') {
+          if (! ((int)*p <= '9')) break;
+        }
+        else break;
+        p ++;
+      }
+      if ((int)*p == '*') {
+        asterisks = (char)((int)asterisks + 1);
+        p ++;
+      }
+      if ((int)*p == '.') {
+        p ++;
+        while (1) {
+          if ((int)*p >= '0') {
+            if (! ((int)*p <= '9')) break;
+          }
+          else break;
+          p ++;
+        }
+        if ((int)*p == '*') {
+          asterisks = (char)((int)asterisks + 1);
+          p ++;
+        }
+      }
+      switch ((int)*p) {
+        case 'h': p ++;
+        if ((int)*p == 'h') {
+          p ++;
+          lm = HH;
+        }
+        else lm = H;
+        break;
+        case 'l': p ++;
+        if ((int)*p == 'l') {
+          p ++;
+          lm = LL;
+        }
+        else lm = L;
+        break;
+        case 'j': p ++;
+        lm = J;
+        break;
+        case 'z': p ++;
+        lm = Z;
+        break;
+        case 't': p ++;
+        lm = T;
+        break;
+        case 'L': p ++;
+        lm = UPPER_L;
+        break;
+      }
+      while (asterisks) {
+        int tmp;
+        tmp = *((int *)*arg);
+        arg ++;
+        int ignored = tmp;
+        int tmp_2 = ignored;
+        asterisks = (char)((int)asterisks - 1);
+      }
+      switch ((int)*p) {
+        case 'd': case 'i': ;
+        switch (lm) {
+          int *tmp_0;
+          char *tmp_1;
+          short *tmp_2_0;
+          long *tmp_3;
+          long long *tmp_4;
+          intmax_t *tmp_5;
+          size_t *tmp_6;
+          ptrdiff_t *tmp_7;
+          case NONE:
+          { /* sequence */
+            tmp_0 = *((int **)*arg);
+            arg ++;
+            *tmp_0 = Frama_C_interval(-2147483647 - 1,2147483647);
+          }
+          break;
+          case HH:
+          { /* sequence */
+            tmp_1 = *((char **)*arg);
+            arg ++;
+            *tmp_1 = Frama_C_char_interval((char)(-127 - 1),(char)127);
+          }
+          break;
+          case H:
+          { /* sequence */
+            tmp_2_0 = *((short **)*arg);
+            arg ++;
+            *tmp_2_0 = Frama_C_short_interval((short)(-32767 - 1),
+                                              (short)32767);
+          }
+          break;
+          case L:
+          { /* sequence */
+            tmp_3 = *((long **)*arg);
+            arg ++;
+            *tmp_3 = Frama_C_long_interval(-2147483647L - 1L,2147483647L);
+          }
+          break;
+          case LL: case UPPER_L:
+          { /* sequence */
+            tmp_4 = *((long long **)*arg);
+            arg ++;
+            *tmp_4 = Frama_C_long_long_interval(-9223372036854775807LL - 1LL,
+                                                9223372036854775807LL);
+          }
+          break;
+          case J:
+          { /* sequence */
+            tmp_5 = *((intmax_t **)*arg);
+            arg ++;
+            *tmp_5 = Frama_C_intmax_t_interval(-9223372036854775807LL - 1LL,
+                                               9223372036854775807LL);
+          }
+          break;
+          case Z:
+          { /* sequence */
+            tmp_6 = *((size_t **)*arg);
+            arg ++;
+            *tmp_6 = Frama_C_size_t_interval((size_t)0,4294967295U);
+          }
+          break;
+          case T:
+          { /* sequence */
+            tmp_7 = *((ptrdiff_t **)*arg);
+            arg ++;
+            *tmp_7 = Frama_C_ptrdiff_t_interval(-2147483647 - 1,2147483647);
+          }
+          break;
+        }
+        break;
+        case 'o': case 'u': case 'x': case 'X': ;
+        switch (lm) {
+          unsigned int *tmp_8;
+          unsigned char *tmp_9;
+          unsigned short *tmp_10;
+          unsigned long *tmp_11;
+          unsigned long long *tmp_12;
+          uintmax_t *tmp_13;
+          size_t *tmp_14;
+          ptrdiff_t *tmp_15;
+          case NONE:
+          { /* sequence */
+            tmp_8 = *((unsigned int **)*arg);
+            arg ++;
+            *tmp_8 = Frama_C_unsigned_int_interval((unsigned int)0,
+                                                   4294967295U);
+          }
+          break;
+          case HH:
+          { /* sequence */
+            tmp_9 = *((unsigned char **)*arg);
+            arg ++;
+            *tmp_9 = Frama_C_unsigned_char_interval((unsigned char)0,
+                                                    (unsigned char)255U);
+          }
+          break;
+          case H:
+          { /* sequence */
+            tmp_10 = *((unsigned short **)*arg);
+            arg ++;
+            *tmp_10 = Frama_C_unsigned_short_interval((unsigned short)0,
+                                                      (unsigned short)65535U);
+          }
+          break;
+          case L:
+          { /* sequence */
+            tmp_11 = *((unsigned long **)*arg);
+            arg ++;
+            *tmp_11 = Frama_C_unsigned_long_interval((unsigned long)0,
+                                                     4294967295UL);
+          }
+          break;
+          case LL: case UPPER_L:
+          { /* sequence */
+            tmp_12 = *((unsigned long long **)*arg);
+            arg ++;
+            *tmp_12 = Frama_C_unsigned_long_long_interval((unsigned long long)0,
+                                                          18446744073709551615ULL);
+          }
+          break;
+          case J:
+          { /* sequence */
+            tmp_13 = *((uintmax_t **)*arg);
+            arg ++;
+            *tmp_13 = Frama_C_uintmax_t_interval((uintmax_t)0,
+                                                 18446744073709551615ULL);
+          }
+          break;
+          case Z:
+          { /* sequence */
+            tmp_14 = *((size_t **)*arg);
+            arg ++;
+            *tmp_14 = Frama_C_size_t_interval((size_t)0,4294967295U);
+          }
+          break;
+          case T:
+          { /* sequence */
+            tmp_15 = *((ptrdiff_t **)*arg);
+            arg ++;
+            *tmp_15 = Frama_C_ptrdiff_t_interval(-2147483647 - 1,2147483647);
+          }
+          break;
+        }
+        break;
+        case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a':
+        case 'A':
+        ;
+        switch (lm) {
+          double *tmp_16;
+          case NONE: case L:
+          { /* sequence */
+            tmp_16 = *((double **)*arg);
+            arg ++;
+            *tmp_16 = Frama_C_double_interval(- 0x1.fffffffffffffp+1023,
+                                              0x1.fffffffffffffp+1023);
+          }
+          break;
+          case UPPER_L:
+          {
+            long double *tmp_17;
+            long double volatile vld = (long double)0.0;
+            tmp_17 = *((long double **)*arg);
+            arg ++;
+            *tmp_17 = vld;
+          }
+          break;
+          default: /*@ assert invalid_scanf_specifier: \false; */ ;
+        }
+        break;
+        case 'c': ;
+        switch (lm) {
+          char *tmp_18;
+          wint_t *tmp_19;
+          case NONE:
+          { /* sequence */
+            tmp_18 = *((char **)*arg);
+            arg ++;
+            *tmp_18 = Frama_C_char_interval((char)(-127 - 1),(char)127);
+          }
+          break;
+          case L:
+          { /* sequence */
+            tmp_19 = *((wint_t **)*arg);
+            arg ++;
+            *tmp_19 = Frama_C_wint_t_interval((wint_t)0,4294967295U);
+          }
+          default: /*@ assert invalid_scanf_specifier: \false; */ ;
+        }
+        break;
+        case 's': ;
+        switch (lm) {
+          size_t tmp_20;
+          char *tmp_21;
+          size_t tmp_22;
+          wchar_t *tmp_23;
+          case NONE:
+          { /* sequence */
+            tmp_20 = Frama_C_size_t_interval((size_t)0,4294967295U);
+            tmp_21 = *((char **)*arg);
+            arg ++;
+          }
+          Frama_C_make_unknown(tmp_21,tmp_20);
+          break;
+          case L:
+          { /* sequence */
+            tmp_22 = Frama_C_size_t_interval((size_t)0,
+                                             4294967295U / sizeof(wchar_t));
+            tmp_23 = *((wchar_t **)*arg);
+            arg ++;
+          }
+          Frama_C_make_unknown_wchar(tmp_23,tmp_22);
+          default: /*@ assert invalid_scanf_specifier: \false; */ ;
+        }
+        break;
+        case 'n': ;
+        switch (lm) {
+          int *tmp_24;
+          char *tmp_25;
+          short *tmp_26;
+          long *tmp_27;
+          long long *tmp_28;
+          intmax_t *tmp_29;
+          size_t *tmp_30;
+          ptrdiff_t *tmp_31;
+          case NONE:
+          { /* sequence */
+            tmp_24 = *((int **)*arg);
+            arg ++;
+            *tmp_24 = (int)conversion_counter;
+          }
+          break;
+          case HH:
+          { /* sequence */
+            tmp_25 = *((char **)*arg);
+            arg ++;
+            *tmp_25 = conversion_counter;
+          }
+          break;
+          case H:
+          { /* sequence */
+            tmp_26 = *((short **)*arg);
+            arg ++;
+            *tmp_26 = (short)conversion_counter;
+          }
+          break;
+          case L:
+          { /* sequence */
+            tmp_27 = *((long **)*arg);
+            arg ++;
+            *tmp_27 = (long)conversion_counter;
+          }
+          break;
+          case LL: case UPPER_L:
+          { /* sequence */
+            tmp_28 = *((long long **)*arg);
+            arg ++;
+            *tmp_28 = (long long)conversion_counter;
+          }
+          break;
+          case J:
+          { /* sequence */
+            tmp_29 = *((intmax_t **)*arg);
+            arg ++;
+            *tmp_29 = (intmax_t)conversion_counter;
+          }
+          break;
+          case Z:
+          { /* sequence */
+            tmp_30 = *((size_t **)*arg);
+            arg ++;
+            *tmp_30 = (size_t)conversion_counter;
+          }
+          break;
+          case T:
+          { /* sequence */
+            tmp_31 = *((ptrdiff_t **)*arg);
+            arg ++;
+            *tmp_31 = (ptrdiff_t)conversion_counter;
+          }
+          break;
+        }
+        break;
+      }
+      conversion_counter = (char)((int)conversion_counter + 1);
+    }
+    p ++;
+  }
+  __retres = (int)conversion_counter;
+  return __retres;
+}
+
+/*@ assigns *__fc_stdin;
+    assigns *__fc_stdin \from *(format + (..)); */
+int vscanf(char const * restrict format, va_list arg)
+{
+  int tmp;
+  tmp = vfscanf(__fc_stdin,format,arg);
+  return tmp;
+}
+
 /*@ requires abs_representable: i > -2147483647 - 1;
     assigns \result;
     assigns \result \from i;
@@ -6882,9 +8166,10 @@ int abs(int i)
   return_label: return __retres;
 }
 
-/*@ requires valid_nptr: \valid_read(p);
+/*@ requires valid_nptr: valid_read_string(p);
     assigns \result;
-    assigns \result \from (indirect: p), (indirect: *(p + (0 ..)));
+    assigns \result
+      \from (indirect: p), (indirect: *(p + (0 .. strlen{Old}(p))));
  */
 int atoi(char const *p)
 {
@@ -6980,6 +8265,10 @@ void *calloc(size_t nmemb, size_t size)
 
 static char __fc_env_strings[64];
 static char __fc_initenv_init;
+/*@ assigns __fc_env_strings[0 .. 64 - 1], __fc_env[0 .. 4096 - 1];
+    assigns __fc_env_strings[0 .. 64 - 1] \from Frama_C_entropy_source;
+    assigns __fc_env[0 .. 4096 - 1] \from Frama_C_entropy_source;
+ */
 static void __fc_initenv(void)
 {
   if (! __fc_initenv_init) {
@@ -7001,9 +8290,14 @@ static void __fc_initenv(void)
 }
 
 /*@ requires valid_name: valid_read_string(name);
-    ensures null_or_valid_result: \result ≡ \null ∨ \valid(\result);
+    ensures
+      null_or_valid_result:
+        \result ≡ \null ∨
+        (\valid(\result) ∧ valid_read_string(\result));
     assigns \result;
-    assigns \result \from __fc_env[0 ..], (indirect: name), *(name + (0 ..));
+    assigns \result
+      \from __fc_env[0 ..], (indirect: name),
+            (indirect: *(name + (0 .. strlen{Old}(name))));
  */
 char *getenv(char const *name)
 {
@@ -7047,6 +8341,7 @@ int putenv(char *string)
     tmp_1 = Frama_C_nondet(0,1);
     if (tmp_1) {
       int tmp_0;
+      __fc_errno = 12;
       tmp_0 = Frama_C_interval(-2147483647 - 1,2147483647);
       __retres = tmp_0;
       goto return_label;
@@ -7061,15 +8356,73 @@ int putenv(char *string)
 /*@ requires valid_name: valid_read_string(name);
     requires valid_value: valid_read_string(value);
     ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
-    assigns \result, __fc_env[0 ..];
+    assigns \result, __fc_env[0 ..], __fc_errno, *(__fc_env[0 ..] + (0 ..));
     assigns \result
-      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..))),
-            (indirect: value), (indirect: *(value + (0 ..))),
+      \from __fc_env[0 ..], (indirect: *(name + (0 .. strlen{Old}(name)))),
+            (indirect: *(value + (0 .. strlen{Old}(value)))),
             (indirect: overwrite);
     assigns __fc_env[0 ..]
-      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..))),
-            (indirect: value), (indirect: *(value + (0 ..))),
+      \from __fc_env[0 ..], (indirect: *(name + (0 .. strlen{Old}(name)))),
+            (indirect: *(value + (0 .. strlen{Old}(value)))),
+            (indirect: overwrite);
+    assigns __fc_errno
+      \from __fc_env[0 ..], (indirect: *(name + (0 .. strlen{Old}(name)))),
+            (indirect: *(value + (0 .. strlen{Old}(value)))),
+            (indirect: overwrite);
+    assigns *(__fc_env[0 ..] + (0 ..))
+      \from *(name + (0 .. strlen{Old}(name))),
+            *(value + (0 .. strlen{Old}(value))), (indirect: __fc_env[0 ..]),
             (indirect: overwrite);
+    allocates __fc_env[0 ..];
+    
+    behavior invalid_name:
+      assumes
+        name_empty_or_with_equals_sign:
+          strlen(name) ≡ 0 ∨ strchr(name, '=') ≡ \true;
+      ensures error: \result ≡ -1;
+      ensures errno_set: __fc_errno ≡ 22;
+      assigns \result, __fc_errno;
+      assigns \result \from (indirect: *(name + (0 .. strlen{Old}(name))));
+      assigns __fc_errno
+        \from (indirect: *(name + (0 .. strlen{Old}(name))));
+      allocates \nothing;
+    
+    behavior out_of_memory:
+      assumes
+        not_enough_memory: ¬is_allocable((strlen(name) + strlen(value)) + 2);
+      ensures error: \result ≡ -1;
+      ensures errno_set: __fc_errno ≡ 12;
+      assigns \result, __fc_errno;
+      assigns \result
+        \from (indirect: *(name + (0 .. strlen{Old}(name)))),
+              (indirect: *(value + (0 .. strlen{Old}(value)))),
+              (indirect: overwrite);
+      assigns __fc_errno
+        \from (indirect: *(name + (0 .. strlen{Old}(name)))),
+              (indirect: *(value + (0 .. strlen{Old}(value)))),
+              (indirect: overwrite);
+      allocates \nothing;
+    
+    behavior ok:
+      assumes name_not_empty: strlen(name) > 0;
+      assumes name_has_no_equals_sign: ¬(strchr(name, '=') ≡ \true);
+      assumes
+        enough_memory: is_allocable((strlen(name) + strlen(value)) + 2);
+      ensures ok: \result ≡ 0;
+      assigns \result, __fc_env[0 ..], *(__fc_env[0 ..] + (0 ..));
+      assigns \result
+        \from __fc_env[0 ..], (indirect: *(name + (0 .. strlen{Old}(name)))),
+              (indirect: *(value + (0 .. strlen{Old}(value)))),
+              (indirect: overwrite);
+      assigns __fc_env[0 ..]
+        \from __fc_env[0 ..], (indirect: *(name + (0 .. strlen{Old}(name)))),
+              (indirect: *(value + (0 .. strlen{Old}(value)))),
+              (indirect: overwrite);
+      assigns *(__fc_env[0 ..] + (0 ..))
+        \from *(name + (0 .. strlen{Old}(name))),
+              *(value + (0 .. strlen{Old}(value))),
+              (indirect: __fc_env[0 ..]), (indirect: overwrite);
+      allocates __fc_env[0 ..];
  */
 int setenv(char const *name, char const *value, int overwrite)
 {
@@ -7078,17 +8431,20 @@ int setenv(char const *name, char const *value, int overwrite)
   int tmp_4;
   tmp = strchr(name,'=');
   if (tmp) {
+    __fc_errno = 22;
     __retres = -1;
     goto return_label;
   }
   size_t namelen = strlen(name);
   if (namelen == (size_t)0) {
+    __fc_errno = 22;
     __retres = -1;
     goto return_label;
   }
   __fc_initenv();
   tmp_4 = Frama_C_nondet(0,1);
   if (tmp_4) {
+    __fc_errno = 12;
     __retres = -1;
     goto return_label;
   }
@@ -7111,9 +8467,11 @@ int setenv(char const *name, char const *value, int overwrite)
     ensures result_ok_or_error: \result ≡ 0 ∨ \result ≡ -1;
     assigns \result, __fc_env[0 ..];
     assigns \result
-      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..)));
+      \from __fc_env[0 ..], (indirect: name),
+            (indirect: *(name + (0 .. strlen{Old}(name))));
     assigns __fc_env[0 ..]
-      \from __fc_env[0 ..], (indirect: name), (indirect: *(name + (0 ..)));
+      \from __fc_env[0 ..], (indirect: name),
+            (indirect: *(name + (0 .. strlen{Old}(name))));
  */
 int unsetenv(char const *name)
 {
@@ -7122,11 +8480,13 @@ int unsetenv(char const *name)
   int tmp_2;
   tmp = strchr(name,'=');
   if (tmp) {
+    __fc_errno = 22;
     __retres = -1;
     goto return_label;
   }
   size_t namelen = strlen(name);
   if (namelen == (size_t)0) {
+    __fc_errno = 22;
     __retres = -1;
     goto return_label;
   }
@@ -7312,6 +8672,10 @@ char *realpath(char const * restrict file_name, char * restrict resolved_name)
   return_label: return __retres;
 }
 
+/*@ assigns \result;
+    assigns \result \from *(path + (0 .. strlen{Old}(path)));
+    allocates \result;
+ */
 char *canonicalize_file_name(char const *path)
 {
   char *tmp;
@@ -7580,7 +8944,8 @@ void *memset(void *s, int c, size_t n)
     ensures acsl_c_equiv: \result ≡ strcmp(\old(s1), \old(s2));
     assigns \result;
     assigns \result
-      \from (indirect: *(s1 + (0 ..))), (indirect: *(s2 + (0 ..)));
+      \from (indirect: *(s1 + (0 .. strlen{Old}(s1)))),
+            (indirect: *(s2 + (0 .. strlen{Old}(s1))));
  */
 int strcmp(char const *s1, char const *s2)
 {
@@ -7663,6 +9028,8 @@ int memcmp(void const *s1, void const *s2, size_t n)
   return_label: return __retres;
 }
 
+/*@ assigns \result;
+    assigns \result \from c1, c2; */
 static int char_equal_ignore_case(char c1, char c2)
 {
   int __retres;
@@ -7730,6 +9097,11 @@ int strcasecmp(char const *s1, char const *s2)
 /*@ requires valid_string_src: valid_read_string(src);
     requires valid_string_dest: valid_string(dest);
     requires room_string: \valid(dest + (0 .. strlen(dest) + strlen(src)));
+    requires
+      separation:
+        \separated(
+          dest + (0 .. strlen(dest) + strlen(src)), src + (0 .. strlen(src))
+          );
     ensures
       sum_of_lengths: strlen(\old(dest)) ≡ \old(strlen(dest) + strlen(src));
     ensures
@@ -7762,15 +9134,20 @@ char *strcat(char *dest, char const *src)
 
 /*@ requires valid_nstring_src: valid_read_nstring(src, n);
     requires valid_string_dest: valid_string(dest);
+    requires
+      separation:
+        \separated(
+          dest + (0 .. strlen(dest) + strnlen(src, n)),
+          src + (0 .. strnlen(src, n))
+          );
     ensures result_ptr: \result ≡ \old(dest);
     assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)), \result;
     assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
-      \from *(src + (0 .. n));
+      \from *(src + (0 .. n - 1));
     assigns \result \from dest;
     
     behavior complete:
-      assumes
-        valid_string_src_fits: valid_read_string(src) ∧ strlen(src) ≤ n;
+      assumes src_fits: strnlen(src, n) < n;
       requires
         room_string: \valid((dest + strlen(dest)) + (0 .. strlen(src)));
       ensures
@@ -7781,13 +9158,11 @@ char *strcat(char *dest, char const *src)
               \result;
       assigns
       *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + strlen{Old}(src)))
-        \from *(src + (0 .. strlen{Old}(src)));
+        \from *(src + (0 .. strlen{Old}(src) - 1));
       assigns \result \from dest;
     
     behavior partial:
-      assumes
-        valid_string_src_too_large:
-          ¬(valid_read_string(src) ∧ strlen(src) ≤ n);
+      assumes src_too_large: strnlen(src, n) ≡ n;
       requires room_string: \valid((dest + strlen(dest)) + (0 .. n));
       ensures
         sum_of_bounded_lengths:
@@ -7795,8 +9170,11 @@ char *strcat(char *dest, char const *src)
       assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n)),
               \result;
       assigns *(dest + (strlen{Old}(dest) .. strlen{Old}(dest) + n))
-        \from *(src + (0 .. strlen{Old}(src)));
+        \from *(src + (0 .. n - 1));
       assigns \result \from dest;
+    
+    complete behaviors partial, complete;
+    disjoint behaviors partial, complete;
  */
 char *strncat(char *dest, char const *src, size_t n)
 {
@@ -7904,23 +9282,21 @@ char *strncpy(char *dest, char const *src, size_t n)
     
     behavior found:
       assumes char_found: strchr(s, c) ≡ \true;
+      ensures result_valid_string: valid_read_string(\result);
       ensures result_char: *\result ≡ (char)\old(c);
       ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
       ensures
         result_in_length: \old(s) ≤ \result ≤ \old(s) + strlen(\old(s));
-      ensures result_valid_string: valid_read_string(\result);
       ensures
-        result_first_occur:
+        result_first_occurrence:
           ∀ char *p; \old(s) ≤ p < \result ⇒ *p ≢ (char)\old(c);
     
     behavior not_found:
       assumes char_not_found: ¬(strchr(s, c) ≡ \true);
       ensures result_null: \result ≡ \null;
     
-    behavior default:
-      ensures
-        result_null_or_same_base:
-          \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
+    complete behaviors not_found, found;
+    disjoint behaviors not_found, found;
  */
 char *strchr(char const *s, int c)
 {
@@ -7940,23 +9316,14 @@ char *strchr(char const *s, int c)
 }
 
 /*@ requires valid_string_s: valid_read_string(s);
+    ensures
+      result_null_or_same_base:
+        \result ≡ \null ∨
+        (valid_read_string(\result) ∧
+         \base_addr(\result) ≡ \base_addr(\old(s)));
     assigns \result;
-    assigns \result \from s, *(s + (0 ..)), c;
-    
-    behavior found:
-      assumes char_found: strchr(s, c) ≡ \true;
-      ensures result_char: (int)*\result ≡ \old(c);
-      ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
-      ensures result_valid_string: valid_read_string(\result);
-    
-    behavior not_found:
-      assumes char_not_found: ¬(strchr(s, c) ≡ \true);
-      ensures result_null: \result ≡ \null;
-    
-    behavior default:
-      ensures
-        result_null_or_same_base:
-          \result ≡ \null ∨ \base_addr(\result) ≡ \base_addr(\old(s));
+    assigns \result
+      \from s, (indirect: *(s + (0 .. strlen{Old}(s)))), (indirect: c);
  */
 char *strrchr(char const *s, int c)
 {
@@ -7995,6 +9362,7 @@ char *strrchr(char const *s, int c)
     
     behavior found:
       assumes char_found: memchr((char *)s, c, n) ≡ \true;
+      ensures result_valid_read: \valid_read((char *)\result);
       ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
       ensures result_char: (int)*((char *)\result) ≡ \old(c);
       ensures
@@ -8027,6 +9395,26 @@ void *memchr(void const *s, int c, size_t n)
   return_label: return __retres;
 }
 
+/*@ requires valid: valid_read_or_empty(s, n);
+    requires initialization: \initialized((unsigned char *)s + (0 .. n - 1));
+    requires danglingness: non_escaping(s, n);
+    assigns \result;
+    assigns \result
+      \from s, (indirect: c),
+            (indirect: *((unsigned char *)s + (0 .. n - 1)));
+    
+    behavior found:
+      assumes char_found: memchr((char *)s, c, n) ≡ \true;
+      ensures result_valid_read: \valid_read((char *)\result);
+      ensures result_same_base: \base_addr(\result) ≡ \base_addr(\old(s));
+    
+    behavior not_found:
+      assumes char_not_found: ¬(memchr((char *)s, c, n) ≡ \true);
+      ensures result_null: \result ≡ \null;
+    
+    complete behaviors not_found, found;
+    disjoint behaviors not_found, found;
+ */
 void *memrchr(void const *s, int c, size_t n)
 {
   void *__retres;
@@ -8051,13 +9439,13 @@ void *memrchr(void const *s, int c, size_t n)
     ensures
       result_null_or_in_haystack:
         \result ≡ \null ∨
-        (\subset(\result, \old(haystack) + (0 ..)) ∧
-         \valid_read(\result) ∧
+        (valid_read_string(\result) ∧
+         \base_addr(\result) ≡ \base_addr(\old(haystack)) ∧
          memcmp{Pre, Pre}(\result, \old(needle), strlen(\old(needle))) ≡ 0);
     assigns \result;
     assigns \result
-      \from haystack, (indirect: *(haystack + (0 ..))),
-            (indirect: *(needle + (0 ..)));
+      \from haystack, (indirect: *(haystack + (0 .. strlen{Old}(haystack)))),
+            (indirect: *(needle + (0 .. strlen{Old}(needle))));
  */
 char *strstr(char const *haystack, char const *needle)
 {
@@ -8115,19 +9503,20 @@ char *strerror(int errnum)
     allocates \result;
     
     behavior allocation:
-      assumes can_allocate: is_allocable(strlen(s));
-      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)));
+      assumes can_allocate: is_allocable(strlen(s) + 1);
+      ensures allocation: \fresh{Old, Here}(\result,strlen(\old(s)) + 1);
       ensures
         result_valid_string_and_same_contents:
           valid_string(\result) ∧ strcmp(\result, \old(s)) ≡ 0;
       assigns __fc_heap_status, \result;
-      assigns __fc_heap_status \from (indirect: s), __fc_heap_status;
+      assigns __fc_heap_status
+        \from __fc_heap_status, (indirect: *(s + (0 .. strlen{Old}(s))));
       assigns \result
         \from (indirect: *(s + (0 .. strlen{Old}(s)))),
               (indirect: __fc_heap_status);
     
     behavior no_allocation:
-      assumes cannot_allocate: ¬is_allocable(strlen(s));
+      assumes cannot_allocate: ¬is_allocable(strlen(s) + 1);
       ensures result_null: \result ≡ \null;
       assigns \result;
       assigns \result \from \nothing;
@@ -8158,13 +9547,12 @@ char *strdup(char const *s)
     allocates \result;
     
     behavior allocation:
-      assumes can_allocate: is_allocable(\min(strlen(s), n + 1));
+      assumes can_allocate: is_allocable(strnlen(s, n) + 1);
       ensures
-        allocation:
-          \fresh{Old, Here}(\result,\min(strlen(\old(s)), \old(n) + 1));
+        allocation: \fresh{Old, Here}(\result,strnlen(\old(s), \old(n)) + 1);
       ensures
         result_valid_string_bounded_and_same_prefix:
-          \valid(\result + (0 .. \min(strlen(\old(s)), \old(n)))) ∧
+          \valid(\result + (0 .. strnlen(\old(s), \old(n)))) ∧
           valid_string(\result) ∧ strlen(\result) ≤ \old(n) ∧
           strncmp(\result, \old(s), \old(n)) ≡ 0;
       assigns __fc_heap_status, \result;
@@ -8175,7 +9563,7 @@ char *strdup(char const *s)
               (indirect: __fc_heap_status);
     
     behavior no_allocation:
-      assumes cannot_allocate: ¬is_allocable(\min(strlen(s), n + 1));
+      assumes cannot_allocate: ¬is_allocable(strnlen(s, n) + 1);
       ensures result_null: \result ≡ \null;
       assigns \result;
       assigns \result \from \nothing;
@@ -8870,6 +10258,37 @@ wchar_t *wcsncat(wchar_t *dest, wchar_t const *src, size_t n)
   return dest;
 }
 
+/*@ requires valid_wstring: valid_read_wstring(ws);
+    assigns \result, __fc_heap_status;
+    assigns \result
+      \from (indirect: *(ws + (0 .. wcslen{Old}(ws)))),
+            (indirect: __fc_heap_status);
+    assigns __fc_heap_status
+      \from (indirect: *(ws + (0 .. wcslen{Old}(ws)))), __fc_heap_status;
+    allocates \result;
+    
+    behavior allocation:
+      assumes can_allocate: is_allocable(wcslen(ws));
+      ensures
+        allocation:
+          \fresh{Old, Here}(\result,wcslen(\old(ws)) * sizeof(wchar_t));
+      ensures
+        result_valid_string_and_same_contents:
+          valid_wstring(\result) ∧ wcscmp(\result, \old(ws)) ≡ 0;
+      assigns __fc_heap_status, \result;
+      assigns __fc_heap_status
+        \from (indirect: *(ws + (0 .. wcslen{Old}(ws)))), __fc_heap_status;
+      assigns \result
+        \from (indirect: *(ws + (0 .. wcslen{Old}(ws)))),
+              (indirect: __fc_heap_status);
+    
+    behavior no_allocation:
+      assumes cannot_allocate: ¬is_allocable(wcslen(ws));
+      ensures result_null: \result ≡ \null;
+      assigns \result;
+      assigns \result \from \nothing;
+      allocates \nothing;
+ */
 wchar_t *wcsdup(wchar_t const *ws)
 {
   wchar_t *__retres;
@@ -10378,8 +11797,9 @@ extern int pthread_cond_wait(pthread_cond_t * restrict cond,
     requires valid_routine: \valid_function(start_routine);
     requires valid_null_arg: arg ≡ \null ∨ \valid((char *)arg);
     ensures
-      success_or_error:
-        \result ≡ 0 ∨ \result ≡ 11 ∨ \result ≡ 22 ∨ \result ≡ 1;
+      initialization: success_or_error:
+        (\result ≡ 0 ∧ \initialized(\old(thread))) ∨ \result ≡ 11 ∨
+        \result ≡ 22 ∨ \result ≡ 1;
     assigns *thread, \result;
     assigns *thread \from *attr;
     assigns \result \from (indirect: *attr);
@@ -10493,16 +11913,22 @@ int pthread_setname_np(pthread_t thread, char const *name);
  */
 int pthread_getname_np(pthread_t thread, char *name, size_t len);
 
-/*@ assigns *(env + (0 .. 4)); */
-extern int setjmp(int env[5]);
+/*@ assigns \result;
+    assigns \result \from (indirect: env); */
+extern int setjmp(struct __jmp_buf_tag env[1]);
 
 /*@ ensures never_terminates: \false;
     assigns \nothing; */
-extern void longjmp(int env[5], int val);
+extern void longjmp(struct __jmp_buf_tag env[1], int val);
+
+/*@ assigns \result;
+    assigns \result \from (indirect: env), (indirect: savesigs);
+ */
+extern int sigsetjmp(struct __jmp_buf_tag env[1], int savesigs);
 
 /*@ ensures never_terminates: \false;
     assigns \nothing; */
-extern void siglongjmp(sigjmp_buf env, int val);
+extern void siglongjmp(struct __jmp_buf_tag env[1], int val);
 
 /*@ assigns \result;
     assigns \result \from (indirect: fd), (indirect: request);
diff --git a/tests/libc/oracle/glob_c.res.oracle b/tests/libc/oracle/glob_c.res.oracle
index f2f55900b952817bf69c5ce4d1e0ee8725748d58..91eb904a9baf476445479b6c2d72105531fda702 100644
--- a/tests/libc/oracle/glob_c.res.oracle
+++ b/tests/libc/oracle/glob_c.res.oracle
@@ -31,23 +31,26 @@
   Called from FRAMAC_SHARE/libc/glob.c:77.
 [eva] using specification for function Frama_C_nondet
 [eva] Done for function Frama_C_nondet
+[eva] computing for function Frama_C_nondet <- glob <- main.
+  Called from FRAMAC_SHARE/libc/glob.c:78.
+[eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- glob <- main.
-  Called from FRAMAC_SHARE/libc/glob.c:82.
-[eva] FRAMAC_SHARE/libc/glob.c:82: 
+  Called from FRAMAC_SHARE/libc/glob.c:83.
+[eva] FRAMAC_SHARE/libc/glob.c:83: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function globerr0 <- glob <- main.
-  Called from FRAMAC_SHARE/libc/glob.c:82.
+  Called from FRAMAC_SHARE/libc/glob.c:83.
 [eva] Recording results for globerr0
 [eva] Done for function globerr0
 [eva] Recording results for glob
 [eva] Done for function glob
 [eva] computing for function globfree <- main.
   Called from glob_c.c:31.
-[eva:alarm] FRAMAC_SHARE/libc/glob.c:93: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/glob.c:94: Warning: 
   accessing uninitialized left-value. assert \initialized(&pglob->gl_pathv);
-[eva] FRAMAC_SHARE/libc/glob.c:93: Call to builtin free
-[eva] FRAMAC_SHARE/libc/glob.c:93: 
+[eva] FRAMAC_SHARE/libc/glob.c:94: Call to builtin free
+[eva] FRAMAC_SHARE/libc/glob.c:94: 
   function free: precondition 'freeable' got status valid.
 [eva] Recording results for globfree
 [eva] Done for function globfree
@@ -61,18 +64,21 @@
 [eva] computing for function Frama_C_nondet <- glob <- main.
   Called from FRAMAC_SHARE/libc/glob.c:77.
 [eva] Done for function Frama_C_nondet
+[eva] computing for function Frama_C_nondet <- glob <- main.
+  Called from FRAMAC_SHARE/libc/glob.c:78.
+[eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- glob <- main.
-  Called from FRAMAC_SHARE/libc/glob.c:82.
+  Called from FRAMAC_SHARE/libc/glob.c:83.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/glob.c:82: Reusing old results for call to globerr0
+[eva] FRAMAC_SHARE/libc/glob.c:83: Reusing old results for call to globerr0
 [eva] Recording results for glob
 [eva] Done for function glob
 [eva] computing for function globfree <- main.
   Called from glob_c.c:34.
-[eva:alarm] FRAMAC_SHARE/libc/glob.c:93: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/glob.c:94: Warning: 
   accessing left-value that contains escaping addresses.
   assert ¬\dangling(&pglob->gl_pathv);
-[eva] FRAMAC_SHARE/libc/glob.c:93: Call to builtin free
+[eva] FRAMAC_SHARE/libc/glob.c:94: Call to builtin free
 [eva] Recording results for globfree
 [eva] Done for function globfree
 [eva] computing for function glob <- main.
@@ -89,18 +95,21 @@
 [eva] computing for function Frama_C_nondet <- glob <- main.
   Called from FRAMAC_SHARE/libc/glob.c:77.
 [eva] Done for function Frama_C_nondet
+[eva] computing for function Frama_C_nondet <- glob <- main.
+  Called from FRAMAC_SHARE/libc/glob.c:78.
+[eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- glob <- main.
-  Called from FRAMAC_SHARE/libc/glob.c:82.
+  Called from FRAMAC_SHARE/libc/glob.c:83.
 [eva] Done for function Frama_C_interval
 [eva] computing for function globerr1 <- glob <- main.
-  Called from FRAMAC_SHARE/libc/glob.c:82.
+  Called from FRAMAC_SHARE/libc/glob.c:83.
 [eva] Recording results for globerr1
 [eva] Done for function globerr1
 [eva] Recording results for glob
 [eva] Done for function glob
 [eva] computing for function globfree <- main.
   Called from glob_c.c:37.
-[eva] FRAMAC_SHARE/libc/glob.c:93: Call to builtin free
+[eva] FRAMAC_SHARE/libc/glob.c:94: Call to builtin free
 [eva] Recording results for globfree
 [eva] Done for function globfree
 [eva] computing for function glob <- main.
@@ -116,15 +125,18 @@
 [eva] computing for function Frama_C_nondet <- glob <- main.
   Called from FRAMAC_SHARE/libc/glob.c:77.
 [eva] Done for function Frama_C_nondet
+[eva] computing for function Frama_C_nondet <- glob <- main.
+  Called from FRAMAC_SHARE/libc/glob.c:78.
+[eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- glob <- main.
-  Called from FRAMAC_SHARE/libc/glob.c:82.
+  Called from FRAMAC_SHARE/libc/glob.c:83.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/glob.c:82: Reusing old results for call to globerr1
+[eva] FRAMAC_SHARE/libc/glob.c:83: Reusing old results for call to globerr1
 [eva] Recording results for glob
 [eva] Done for function glob
 [eva] computing for function globfree <- main.
   Called from glob_c.c:41.
-[eva] FRAMAC_SHARE/libc/glob.c:93: Call to builtin free
+[eva] FRAMAC_SHARE/libc/glob.c:94: Call to builtin free
 [eva] Recording results for globfree
 [eva] Done for function globfree
 [eva] Recording results for main
@@ -141,7 +153,8 @@
        &__realloc_glob_l50[0] ; &__realloc_glob_l66_1[0] ;
        &__realloc_glob_l50_0[0] ; &__realloc_glob_l66_2[0] }} or ESCAPINGADDR
     .gl_offs ∈ {1}
-    {.gl_flags; .gl_closedir; .gl_readdir; .gl_opendir; .gl_lstat; .gl_stat} ∈
+    .gl_flags ∈ {1; 8; 16; 24; 257; 264; 272; 280} or UNINITIALIZED
+    {.gl_closedir; .gl_readdir; .gl_opendir; .gl_lstat; .gl_stat} ∈
     UNINITIALIZED
 [eva:final-states] Values at end of function glob:
   Frama_C_entropy_source ∈ [--..--]
@@ -154,7 +167,8 @@
        &__realloc_glob_l50[0] ; &__realloc_glob_l66_1[0] ;
        &__realloc_glob_l50_0[0] ; &__realloc_glob_l66_2[0] }} or UNINITIALIZED or ESCAPINGADDR
     .gl_offs ∈ {1}
-    {.gl_flags; .gl_closedir; .gl_readdir; .gl_opendir; .gl_lstat; .gl_stat} ∈
+    .gl_flags ∈ {1; 8; 16; 24; 257; 264; 272; 280} or UNINITIALIZED
+    {.gl_closedir; .gl_readdir; .gl_opendir; .gl_lstat; .gl_stat} ∈
     UNINITIALIZED
   __retres ∈ {0; 1; 2; 3}
   __realloc_glob_l66[0] ∈ {0} or UNINITIALIZED
@@ -184,7 +198,8 @@
     .gl_pathv ∈
     {{ NULL ; &__realloc_glob_l50_0[0] ; &__realloc_glob_l66_2[0] }} or ESCAPINGADDR
     .gl_offs ∈ {1}
-    {.gl_flags; .gl_closedir; .gl_readdir; .gl_opendir; .gl_lstat; .gl_stat} ∈
+    .gl_flags ∈ {1; 8; 16; 24; 257; 264; 272; 280} or UNINITIALIZED
+    {.gl_closedir; .gl_readdir; .gl_opendir; .gl_lstat; .gl_stat} ∈
     UNINITIALIZED
   __retres ∈ {0}
   __realloc_glob_l66[0] ∈ {0} or UNINITIALIZED
diff --git a/tests/libc/oracle/netdb_c.res.oracle b/tests/libc/oracle/netdb_c.res.oracle
index 55cc38194e3ca106e062c6bb171b8241a1fbb49d..376bef4479ffc054eed551a7d9ed04e68ccf1524 100644
--- a/tests/libc/oracle/netdb_c.res.oracle
+++ b/tests/libc/oracle/netdb_c.res.oracle
@@ -17,9 +17,11 @@
   \return(getenv) == 0 (auto)
   \return(bsearch) == 0 (auto)
   \return(realpath) == 0 (auto)
+  \return(canonicalize_file_name) == 0 (auto)
   \return(getcwd) == 0 (auto)
   \return(ttyname) == 0 (auto)
   \return(memchr) == 0 (auto)
+  \return(memrchr) == 0 (auto)
   \return(memcpy) == 0 (auto)
   \return(mempcpy) == 0 (auto)
   \return(memmove) == 0 (auto)
@@ -39,8 +41,10 @@
   \return(stpcpy) == 0 (auto)
   \return(strcat) == 0 (auto)
   \return(strncat) == 0 (auto)
+  \return(memmem) == 0 (auto)
   \return(strdup) == 0 (auto)
   \return(strndup) == 0 (auto)
+  \return(stpncpy) == 0 (auto)
   \return(strsignal) == 0 (auto)
   \return(bind) == 0 (auto)
   \return(socket) == -1 (auto)
@@ -48,12 +52,12 @@
   \return(inet_addr) == 4294967295 (auto)
   \return(inet_ntoa) == 0 (auto)
   \return(inet_ntop) == 0 (auto)
-  \return(gai_strerror) == 0 (auto)
-  \return(getaddrinfo) == 0 (auto)
-  \return(gethostbyname) == 0 (auto)
   \return(Frama_C_nondet) == 0 (auto)
   \return(Frama_C_nondet_ptr) == 0 (auto)
   \return(Frama_C_malloc_fresh) == 0 (auto)
+  \return(gai_strerror) == 0 (auto)
+  \return(getaddrinfo) == 0 (auto)
+  \return(gethostbyname) == 0 (auto)
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
 [eva] Initial state computed
@@ -61,7 +65,7 @@
   
 [eva] netdb_c.c:25: Call to builtin memset
 [eva] netdb_c.c:25: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] computing for function getaddrinfo <- main.
   Called from netdb_c.c:34.
@@ -140,7 +144,7 @@
   function strcpy: precondition 'room_string' got status valid.
 [eva] FRAMAC_SHARE/libc/netdb.c:74: 
   function strcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:373: 
+[eva] FRAMAC_SHARE/libc/string.h:425: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
 [eva] Done for function strcpy
 [eva] Recording results for getaddrinfo
@@ -196,76 +200,76 @@
 [eva] computing for function gethostbyname <- main.
   Called from netdb_c.c:63.
 [eva] computing for function res_search <- gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:141.
+  Called from FRAMAC_SHARE/libc/netdb.c:145.
 [eva] computing for function Frama_C_char_interval <- res_search <- 
                           gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:99.
+  Called from FRAMAC_SHARE/libc/netdb.c:103.
 [eva] using specification for function Frama_C_char_interval
-[eva] FRAMAC_SHARE/libc/netdb.c:99: 
+[eva] FRAMAC_SHARE/libc/netdb.c:103: 
   function Frama_C_char_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_char_interval
 [eva] computing for function Frama_C_char_interval <- res_search <- 
                           gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:99.
+  Called from FRAMAC_SHARE/libc/netdb.c:103.
 [eva] Done for function Frama_C_char_interval
 [eva] computing for function Frama_C_char_interval <- res_search <- 
                           gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:99.
+  Called from FRAMAC_SHARE/libc/netdb.c:103.
 [eva] Done for function Frama_C_char_interval
-[eva] FRAMAC_SHARE/libc/netdb.c:98: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/netdb.c:102: starting to merge loop iterations
 [eva] computing for function Frama_C_char_interval <- res_search <- 
                           gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:99.
+  Called from FRAMAC_SHARE/libc/netdb.c:103.
 [eva] Done for function Frama_C_char_interval
 [eva] computing for function Frama_C_char_interval <- res_search <- 
                           gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:99.
+  Called from FRAMAC_SHARE/libc/netdb.c:103.
 [eva] Done for function Frama_C_char_interval
 [eva] computing for function Frama_C_char_interval <- res_search <- 
                           gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:99.
+  Called from FRAMAC_SHARE/libc/netdb.c:103.
 [eva] Done for function Frama_C_char_interval
 [eva] computing for function Frama_C_char_interval <- res_search <- 
                           gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:99.
+  Called from FRAMAC_SHARE/libc/netdb.c:103.
 [eva] Done for function Frama_C_char_interval
 [eva] computing for function Frama_C_interval <- res_search <- gethostbyname <- 
                           main.
-  Called from FRAMAC_SHARE/libc/netdb.c:102.
-[eva] FRAMAC_SHARE/libc/netdb.c:102: 
+  Called from FRAMAC_SHARE/libc/netdb.c:106.
+[eva] FRAMAC_SHARE/libc/netdb.c:106: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for res_search
 [eva] Done for function res_search
 [eva] computing for function Frama_C_nondet <- gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:144.
+  Called from FRAMAC_SHARE/libc/netdb.c:148.
 [eva] using specification for function Frama_C_nondet
 [eva] Done for function Frama_C_nondet
 [eva] computing for function inet_addr <- gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:147.
+  Called from FRAMAC_SHARE/libc/netdb.c:151.
 [eva] using specification for function inet_addr
-[eva] FRAMAC_SHARE/libc/netdb.c:147: 
+[eva] FRAMAC_SHARE/libc/netdb.c:151: 
   function inet_addr: precondition 'valid_arg' got status valid.
 [eva] Done for function inet_addr
-[eva] FRAMAC_SHARE/libc/netdb.c:148: Call to builtin memcpy
-[eva] FRAMAC_SHARE/libc/netdb.c:148: 
+[eva] FRAMAC_SHARE/libc/netdb.c:152: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/netdb.c:152: 
   function memcpy: precondition 'valid_dest' got status valid.
-[eva] FRAMAC_SHARE/libc/netdb.c:148: 
+[eva] FRAMAC_SHARE/libc/netdb.c:152: 
   function memcpy: precondition 'valid_src' got status valid.
-[eva] FRAMAC_SHARE/libc/netdb.c:148: 
+[eva] FRAMAC_SHARE/libc/netdb.c:152: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] computing for function strncpy <- gethostbyname <- main.
-  Called from FRAMAC_SHARE/libc/netdb.c:149.
+  Called from FRAMAC_SHARE/libc/netdb.c:153.
 [eva] using specification for function strncpy
-[eva] FRAMAC_SHARE/libc/netdb.c:149: 
+[eva] FRAMAC_SHARE/libc/netdb.c:153: 
   function strncpy: precondition 'valid_nstring_src' got status valid.
-[eva] FRAMAC_SHARE/libc/netdb.c:149: 
+[eva] FRAMAC_SHARE/libc/netdb.c:153: 
   function strncpy: precondition 'room_nstring' got status valid.
-[eva] FRAMAC_SHARE/libc/netdb.c:149: 
+[eva] FRAMAC_SHARE/libc/netdb.c:153: 
   function strncpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:389: 
+[eva] FRAMAC_SHARE/libc/string.h:441: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
 [eva] Done for function strncpy
 [eva] Recording results for gethostbyname
@@ -318,8 +322,8 @@
 [eva:final-states] Values at end of function main:
   __fc_errno ∈ [--..--]
   __fc_heap_status ∈ [--..--]
-  __fc_fds[0..1023] ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
+  __fc_fds[0..1023] ∈ [--..--]
   __fc_sockfds[0..1023] ∈ [--..--]
   __fc_socket_counter ∈ [--..--]
   __fc_ghbn.host.h_name ∈ {{ NULL ; &__fc_ghbn.hostbuf[0] }}
diff --git a/tests/libc/oracle/pthread_h.1.res.oracle b/tests/libc/oracle/pthread_h.1.res.oracle
deleted file mode 100644
index e9962e514fbafdf75537930f75b0d121b8272671..0000000000000000000000000000000000000000
--- a/tests/libc/oracle/pthread_h.1.res.oracle
+++ /dev/null
@@ -1,94 +0,0 @@
-[kernel] Parsing pthread_h.c (with preprocessing)
-[eva] Analyzing a complete application starting at main
-[eva] Computing initial state
-[eva] Initial state computed
-[eva:initial-state] Values of globals at initialization
-  retval ∈ {0}
-  v ∈ [--..--]
-[eva] computing for function pthread_create <- main.
-  Called from pthread_h.c:23.
-[eva] using specification for function pthread_create
-[eva] pthread_h.c:23: 
-  function pthread_create: precondition 'valid_thread' got status valid.
-[eva] pthread_h.c:23: 
-  function pthread_create: precondition 'valid_null_attr' got status valid.
-[eva] pthread_h.c:23: 
-  function pthread_create: precondition 'valid_routine' got status valid.
-[eva] pthread_h.c:23: 
-  function pthread_create: precondition 'valid_null_arg' got status valid.
-[eva] Done for function pthread_create
-[eva] computing for function printf_va_2 <- main.
-  Called from pthread_h.c:25.
-[eva] using specification for function printf_va_2
-[eva] pthread_h.c:25: function printf_va_2: precondition got status valid.
-[eva] Done for function printf_va_2
-[eva] computing for function printf_va_3 <- main.
-  Called from pthread_h.c:28.
-[eva] using specification for function printf_va_3
-[eva] pthread_h.c:28: function printf_va_3: precondition got status valid.
-[eva] Done for function printf_va_3
-[eva:alarm] pthread_h.c:29: Warning: 
-  accessing uninitialized left-value. assert \initialized(&thread);
-[eva] computing for function pthread_setname_np <- main.
-  Called from pthread_h.c:29.
-[eva] using specification for function pthread_setname_np
-[eva] pthread_h.c:29: 
-  function pthread_setname_np: precondition 'valid_name' got status valid.
-[eva] Done for function pthread_setname_np
-[eva] computing for function pthread_getname_np <- main.
-  Called from pthread_h.c:32.
-[eva] using specification for function pthread_getname_np
-[eva] pthread_h.c:32: 
-  function pthread_getname_np: precondition 'valid_name' got status valid.
-[eva] Done for function pthread_getname_np
-[eva] computing for function printf_va_4 <- main.
-  Called from pthread_h.c:33.
-[eva] using specification for function printf_va_4
-[eva:alarm] pthread_h.c:33: Warning: 
-  function printf_va_4: precondition valid_read_string(param0) got status unknown.
-[eva] pthread_h.c:33: 
-  function printf_va_4: precondition valid_read_string(format) got status valid.
-[eva] Done for function printf_va_4
-[eva] computing for function start_routine <- main.
-  Called from pthread_h.c:38.
-[eva] computing for function printf_va_1 <- start_routine <- main.
-  Called from pthread_h.c:14.
-[eva] using specification for function printf_va_1
-[eva] pthread_h.c:14: function printf_va_1: precondition got status valid.
-[eva] Done for function printf_va_1
-[eva] Recording results for start_routine
-[eva] Done for function start_routine
-[eva] computing for function pthread_join <- main.
-  Called from pthread_h.c:40.
-[eva] using specification for function pthread_join
-[eva] pthread_h.c:40: 
-  function pthread_join: precondition 'valid_or_null_retval' got status valid.
-[eva] Done for function pthread_join
-[eva] computing for function printf_va_5 <- main.
-  Called from pthread_h.c:42.
-[eva] using specification for function printf_va_5
-[eva] pthread_h.c:42: function printf_va_5: precondition got status valid.
-[eva] Done for function printf_va_5
-[eva:alarm] pthread_h.c:45: Warning: 
-  out of bounds read. assert \valid_read(retv);
-[eva] computing for function printf_va_6 <- main.
-  Called from pthread_h.c:45.
-[eva] using specification for function printf_va_6
-[eva] pthread_h.c:45: function printf_va_6: precondition got status valid.
-[eva] Done for function printf_va_6
-[eva] Recording results for main
-[eva] Done for function main
-[eva] ====== VALUES COMPUTED ======
-[eva:final-states] Values at end of function start_routine:
-  retval ∈ {43}
-  __retres ∈ {{ (void *)&retval }}
-  S___fc_stdout[0..1] ∈ [--..--]
-[eva:final-states] Values at end of function main:
-  retval ∈ {0; 43}
-  thread ∈ [--..--] or UNINITIALIZED
-  thread_arg ∈ {42}
-  r ∈ [--..--]
-  buf[0..15] ∈ [--..--] or UNINITIALIZED
-  retv ∈ {{ NULL + [--..--] ; &retval }} or UNINITIALIZED
-  __retres ∈ {0; 1; 2}
-  S___fc_stdout[0..1] ∈ [--..--]
diff --git a/tests/libc/oracle/pthread_h.2.res.oracle b/tests/libc/oracle/pthread_h.2.res.oracle
deleted file mode 100644
index e4df7ae1f77abe53df109934c2223f2a686334f3..0000000000000000000000000000000000000000
--- a/tests/libc/oracle/pthread_h.2.res.oracle
+++ /dev/null
@@ -1,10 +0,0 @@
-[kernel] Parsing pthread_h.c (with preprocessing)
-[kernel] pthread_h.c:49: User Error: 
-  cannot perform the following comparison thread == 0
-  47      // Test non-portable usage of pthread_t
-  48    #ifdef NON_PORTABLE
-  49      if (thread == 0) {
-              ^^^^^^^^^^^
-  50        return 2;
-  51      }
-[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/libc/oracle/pthread_h.0.res.oracle b/tests/libc/oracle/pthread_h.res.oracle
similarity index 72%
rename from tests/libc/oracle/pthread_h.0.res.oracle
rename to tests/libc/oracle/pthread_h.res.oracle
index 41d84474ca4898b748bbbbfc0b39a62bc8906c28..d2d451907e89b55691ef2169aa49bd1e01e6264e 100644
--- a/tests/libc/oracle/pthread_h.0.res.oracle
+++ b/tests/libc/oracle/pthread_h.res.oracle
@@ -6,73 +6,85 @@
   retval ∈ {0}
   v ∈ [--..--]
 [eva] computing for function pthread_create <- main.
-  Called from pthread_h.c:23.
+  Called from pthread_h.c:20.
 [eva] using specification for function pthread_create
-[eva] pthread_h.c:23: 
+[eva] pthread_h.c:20: 
   function pthread_create: precondition 'valid_thread' got status valid.
-[eva] pthread_h.c:23: 
+[eva] pthread_h.c:20: 
   function pthread_create: precondition 'valid_null_attr' got status valid.
-[eva] pthread_h.c:23: 
+[eva] pthread_h.c:20: 
   function pthread_create: precondition 'valid_routine' got status valid.
-[eva] pthread_h.c:23: 
+[eva] pthread_h.c:20: 
   function pthread_create: precondition 'valid_null_arg' got status valid.
 [eva] Done for function pthread_create
 [eva] computing for function printf_va_2 <- main.
-  Called from pthread_h.c:25.
+  Called from pthread_h.c:22.
 [eva] using specification for function printf_va_2
-[eva] pthread_h.c:25: function printf_va_2: precondition got status valid.
+[eva] pthread_h.c:22: function printf_va_2: precondition got status valid.
+[eva] Done for function printf_va_2
+[eva] computing for function printf_va_2 <- main.
+  Called from pthread_h.c:22.
+[eva] Done for function printf_va_2
+[eva] computing for function printf_va_2 <- main.
+  Called from pthread_h.c:22.
 [eva] Done for function printf_va_2
 [eva] computing for function printf_va_3 <- main.
-  Called from pthread_h.c:28.
+  Called from pthread_h.c:25.
 [eva] using specification for function printf_va_3
-[eva] pthread_h.c:28: function printf_va_3: precondition got status valid.
+[eva] pthread_h.c:25: function printf_va_3: precondition got status valid.
 [eva] Done for function printf_va_3
 [eva] computing for function pthread_setname_np <- main.
-  Called from pthread_h.c:29.
+  Called from pthread_h.c:26.
 [eva] using specification for function pthread_setname_np
-[eva] pthread_h.c:29: 
+[eva] pthread_h.c:26: 
   function pthread_setname_np: precondition 'valid_name' got status valid.
 [eva] Done for function pthread_setname_np
 [eva] computing for function pthread_getname_np <- main.
-  Called from pthread_h.c:32.
+  Called from pthread_h.c:29.
 [eva] using specification for function pthread_getname_np
-[eva] pthread_h.c:32: 
+[eva] pthread_h.c:29: 
   function pthread_getname_np: precondition 'valid_name' got status valid.
 [eva] Done for function pthread_getname_np
 [eva] computing for function printf_va_4 <- main.
-  Called from pthread_h.c:33.
+  Called from pthread_h.c:30.
 [eva] using specification for function printf_va_4
-[eva:alarm] pthread_h.c:33: Warning: 
+[eva:alarm] pthread_h.c:30: Warning: 
   function printf_va_4: precondition valid_read_string(param0) got status unknown.
-[eva] pthread_h.c:33: 
+[eva] pthread_h.c:30: 
   function printf_va_4: precondition valid_read_string(format) got status valid.
 [eva] Done for function printf_va_4
 [eva] computing for function start_routine <- main.
-  Called from pthread_h.c:38.
+  Called from pthread_h.c:35.
 [eva] computing for function printf_va_1 <- start_routine <- main.
-  Called from pthread_h.c:14.
+  Called from pthread_h.c:11.
 [eva] using specification for function printf_va_1
-[eva] pthread_h.c:14: function printf_va_1: precondition got status valid.
+[eva] pthread_h.c:11: function printf_va_1: precondition got status valid.
 [eva] Done for function printf_va_1
 [eva] Recording results for start_routine
 [eva] Done for function start_routine
 [eva] computing for function pthread_join <- main.
-  Called from pthread_h.c:40.
+  Called from pthread_h.c:37.
 [eva] using specification for function pthread_join
-[eva] pthread_h.c:40: 
+[eva] pthread_h.c:37: 
   function pthread_join: precondition 'valid_or_null_retval' got status valid.
 [eva] Done for function pthread_join
 [eva] computing for function printf_va_5 <- main.
-  Called from pthread_h.c:42.
+  Called from pthread_h.c:39.
 [eva] using specification for function printf_va_5
-[eva] pthread_h.c:42: function printf_va_5: precondition got status valid.
+[eva] pthread_h.c:39: function printf_va_5: precondition got status valid.
+[eva] Done for function printf_va_5
+[eva] computing for function printf_va_5 <- main.
+  Called from pthread_h.c:39.
+[eva] Done for function printf_va_5
+[eva] computing for function printf_va_5 <- main.
+  Called from pthread_h.c:39.
 [eva] Done for function printf_va_5
-[eva:alarm] pthread_h.c:45: Warning: 
+[eva:alarm] pthread_h.c:42: Warning: 
   out of bounds read. assert \valid_read(retv);
 [eva] computing for function printf_va_6 <- main.
-  Called from pthread_h.c:45.
+  Called from pthread_h.c:42.
 [eva] using specification for function printf_va_6
-[eva] pthread_h.c:45: function printf_va_6: precondition got status valid.
+[eva] pthread_h.c:42: function printf_va_6: precondition got status valid.
 [eva] Done for function printf_va_6
 [eva] Recording results for main
 [eva] Done for function main
diff --git a/tests/libc/oracle/pwd_c.res.oracle b/tests/libc/oracle/pwd_c.res.oracle
index d787033905172d387c156d9ab8d78c90b7cb7f6d..1543ddd5c9d2a7f8de77086b611ac8be61938f60 100644
--- a/tests/libc/oracle/pwd_c.res.oracle
+++ b/tests/libc/oracle/pwd_c.res.oracle
@@ -23,133 +23,133 @@
 [eva] computing for function getpwuid_r <- main.
   Called from pwd_c.c:14.
 [eva] computing for function __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:102.
+  Called from FRAMAC_SHARE/libc/pwd.c:107.
 [eva] computing for function Frama_C_make_unknown <- __fc_getpw_r <- getpwuid_r <- 
                           main.
-  Called from FRAMAC_SHARE/libc/pwd.c:56.
+  Called from FRAMAC_SHARE/libc/pwd.c:61.
 [eva] using specification for function Frama_C_make_unknown
-[eva] FRAMAC_SHARE/libc/pwd.c:56: 
+[eva] FRAMAC_SHARE/libc/pwd.c:61: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_make_unknown <- __fc_getpw_r <- getpwuid_r <- 
                           main.
-  Called from FRAMAC_SHARE/libc/pwd.c:58.
-[eva] FRAMAC_SHARE/libc/pwd.c:58: 
+  Called from FRAMAC_SHARE/libc/pwd.c:63.
+[eva] FRAMAC_SHARE/libc/pwd.c:63: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_make_unknown <- __fc_getpw_r <- getpwuid_r <- 
                           main.
-  Called from FRAMAC_SHARE/libc/pwd.c:60.
-[eva] FRAMAC_SHARE/libc/pwd.c:60: 
+  Called from FRAMAC_SHARE/libc/pwd.c:65.
+[eva] FRAMAC_SHARE/libc/pwd.c:65: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_make_unknown <- __fc_getpw_r <- getpwuid_r <- 
                           main.
-  Called from FRAMAC_SHARE/libc/pwd.c:62.
-[eva] FRAMAC_SHARE/libc/pwd.c:62: 
+  Called from FRAMAC_SHARE/libc/pwd.c:67.
+[eva] FRAMAC_SHARE/libc/pwd.c:67: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_make_unknown <- __fc_getpw_r <- getpwuid_r <- 
                           main.
-  Called from FRAMAC_SHARE/libc/pwd.c:64.
-[eva] FRAMAC_SHARE/libc/pwd.c:64: 
+  Called from FRAMAC_SHARE/libc/pwd.c:69.
+[eva] FRAMAC_SHARE/libc/pwd.c:69: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_interval <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:69.
+  Called from FRAMAC_SHARE/libc/pwd.c:74.
 [eva] using specification for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/pwd.c:69: 
+[eva] FRAMAC_SHARE/libc/pwd.c:74: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:72.
-[eva] FRAMAC_SHARE/libc/pwd.c:72: 
+  Called from FRAMAC_SHARE/libc/pwd.c:77.
+[eva] FRAMAC_SHARE/libc/pwd.c:77: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:73.
-[eva] FRAMAC_SHARE/libc/pwd.c:73: 
+  Called from FRAMAC_SHARE/libc/pwd.c:78.
+[eva] FRAMAC_SHARE/libc/pwd.c:78: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:74.
-[eva] FRAMAC_SHARE/libc/pwd.c:74: 
+  Called from FRAMAC_SHARE/libc/pwd.c:79.
+[eva] FRAMAC_SHARE/libc/pwd.c:79: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/pwd.c:82: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/pwd.c:82: 
+[eva] FRAMAC_SHARE/libc/pwd.c:87: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:87: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:82.
+  Called from FRAMAC_SHARE/libc/pwd.c:87.
 [eva] using specification for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:82: 
+[eva] FRAMAC_SHARE/libc/pwd.c:87: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:82: 
+[eva] FRAMAC_SHARE/libc/pwd.c:87: 
   function strcpy: precondition 'room_string' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:82: 
+[eva] FRAMAC_SHARE/libc/pwd.c:87: 
   function strcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:373: 
+[eva] FRAMAC_SHARE/libc/string.h:425: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
 [eva] Done for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:83: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/pwd.c:83: 
+[eva] FRAMAC_SHARE/libc/pwd.c:88: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:88: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:83.
-[eva] FRAMAC_SHARE/libc/pwd.c:83: 
+  Called from FRAMAC_SHARE/libc/pwd.c:88.
+[eva] FRAMAC_SHARE/libc/pwd.c:88: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:83: 
+[eva] FRAMAC_SHARE/libc/pwd.c:88: 
   function strcpy: precondition 'room_string' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:83: 
+[eva] FRAMAC_SHARE/libc/pwd.c:88: 
   function strcpy: precondition 'separation' got status valid.
 [eva] Done for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:84: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/pwd.c:84: 
+[eva] FRAMAC_SHARE/libc/pwd.c:89: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:89: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:84.
-[eva] FRAMAC_SHARE/libc/pwd.c:84: 
+  Called from FRAMAC_SHARE/libc/pwd.c:89.
+[eva] FRAMAC_SHARE/libc/pwd.c:89: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:84: 
+[eva] FRAMAC_SHARE/libc/pwd.c:89: 
   function strcpy: precondition 'room_string' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:84: 
+[eva] FRAMAC_SHARE/libc/pwd.c:89: 
   function strcpy: precondition 'separation' got status valid.
 [eva] Done for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:85: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/pwd.c:85: 
+[eva] FRAMAC_SHARE/libc/pwd.c:90: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:90: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:85.
-[eva] FRAMAC_SHARE/libc/pwd.c:85: 
+  Called from FRAMAC_SHARE/libc/pwd.c:90.
+[eva] FRAMAC_SHARE/libc/pwd.c:90: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:85: 
+[eva] FRAMAC_SHARE/libc/pwd.c:90: 
   function strcpy: precondition 'room_string' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:85: 
+[eva] FRAMAC_SHARE/libc/pwd.c:90: 
   function strcpy: precondition 'separation' got status valid.
 [eva] Done for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:86: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/pwd.c:86: 
+[eva] FRAMAC_SHARE/libc/pwd.c:91: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:91: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:86.
-[eva] FRAMAC_SHARE/libc/pwd.c:86: 
+  Called from FRAMAC_SHARE/libc/pwd.c:91.
+[eva] FRAMAC_SHARE/libc/pwd.c:91: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:86: 
+[eva] FRAMAC_SHARE/libc/pwd.c:91: 
   function strcpy: precondition 'room_string' got status valid.
-[eva] FRAMAC_SHARE/libc/pwd.c:86: 
+[eva] FRAMAC_SHARE/libc/pwd.c:91: 
   function strcpy: precondition 'separation' got status valid.
 [eva] Done for function strcpy
 [eva] computing for function Frama_C_unsigned_int_interval <- __fc_getpw_r <- 
                           getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:87.
+  Called from FRAMAC_SHARE/libc/pwd.c:92.
 [eva] using specification for function Frama_C_unsigned_int_interval
-[eva] FRAMAC_SHARE/libc/pwd.c:87: 
+[eva] FRAMAC_SHARE/libc/pwd.c:92: 
   function Frama_C_unsigned_int_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_unsigned_int_interval
 [eva] computing for function Frama_C_unsigned_int_interval <- __fc_getpw_r <- 
                           getpwuid_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:88.
-[eva] FRAMAC_SHARE/libc/pwd.c:88: 
+  Called from FRAMAC_SHARE/libc/pwd.c:93.
+[eva] FRAMAC_SHARE/libc/pwd.c:93: 
   function Frama_C_unsigned_int_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_unsigned_int_interval
 [eva] Recording results for __fc_getpw_r
@@ -165,48 +165,48 @@
 [eva:alarm] pwd_c.c:23: Warning: assertion got status unknown.
 [eva] computing for function getpwnam_r <- main.
   Called from pwd_c.c:27.
-[eva] FRAMAC_SHARE/libc/pwd.c:96: assertion got status valid.
+[eva] FRAMAC_SHARE/libc/pwd.c:101: assertion got status valid.
 [eva] computing for function __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:97.
+  Called from FRAMAC_SHARE/libc/pwd.c:102.
 [eva] computing for function Frama_C_interval <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:69.
+  Called from FRAMAC_SHARE/libc/pwd.c:74.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:72.
+  Called from FRAMAC_SHARE/libc/pwd.c:77.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:73.
+  Called from FRAMAC_SHARE/libc/pwd.c:78.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:74.
+  Called from FRAMAC_SHARE/libc/pwd.c:79.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/pwd.c:82: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:87: Call to builtin strlen
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:82.
+  Called from FRAMAC_SHARE/libc/pwd.c:87.
 [eva] Done for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:83: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:88: Call to builtin strlen
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:83.
+  Called from FRAMAC_SHARE/libc/pwd.c:88.
 [eva] Done for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:84: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:89: Call to builtin strlen
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:84.
+  Called from FRAMAC_SHARE/libc/pwd.c:89.
 [eva] Done for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:85: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:90: Call to builtin strlen
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:85.
+  Called from FRAMAC_SHARE/libc/pwd.c:90.
 [eva] Done for function strcpy
-[eva] FRAMAC_SHARE/libc/pwd.c:86: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/pwd.c:91: Call to builtin strlen
 [eva] computing for function strcpy <- __fc_getpw_r <- getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:86.
+  Called from FRAMAC_SHARE/libc/pwd.c:91.
 [eva] Done for function strcpy
 [eva] computing for function Frama_C_unsigned_int_interval <- __fc_getpw_r <- 
                           getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:87.
+  Called from FRAMAC_SHARE/libc/pwd.c:92.
 [eva] Done for function Frama_C_unsigned_int_interval
 [eva] computing for function Frama_C_unsigned_int_interval <- __fc_getpw_r <- 
                           getpwnam_r <- main.
-  Called from FRAMAC_SHARE/libc/pwd.c:88.
+  Called from FRAMAC_SHARE/libc/pwd.c:93.
 [eva] Done for function Frama_C_unsigned_int_interval
 [eva] Recording results for __fc_getpw_r
 [eva] Done for function __fc_getpw_r
diff --git a/tests/libc/oracle/search_h.res.oracle b/tests/libc/oracle/search_h.res.oracle
index b4d4733d9174d88e24ffc687e25e4d15ddd5ee7d..1737610be446fafaaf03fb7a1da4ca61e9d3426c 100644
--- a/tests/libc/oracle/search_h.res.oracle
+++ b/tests/libc/oracle/search_h.res.oracle
@@ -30,7 +30,7 @@
   function strcpy: precondition 'room_string' got status unknown.
 [eva] search_h.c:31: 
   function strcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:373: 
+[eva] FRAMAC_SHARE/libc/string.h:425: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
 [eva] Done for function strcpy
 [eva:alarm] search_h.c:32: Warning: 
diff --git a/tests/libc/oracle/setjmp_h.res.oracle b/tests/libc/oracle/setjmp_h.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..77a4b0f1b9c831f12b2046ec7c55c12c08d00172
--- /dev/null
+++ b/tests/libc/oracle/setjmp_h.res.oracle
@@ -0,0 +1,42 @@
+[kernel] Parsing setjmp_h.c (with preprocessing)
+[eva] Analyzing a complete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  nondet ∈ [--..--]
+  jbuf[0] ∈ [--..--]
+[eva] computing for function come_from <- main.
+  Called from setjmp_h.c:29.
+[eva] computing for function setjmp <- come_from <- main.
+  Called from setjmp_h.c:20.
+[eva] using specification for function setjmp
+[eva] Done for function setjmp
+[eva] computing for function sigsetjmp <- come_from <- main.
+  Called from setjmp_h.c:24.
+[eva] using specification for function sigsetjmp
+[eva] Done for function sigsetjmp
+[eva:alarm] setjmp_h.c:25: Warning: 
+  signed overflow. assert -2147483648 ≤ res1 + res2;
+[eva:alarm] setjmp_h.c:25: Warning: 
+  signed overflow. assert res1 + res2 ≤ 2147483647;
+[eva] Recording results for come_from
+[eva] Done for function come_from
+[eva] computing for function jump <- main.
+  Called from setjmp_h.c:32.
+[eva] computing for function longjmp <- jump <- main.
+  Called from setjmp_h.c:15.
+[eva] using specification for function longjmp
+[eva] Done for function longjmp
+[eva] Recording results for jump
+[eva] Done for function jump
+[eva] Recording results for main
+[eva] Done for function main
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function jump:
+  NON TERMINATING FUNCTION
+[eva:final-states] Values at end of function come_from:
+  res1 ∈ [--..--]
+  res2 ∈ [--..--]
+  __retres ∈ [--..--]
+[eva:final-states] Values at end of function main:
+  __retres ∈ {0}
diff --git a/tests/libc/oracle/socket.0.res.oracle b/tests/libc/oracle/socket.0.res.oracle
index d4f4aeb866fa02aacb1f2c4da06be3ecff46083d..a40bbd1511fc0e79478278af6a4a1cdb09d8ec25 100644
--- a/tests/libc/oracle/socket.0.res.oracle
+++ b/tests/libc/oracle/socket.0.res.oracle
@@ -133,7 +133,7 @@
   Called from socket.c:103.
 [eva] using specification for function memset
 [eva] socket.c:103: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Done for function memset
 [eva] computing for function bind <- test_server_echo <- main.
diff --git a/tests/libc/oracle/socket.1.res.oracle b/tests/libc/oracle/socket.1.res.oracle
index 7724f66078e1eacf9e681f731fc3d8d6f9b0088f..6033f24ffd4818b594b92e3ede1308eab808ba4c 100644
--- a/tests/libc/oracle/socket.1.res.oracle
+++ b/tests/libc/oracle/socket.1.res.oracle
@@ -133,7 +133,7 @@
   Called from socket.c:103.
 [eva] using specification for function memset
 [eva] socket.c:103: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Done for function memset
 [eva] computing for function bind <- test_server_echo <- main.
diff --git a/tests/libc/oracle/stdatomic_c.res.oracle b/tests/libc/oracle/stdatomic_c.res.oracle
index a76fc2013c7f17c8a2c8dd2124a88e55d4ed1feb..210a62db4e66a7990062661e041750ef79335adb 100644
--- a/tests/libc/oracle/stdatomic_c.res.oracle
+++ b/tests/libc/oracle/stdatomic_c.res.oracle
@@ -22,7 +22,7 @@
   Called from stdatomic_c.c:10.
 [eva] computing for function Frama_C_nondet <- __fc_atomic_is_lock_free <- 
                           test_atomic_int <- main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:35.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:36.
 [eva] using specification for function Frama_C_nondet
 [eva] Done for function Frama_C_nondet
 [eva] Recording results for __fc_atomic_is_lock_free
@@ -42,7 +42,7 @@
 [eva] Done for function __fc_atomic_load
 [eva] computing for function __fc_atomic_load_explicit <- test_atomic_int <- main.
   Called from stdatomic_c.c:14.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:57: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:60: 
   Reusing old results for call to __fc_atomic_load
 [eva] Recording results for __fc_atomic_load_explicit
 [eva] Done for function __fc_atomic_load_explicit
@@ -56,7 +56,7 @@
 [eva] computing for function __fc_atomic_exchange <- 
                           __fc_atomic_exchange_explicit <- test_atomic_int <- 
                           main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:87.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:90.
 [eva] Recording results for __fc_atomic_exchange
 [eva] Done for function __fc_atomic_exchange
 [eva] Recording results for __fc_atomic_exchange_explicit
@@ -66,38 +66,38 @@
   Called from stdatomic_c.c:17.
 [eva] computing for function memcmp <- __fc_atomic_compare_exchange_strong <- 
                           test_atomic_int <- main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:93.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:96.
 [eva] using specification for function memcmp
-[eva] FRAMAC_SHARE/libc/stdatomic.c:93: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:96: 
   function memcmp: precondition 'valid_s1' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:93: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:96: 
   function memcmp: precondition 'valid_s2' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:93: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:96: 
   function memcmp: precondition 'initialization,s1' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:93: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:96: 
   function memcmp: precondition 'initialization,s2' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:93: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:96: 
   function memcmp: precondition 'danglingness,s1' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:93: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:96: 
   function memcmp: precondition 'danglingness,s2' got status valid.
 [eva] FRAMAC_SHARE/libc/string.h:63: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Done for function memcmp
-[eva] FRAMAC_SHARE/libc/stdatomic.c:94: Call to builtin memcpy
-[eva] FRAMAC_SHARE/libc/stdatomic.c:94: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:97: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/stdatomic.c:97: 
   function memcpy: precondition 'valid_dest' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:94: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:97: 
   function memcpy: precondition 'valid_src' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:94: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:97: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[eva] FRAMAC_SHARE/libc/stdatomic.c:95: Call to builtin memcpy
-[eva] FRAMAC_SHARE/libc/stdatomic.c:95: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:98: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/stdatomic.c:98: 
   function memcpy: precondition 'valid_dest' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:95: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:98: 
   function memcpy: precondition 'valid_src' got status valid.
-[eva] FRAMAC_SHARE/libc/stdatomic.c:95: 
+[eva] FRAMAC_SHARE/libc/stdatomic.c:98: 
   function memcpy: precondition 'separation' got status valid.
 [eva] Recording results for __fc_atomic_compare_exchange_strong
 [eva] Done for function __fc_atomic_compare_exchange_strong
@@ -107,14 +107,14 @@
 [eva] computing for function __fc_atomic_compare_exchange_strong <- 
                           __fc_atomic_compare_exchange_strong_explicit <- 
                           test_atomic_int <- main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:104.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:107.
 [eva] computing for function memcmp <- __fc_atomic_compare_exchange_strong <- 
                           __fc_atomic_compare_exchange_strong_explicit <- 
                           test_atomic_int <- main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:93.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:96.
 [eva] Done for function memcmp
-[eva] FRAMAC_SHARE/libc/stdatomic.c:94: Call to builtin memcpy
-[eva] FRAMAC_SHARE/libc/stdatomic.c:95: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/stdatomic.c:97: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/stdatomic.c:98: Call to builtin memcpy
 [eva] Recording results for __fc_atomic_compare_exchange_strong
 [eva] Done for function __fc_atomic_compare_exchange_strong
 [eva] Recording results for __fc_atomic_compare_exchange_strong_explicit
@@ -125,14 +125,14 @@
 [eva] computing for function __fc_atomic_compare_exchange_strong <- 
                           __fc_atomic_compare_exchange_weak <- 
                           test_atomic_int <- main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:110.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:113.
 [eva] computing for function memcmp <- __fc_atomic_compare_exchange_strong <- 
                           __fc_atomic_compare_exchange_weak <- 
                           test_atomic_int <- main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:93.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:96.
 [eva] Done for function memcmp
-[eva] FRAMAC_SHARE/libc/stdatomic.c:94: Call to builtin memcpy
-[eva] FRAMAC_SHARE/libc/stdatomic.c:95: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/stdatomic.c:97: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/stdatomic.c:98: Call to builtin memcpy
 [eva] Recording results for __fc_atomic_compare_exchange_strong
 [eva] Done for function __fc_atomic_compare_exchange_strong
 [eva] Recording results for __fc_atomic_compare_exchange_weak
@@ -143,14 +143,14 @@
 [eva] computing for function __fc_atomic_compare_exchange_strong <- 
                           __fc_atomic_compare_exchange_weak_explicit <- 
                           test_atomic_int <- main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:118.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:121.
 [eva] computing for function memcmp <- __fc_atomic_compare_exchange_strong <- 
                           __fc_atomic_compare_exchange_weak_explicit <- 
                           test_atomic_int <- main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:93.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:96.
 [eva] Done for function memcmp
-[eva] FRAMAC_SHARE/libc/stdatomic.c:94: Call to builtin memcpy
-[eva] FRAMAC_SHARE/libc/stdatomic.c:95: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/stdatomic.c:97: Call to builtin memcpy
+[eva] FRAMAC_SHARE/libc/stdatomic.c:98: Call to builtin memcpy
 [eva] Recording results for __fc_atomic_compare_exchange_strong
 [eva] Done for function __fc_atomic_compare_exchange_strong
 [eva] Recording results for __fc_atomic_compare_exchange_weak_explicit
@@ -165,7 +165,7 @@
 [eva] computing for function __fc_atomic_fetch_add <- 
                           __fc_atomic_fetch_add_explicit <- test_atomic_int <- 
                           main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:147.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:150.
 [eva] Recording results for __fc_atomic_fetch_add
 [eva] Done for function __fc_atomic_fetch_add
 [eva] Recording results for __fc_atomic_fetch_add_explicit
@@ -180,7 +180,7 @@
 [eva] computing for function __fc_atomic_fetch_sub <- 
                           __fc_atomic_fetch_sub_explicit <- test_atomic_int <- 
                           main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:171.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:174.
 [eva] Recording results for __fc_atomic_fetch_sub
 [eva] Done for function __fc_atomic_fetch_sub
 [eva] Recording results for __fc_atomic_fetch_sub_explicit
@@ -195,7 +195,7 @@
 [eva] computing for function __fc_atomic_fetch_or <- 
                           __fc_atomic_fetch_or_explicit <- test_atomic_int <- 
                           main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:195.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:198.
 [eva] Recording results for __fc_atomic_fetch_or
 [eva] Done for function __fc_atomic_fetch_or
 [eva] Recording results for __fc_atomic_fetch_or_explicit
@@ -210,7 +210,7 @@
 [eva] computing for function __fc_atomic_fetch_xor <- 
                           __fc_atomic_fetch_xor_explicit <- test_atomic_int <- 
                           main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:225.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:228.
 [eva] Recording results for __fc_atomic_fetch_xor
 [eva] Done for function __fc_atomic_fetch_xor
 [eva] Recording results for __fc_atomic_fetch_xor_explicit
@@ -225,7 +225,7 @@
 [eva] computing for function __fc_atomic_fetch_and <- 
                           __fc_atomic_fetch_and_explicit <- test_atomic_int <- 
                           main.
-  Called from FRAMAC_SHARE/libc/stdatomic.c:255.
+  Called from FRAMAC_SHARE/libc/stdatomic.c:258.
 [eva] Recording results for __fc_atomic_fetch_and
 [eva] Done for function __fc_atomic_fetch_and
 [eva] Recording results for __fc_atomic_fetch_and_explicit
diff --git a/tests/libc/oracle/stdio_c.res.oracle b/tests/libc/oracle/stdio_c.res.oracle
index 71ff8f9d0dd26170d780b01a42df3071ef8bc615..e848a868dcf313d9a95a4e396b439eff58ea26e2 100644
--- a/tests/libc/oracle/stdio_c.res.oracle
+++ b/tests/libc/oracle/stdio_c.res.oracle
@@ -5,352 +5,1057 @@
 [eva:initial-state] Values of globals at initialization
   nondet ∈ [--..--]
 [eva] computing for function fopen <- main.
-  Called from stdio_c.c:12.
+  Called from stdio_c.c:16.
 [eva] using specification for function fopen
-[eva] stdio_c.c:12: 
+[eva] stdio_c.c:16: 
   function fopen: precondition 'valid_filename' got status valid.
-[eva] stdio_c.c:12: function fopen: precondition 'valid_mode' got status valid.
+[eva] stdio_c.c:16: function fopen: precondition 'valid_mode' got status valid.
 [eva] Done for function fopen
 [eva] computing for function getline <- main.
-  Called from stdio_c.c:14.
+  Called from stdio_c.c:18.
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:68.
+  Called from FRAMAC_SHARE/libc/stdio.c:70.
 [eva] using specification for function ferror
-[eva] FRAMAC_SHARE/libc/stdio.c:68: 
+[eva] FRAMAC_SHARE/libc/stdio.c:70: 
   function ferror: precondition 'valid_stream' got status valid.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:68.
+  Called from FRAMAC_SHARE/libc/stdio.c:70.
 [eva] using specification for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:68: 
+[eva] FRAMAC_SHARE/libc/stdio.c:70: 
   function feof: precondition 'valid_stream' got status valid.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:73: Call to builtin malloc
-[eva] FRAMAC_SHARE/libc/stdio.c:73: allocating variable __malloc_getline_l73
+[eva] FRAMAC_SHARE/libc/stdio.c:75: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/stdio.c:75: allocating variable __malloc_getline_l75
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
-[eva] FRAMAC_SHARE/libc/stdio.c:82: 
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
+[eva] FRAMAC_SHARE/libc/stdio.c:84: 
   function ferror: precondition 'valid_stream' got status valid.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
-[eva] FRAMAC_SHARE/libc/stdio.c:82: 
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
+[eva] FRAMAC_SHARE/libc/stdio.c:84: 
   function feof: precondition 'valid_stream' got status valid.
 [eva] Done for function feof
 [eva] computing for function fgetc <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:84.
+  Called from FRAMAC_SHARE/libc/stdio.c:86.
 [eva] computing for function Frama_C_interval <- fgetc <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:174.
+  Called from FRAMAC_SHARE/libc/stdio.c:181.
 [eva] using specification for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdio.c:174: 
+[eva] FRAMAC_SHARE/libc/stdio.c:181: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgetc <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:185.
-[eva] FRAMAC_SHARE/libc/stdio.c:185: 
+  Called from FRAMAC_SHARE/libc/stdio.c:192.
+[eva] FRAMAC_SHARE/libc/stdio.c:192: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgetc <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:190.
-[eva] FRAMAC_SHARE/libc/stdio.c:190: 
+  Called from FRAMAC_SHARE/libc/stdio.c:197.
+[eva] FRAMAC_SHARE/libc/stdio.c:197: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_unsigned_char_interval <- fgetc <- getline <- 
                           main.
-  Called from FRAMAC_SHARE/libc/stdio.c:193.
+  Called from FRAMAC_SHARE/libc/stdio.c:200.
 [eva] using specification for function Frama_C_unsigned_char_interval
-[eva] FRAMAC_SHARE/libc/stdio.c:193: 
+[eva] FRAMAC_SHARE/libc/stdio.c:200: 
   function Frama_C_unsigned_char_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_unsigned_char_interval
 [eva] Recording results for fgetc
 [eva] Done for function fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:83: starting to merge loop iterations
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: Call to builtin realloc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: 
+[eva] FRAMAC_SHARE/libc/stdio.c:85: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: 
   function realloc: precondition 'freeable' got status valid.
-[eva] FRAMAC_SHARE/libc/stdio.c:104: allocating variable __realloc_getline_l104
-[eva] FRAMAC_SHARE/libc/stdio.c:82: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/stdio.c:106: allocating variable __realloc_getline_l106
+[eva] FRAMAC_SHARE/libc/stdio.c:84: starting to merge loop iterations
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: Call to builtin realloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva:alarm] FRAMAC_SHARE/libc/stdio.c:90: Warning: 
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:92: Warning: 
   out of bounds write. assert \valid(*lineptr + tmp_2);
                        (tmp_2 from cur++)
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: Call to builtin realloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: Call to builtin realloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: Call to builtin realloc
-[eva:alarm] FRAMAC_SHARE/libc/stdio.c:93: Warning: 
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: Call to builtin realloc
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:95: Warning: 
   out of bounds write. assert \valid(*lineptr + cur);
 [eva] Recording results for getline
 [eva] Done for function getline
-[eva:alarm] stdio_c.c:15: Warning: assertion 'read_ok' got status unknown.
-[eva] stdio_c.c:16: Call to builtin strlen
-[eva:alarm] stdio_c.c:16: Warning: 
+[eva:alarm] stdio_c.c:19: Warning: assertion 'read_ok' got status unknown.
+[eva] stdio_c.c:20: Call to builtin strlen
+[eva:alarm] stdio_c.c:20: Warning: 
   function strlen: precondition 'valid_string_s' got status unknown.
-[eva:alarm] stdio_c.c:17: Warning: assertion 'read_bytes' got status unknown.
-[eva:alarm] stdio_c.c:18: Warning: 
+[eva:alarm] stdio_c.c:21: Warning: assertion 'read_bytes' got status unknown.
+[eva:alarm] stdio_c.c:22: Warning: 
   assertion 'allocated_enough' got status unknown.
-[eva] stdio_c.c:14: starting to merge loop iterations
+[eva] stdio_c.c:18: starting to merge loop iterations
 [eva] computing for function getline <- main.
-  Called from stdio_c.c:14.
+  Called from stdio_c.c:18.
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:68.
+  Called from FRAMAC_SHARE/libc/stdio.c:70.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:68.
+  Called from FRAMAC_SHARE/libc/stdio.c:70.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:73: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/stdio.c:75: Call to builtin malloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: Call to builtin realloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
 [eva] Recording results for getline
 [eva] Done for function getline
-[eva] stdio_c.c:16: Call to builtin strlen
+[eva] stdio_c.c:20: Call to builtin strlen
 [eva] computing for function getline <- main.
-  Called from stdio_c.c:14.
+  Called from stdio_c.c:18.
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:68.
+  Called from FRAMAC_SHARE/libc/stdio.c:70.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:68.
+  Called from FRAMAC_SHARE/libc/stdio.c:70.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:73: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/stdio.c:75: Call to builtin malloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: Call to builtin realloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
 [eva] Recording results for getline
 [eva] Done for function getline
-[eva] stdio_c.c:16: Call to builtin strlen
+[eva] stdio_c.c:20: Call to builtin strlen
 [eva] computing for function getline <- main.
-  Called from stdio_c.c:14.
+  Called from stdio_c.c:18.
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:68.
+  Called from FRAMAC_SHARE/libc/stdio.c:70.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:68.
+  Called from FRAMAC_SHARE/libc/stdio.c:70.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:73: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/stdio.c:75: Call to builtin malloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:84: Reusing old results for call to fgetc
-[eva] FRAMAC_SHARE/libc/stdio.c:104: Call to builtin realloc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:86: Reusing old results for call to fgetc
+[eva] FRAMAC_SHARE/libc/stdio.c:106: Call to builtin realloc
 [eva] computing for function ferror <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function ferror
 [eva] computing for function feof <- getline <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:82.
+  Called from FRAMAC_SHARE/libc/stdio.c:84.
 [eva] Done for function feof
 [eva] Recording results for getline
 [eva] Done for function getline
-[eva] stdio_c.c:16: Call to builtin strlen
-[eva] stdio_c.c:20: Call to builtin free
-[eva] stdio_c.c:20: function free: precondition 'freeable' got status valid.
+[eva] stdio_c.c:20: Call to builtin strlen
+[eva] stdio_c.c:24: Call to builtin free
+[eva] stdio_c.c:24: function free: precondition 'freeable' got status valid.
 [eva] computing for function fclose <- main.
-  Called from stdio_c.c:21.
+  Called from stdio_c.c:25.
 [eva] using specification for function fclose
-[eva] stdio_c.c:21: 
+[eva] stdio_c.c:25: 
   function fclose: precondition 'valid_stream' got status valid.
 [eva] Done for function fclose
 [eva] computing for function asprintf <- main.
-  Called from stdio_c.c:28.
-[eva] computing for function Frama_C_interval <- asprintf <- main.
+  Called from stdio_c.c:31.
+[eva] computing for function vasprintf <- asprintf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:137.
+[eva] computing for function Frama_C_interval <- vasprintf <- asprintf <- main.
   Called from FRAMAC_SHARE/libc/stdio.c:123.
 [eva] FRAMAC_SHARE/libc/stdio.c:123: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] FRAMAC_SHARE/libc/stdio.c:124: Call to builtin malloc
-[eva] FRAMAC_SHARE/libc/stdio.c:124: allocating variable __malloc_asprintf_l124
-[eva] computing for function Frama_C_make_unknown <- asprintf <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:130.
+[eva] FRAMAC_SHARE/libc/stdio.c:124: allocating variable __malloc_vasprintf_l124
+[eva] computing for function Frama_C_make_unknown <- vasprintf <- asprintf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:129.
 [eva] using specification for function Frama_C_make_unknown
-[eva:alarm] FRAMAC_SHARE/libc/stdio.c:130: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:129: Warning: 
   function Frama_C_make_unknown: precondition 'valid_p' got status unknown.
 [eva] Done for function Frama_C_make_unknown
-[eva:alarm] FRAMAC_SHARE/libc/stdio.c:131: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:130: Warning: 
   out of bounds write. assert \valid(*strp + (size_t)(len - 1U));
+[eva] Recording results for vasprintf
+[eva] Done for function vasprintf
 [eva] Recording results for asprintf
 [eva] Done for function asprintf
 [eva] computing for function printf_va_1 <- main.
-  Called from stdio_c.c:30.
+  Called from stdio_c.c:33.
 [eva] using specification for function printf_va_1
-[eva:alarm] stdio_c.c:30: Warning: 
+[eva:alarm] stdio_c.c:33: Warning: 
   function printf_va_1: precondition valid_read_string(param0) got status unknown.
-[eva] stdio_c.c:30: 
+[eva] stdio_c.c:33: 
   function printf_va_1: precondition valid_read_string(format) got status valid.
 [eva] Done for function printf_va_1
-[eva] stdio_c.c:31: Call to builtin free
-[eva] stdio_c.c:31: function free: precondition 'freeable' got status valid.
+[eva] stdio_c.c:34: Call to builtin free
+[eva] stdio_c.c:34: function free: precondition 'freeable' got status valid.
 [eva] computing for function fmemopen <- main.
-  Called from stdio_c.c:39.
+  Called from stdio_c.c:42.
 [eva] computing for function is_valid_mode <- fmemopen <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:206.
+  Called from FRAMAC_SHARE/libc/stdio.c:213.
 [eva] Recording results for is_valid_mode
 [eva] Done for function is_valid_mode
-[eva] FRAMAC_SHARE/libc/stdio.c:224: Call to builtin malloc
-[eva] FRAMAC_SHARE/libc/stdio.c:224: allocating variable __malloc_fmemopen_l224
+[eva] FRAMAC_SHARE/libc/stdio.c:231: Call to builtin malloc
+[eva] FRAMAC_SHARE/libc/stdio.c:231: allocating variable __malloc_fmemopen_l231
 [eva] computing for function Frama_C_interval <- fmemopen <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:232.
-[eva] FRAMAC_SHARE/libc/stdio.c:232: 
+  Called from FRAMAC_SHARE/libc/stdio.c:239.
+[eva] FRAMAC_SHARE/libc/stdio.c:239: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fmemopen <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:237.
-[eva] FRAMAC_SHARE/libc/stdio.c:237: 
+  Called from FRAMAC_SHARE/libc/stdio.c:244.
+[eva] FRAMAC_SHARE/libc/stdio.c:244: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for fmemopen
 [eva] Done for function fmemopen
 [eva] computing for function fwrite <- main.
-  Called from stdio_c.c:42.
+  Called from stdio_c.c:45.
 [eva] using specification for function fwrite
-[eva] stdio_c.c:42: 
+[eva] stdio_c.c:45: 
   function fwrite: precondition 'valid_ptr_block' got status valid.
-[eva] stdio_c.c:42: 
+[eva] stdio_c.c:45: 
   function fwrite: precondition 'valid_stream' got status valid.
 [eva] Done for function fwrite
-[eva] stdio_c.c:43: assertion got status valid.
+[eva] stdio_c.c:46: assertion got status valid.
 [eva] computing for function getchar <- main.
-  Called from stdio_c.c:46.
+  Called from stdio_c.c:49.
 [eva] computing for function fgetc <- getchar <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:198.
+  Called from FRAMAC_SHARE/libc/stdio.c:205.
 [eva] computing for function Frama_C_interval <- fgetc <- getchar <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:174.
+  Called from FRAMAC_SHARE/libc/stdio.c:181.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgetc <- getchar <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:185.
+  Called from FRAMAC_SHARE/libc/stdio.c:192.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgetc <- getchar <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:190.
+  Called from FRAMAC_SHARE/libc/stdio.c:197.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_unsigned_char_interval <- fgetc <- getchar <- 
                           main.
-  Called from FRAMAC_SHARE/libc/stdio.c:193.
+  Called from FRAMAC_SHARE/libc/stdio.c:200.
 [eva] Done for function Frama_C_unsigned_char_interval
 [eva] Recording results for fgetc
 [eva] Done for function fgetc
 [eva] Recording results for getchar
 [eva] Done for function getchar
-[eva] stdio_c.c:47: Frama_C_show_each_getchar: [-1..255]
-[eva] stdio_c.c:48: Reusing old results for call to fgetc
-[eva] stdio_c.c:49: Frama_C_show_each_fgetc: [-1..255]
+[eva] stdio_c.c:50: Frama_C_show_each_getchar: [-1..255]
+[eva] stdio_c.c:51: Reusing old results for call to fgetc
+[eva] stdio_c.c:52: Frama_C_show_each_fgetc: [-1..255]
 [eva] computing for function fgets <- main.
-  Called from stdio_c.c:51.
+  Called from stdio_c.c:54.
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:136.
-[eva] FRAMAC_SHARE/libc/stdio.c:136: 
+  Called from FRAMAC_SHARE/libc/stdio.c:143.
+[eva] FRAMAC_SHARE/libc/stdio.c:143: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:147.
-[eva] FRAMAC_SHARE/libc/stdio.c:147: 
+  Called from FRAMAC_SHARE/libc/stdio.c:154.
+[eva] FRAMAC_SHARE/libc/stdio.c:154: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:154.
-[eva] FRAMAC_SHARE/libc/stdio.c:154: 
+  Called from FRAMAC_SHARE/libc/stdio.c:161.
+[eva] FRAMAC_SHARE/libc/stdio.c:161: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:160.
-[eva] FRAMAC_SHARE/libc/stdio.c:160: 
+  Called from FRAMAC_SHARE/libc/stdio.c:167.
+[eva] FRAMAC_SHARE/libc/stdio.c:167: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdio.c:151: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/stdio.c:158: starting to merge loop iterations
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:154.
+  Called from FRAMAC_SHARE/libc/stdio.c:161.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:160.
+  Called from FRAMAC_SHARE/libc/stdio.c:167.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:154.
+  Called from FRAMAC_SHARE/libc/stdio.c:161.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:160.
+  Called from FRAMAC_SHARE/libc/stdio.c:167.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:154.
+  Called from FRAMAC_SHARE/libc/stdio.c:161.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:160.
+  Called from FRAMAC_SHARE/libc/stdio.c:167.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:154.
+  Called from FRAMAC_SHARE/libc/stdio.c:161.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- fgets <- main.
-  Called from FRAMAC_SHARE/libc/stdio.c:160.
+  Called from FRAMAC_SHARE/libc/stdio.c:167.
 [eva] Done for function Frama_C_interval
-[eva:alarm] FRAMAC_SHARE/libc/stdio.c:169: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:176: Warning: 
   out of bounds write. assert \valid(s + i);
 [eva] Recording results for fgets
 [eva] Done for function fgets
-[eva:alarm] stdio_c.c:53: Warning: 
+[eva:alarm] stdio_c.c:56: Warning: 
   assertion 'at_least_one_char' got status unknown.
+[eva] computing for function caller_stub_for_vscanf <- main.
+  Called from stdio_c.c:66.
+[eva] computing for function vscanf <- caller_stub_for_vscanf <- main.
+  Called from stdio_c.c:79.
+[eva] computing for function vfscanf <- vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:513.
+[eva] FRAMAC_SHARE/libc/stdio.c:265: starting to merge loop iterations
+[eva] computing for function Frama_C_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:350.
+[eva] FRAMAC_SHARE/libc/stdio.c:350: 
+  function Frama_C_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:256: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/stdio.c:280: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/stdio.c:338: starting to merge loop iterations
+[eva] computing for function Frama_C_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:350.
+[eva] Done for function Frama_C_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:350: Warning: 
+  out of bounds write. assert \valid(tmp_0);
+                       (tmp_0 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:340: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:350: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:350.
+[eva] Done for function Frama_C_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:353: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:353.
+[eva] using specification for function Frama_C_char_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:353: 
+  function Frama_C_char_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_char_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:356: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_short_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:356.
+[eva] using specification for function Frama_C_short_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:356: 
+  function Frama_C_short_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_short_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:356: Warning: 
+  out of bounds write. assert \valid(tmp_2_0);
+                       (tmp_2_0 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:359: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:359.
+[eva] using specification for function Frama_C_long_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:359: 
+  function Frama_C_long_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_long_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:359: Warning: 
+  out of bounds write. assert \valid(tmp_3);
+                       (tmp_3 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:363: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_long_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:364.
+[eva] using specification for function Frama_C_long_long_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:364: 
+  function Frama_C_long_long_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_long_long_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:364: Warning: 
+  out of bounds write. assert \valid(tmp_4);
+                       (tmp_4 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:367: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_intmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:368.
+[eva] using specification for function Frama_C_intmax_t_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:368: 
+  function Frama_C_intmax_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_intmax_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:368: Warning: 
+  out of bounds write. assert \valid(tmp_5);
+                       (tmp_5 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:371: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:371.
+[eva] using specification for function Frama_C_size_t_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:371: 
+  function Frama_C_size_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_size_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:371: Warning: 
+  out of bounds write. assert \valid(tmp_6);
+                       (tmp_6 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:374: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:375.
+[eva] using specification for function Frama_C_ptrdiff_t_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:375: 
+  function Frama_C_ptrdiff_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:375: Warning: 
+  out of bounds write. assert \valid(tmp_7);
+                       (tmp_7 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:385: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_unsigned_int_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:386.
+[eva] using specification for function Frama_C_unsigned_int_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:386: 
+  function Frama_C_unsigned_int_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_unsigned_int_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:386: Warning: 
+  out of bounds write. assert \valid(tmp_8);
+                       (tmp_8 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:389: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_unsigned_char_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:390.
+[eva] FRAMAC_SHARE/libc/stdio.c:390: 
+  function Frama_C_unsigned_char_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_unsigned_char_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:393: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_unsigned_short_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:394.
+[eva] using specification for function Frama_C_unsigned_short_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:394: 
+  function Frama_C_unsigned_short_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_unsigned_short_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:394: Warning: 
+  out of bounds write. assert \valid(tmp_10);
+                       (tmp_10 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:397: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_unsigned_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:398.
+[eva] using specification for function Frama_C_unsigned_long_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:398: 
+  function Frama_C_unsigned_long_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_unsigned_long_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:398: Warning: 
+  out of bounds write. assert \valid(tmp_11);
+                       (tmp_11 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:402: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_unsigned_long_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:403.
+[eva] using specification for function Frama_C_unsigned_long_long_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:403: 
+  function Frama_C_unsigned_long_long_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_unsigned_long_long_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:403: Warning: 
+  out of bounds write. assert \valid(tmp_12);
+                       (tmp_12 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:406: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_uintmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:406.
+[eva] using specification for function Frama_C_uintmax_t_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:406: 
+  function Frama_C_uintmax_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_uintmax_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:406: Warning: 
+  out of bounds write. assert \valid(tmp_13);
+                       (tmp_13 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:409: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:409.
+[eva] FRAMAC_SHARE/libc/stdio.c:409: 
+  function Frama_C_size_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_size_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:409: Warning: 
+  out of bounds write. assert \valid(tmp_14);
+                       (tmp_14 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:412: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:413.
+[eva] FRAMAC_SHARE/libc/stdio.c:413: 
+  function Frama_C_ptrdiff_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:413: Warning: 
+  out of bounds write. assert \valid(tmp_15);
+                       (tmp_15 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:429: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_double_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:429.
+[eva] using specification for function Frama_C_double_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:429: 
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
+[eva] Done for function Frama_C_double_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:429: Warning: 
+  out of bounds write. assert \valid(tmp_16);
+                       (tmp_16 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:435: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:435: Warning: 
+  out of bounds write. assert \valid(tmp_17);
+                       (tmp_17 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:435: Warning: 
+  non-finite long double value. assert \is_finite(vld);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:440: Warning: 
+  assertion 'invalid_scanf_specifier' got status invalid (stopping propagation).
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:447: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:447.
+[eva] FRAMAC_SHARE/libc/stdio.c:447: 
+  function Frama_C_char_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_char_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:450: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_wint_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:450.
+[eva] using specification for function Frama_C_wint_t_interval
+[eva] FRAMAC_SHARE/libc/stdio.c:450: 
+  function Frama_C_wint_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_wint_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:450: Warning: 
+  out of bounds write. assert \valid(tmp_19);
+                       (tmp_19 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:453: Warning: 
+  assertion 'invalid_scanf_specifier' got status invalid (stopping propagation).
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:462.
+[eva] FRAMAC_SHARE/libc/stdio.c:462: 
+  function Frama_C_size_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_size_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:461: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_make_unknown <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:461.
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:461: Warning: 
+  function Frama_C_make_unknown: precondition 'valid_p' got status unknown.
+[eva] Done for function Frama_C_make_unknown
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:467.
+[eva] FRAMAC_SHARE/libc/stdio.c:467: 
+  function Frama_C_size_t_interval: precondition 'order' got status valid.
+[eva] Done for function Frama_C_size_t_interval
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:466: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva] computing for function Frama_C_make_unknown_wchar <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:466.
+[eva] using specification for function Frama_C_make_unknown_wchar
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:466: Warning: 
+  function Frama_C_make_unknown_wchar: precondition 'valid_p' got status unknown.
+[eva] Done for function Frama_C_make_unknown_wchar
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:470: Warning: 
+  assertion 'invalid_scanf_specifier' got status invalid (stopping propagation).
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:477: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:477: Warning: 
+  out of bounds write. assert \valid(tmp_24);
+                       (tmp_24 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:480: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:483: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:483: Warning: 
+  out of bounds write. assert \valid(tmp_26);
+                       (tmp_26 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:486: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:486: Warning: 
+  out of bounds write. assert \valid(tmp_27);
+                       (tmp_27 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:490: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:490: Warning: 
+  out of bounds write. assert \valid(tmp_28);
+                       (tmp_28 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:493: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:493: Warning: 
+  out of bounds write. assert \valid(tmp_29);
+                       (tmp_29 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:496: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:496: Warning: 
+  out of bounds write. assert \valid(tmp_30);
+                       (tmp_30 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:499: Warning: 
+  out of bounds read. assert \valid_read(arg);
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:499: Warning: 
+  out of bounds write. assert \valid(tmp_31);
+                       (tmp_31 from vararg)
+[eva:alarm] FRAMAC_SHARE/libc/stdio.c:256: Warning: 
+  out of bounds read. assert \valid_read(p);
+[eva] FRAMAC_SHARE/libc/stdio.c:291: starting to merge loop iterations
+[eva] computing for function Frama_C_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:350.
+[eva] Done for function Frama_C_interval
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:353.
+[eva] Done for function Frama_C_char_interval
+[eva] computing for function Frama_C_short_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:356.
+[eva] Done for function Frama_C_short_interval
+[eva] computing for function Frama_C_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:359.
+[eva] Done for function Frama_C_long_interval
+[eva] computing for function Frama_C_long_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:364.
+[eva] Done for function Frama_C_long_long_interval
+[eva] computing for function Frama_C_intmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:368.
+[eva] Done for function Frama_C_intmax_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:371.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:375.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva] computing for function Frama_C_unsigned_int_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:386.
+[eva] Done for function Frama_C_unsigned_int_interval
+[eva] computing for function Frama_C_unsigned_char_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:390.
+[eva] Done for function Frama_C_unsigned_char_interval
+[eva] computing for function Frama_C_unsigned_short_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:394.
+[eva] Done for function Frama_C_unsigned_short_interval
+[eva] computing for function Frama_C_unsigned_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:398.
+[eva] Done for function Frama_C_unsigned_long_interval
+[eva] computing for function Frama_C_unsigned_long_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:403.
+[eva] Done for function Frama_C_unsigned_long_long_interval
+[eva] computing for function Frama_C_uintmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:406.
+[eva] Done for function Frama_C_uintmax_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:409.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:413.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva] computing for function Frama_C_double_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:429.
+[eva] Done for function Frama_C_double_interval
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:447.
+[eva] Done for function Frama_C_char_interval
+[eva] computing for function Frama_C_wint_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:450.
+[eva] Done for function Frama_C_wint_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:462.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_make_unknown <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:461.
+[eva] Done for function Frama_C_make_unknown
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:467.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_make_unknown_wchar <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:466.
+[eva] Done for function Frama_C_make_unknown_wchar
+[eva] computing for function Frama_C_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:350.
+[eva] Done for function Frama_C_interval
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:353.
+[eva] Done for function Frama_C_char_interval
+[eva] computing for function Frama_C_short_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:356.
+[eva] Done for function Frama_C_short_interval
+[eva] computing for function Frama_C_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:359.
+[eva] Done for function Frama_C_long_interval
+[eva] computing for function Frama_C_long_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:364.
+[eva] Done for function Frama_C_long_long_interval
+[eva] computing for function Frama_C_intmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:368.
+[eva] Done for function Frama_C_intmax_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:371.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:375.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva] computing for function Frama_C_unsigned_int_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:386.
+[eva] Done for function Frama_C_unsigned_int_interval
+[eva] computing for function Frama_C_unsigned_char_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:390.
+[eva] Done for function Frama_C_unsigned_char_interval
+[eva] computing for function Frama_C_unsigned_short_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:394.
+[eva] Done for function Frama_C_unsigned_short_interval
+[eva] computing for function Frama_C_unsigned_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:398.
+[eva] Done for function Frama_C_unsigned_long_interval
+[eva] computing for function Frama_C_unsigned_long_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:403.
+[eva] Done for function Frama_C_unsigned_long_long_interval
+[eva] computing for function Frama_C_uintmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:406.
+[eva] Done for function Frama_C_uintmax_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:409.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:413.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva] computing for function Frama_C_double_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:429.
+[eva] Done for function Frama_C_double_interval
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:447.
+[eva] Done for function Frama_C_char_interval
+[eva] computing for function Frama_C_wint_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:450.
+[eva] Done for function Frama_C_wint_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:462.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_make_unknown <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:461.
+[eva] Done for function Frama_C_make_unknown
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:467.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_make_unknown_wchar <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:466.
+[eva] Done for function Frama_C_make_unknown_wchar
+[eva] computing for function Frama_C_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:350.
+[eva] Done for function Frama_C_interval
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:353.
+[eva] Done for function Frama_C_char_interval
+[eva] computing for function Frama_C_short_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:356.
+[eva] Done for function Frama_C_short_interval
+[eva] computing for function Frama_C_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:359.
+[eva] Done for function Frama_C_long_interval
+[eva] computing for function Frama_C_long_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:364.
+[eva] Done for function Frama_C_long_long_interval
+[eva] computing for function Frama_C_intmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:368.
+[eva] Done for function Frama_C_intmax_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:371.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:375.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva] computing for function Frama_C_unsigned_int_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:386.
+[eva] Done for function Frama_C_unsigned_int_interval
+[eva] computing for function Frama_C_unsigned_char_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:390.
+[eva] Done for function Frama_C_unsigned_char_interval
+[eva] computing for function Frama_C_unsigned_short_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:394.
+[eva] Done for function Frama_C_unsigned_short_interval
+[eva] computing for function Frama_C_unsigned_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:398.
+[eva] Done for function Frama_C_unsigned_long_interval
+[eva] computing for function Frama_C_unsigned_long_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:403.
+[eva] Done for function Frama_C_unsigned_long_long_interval
+[eva] computing for function Frama_C_uintmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:406.
+[eva] Done for function Frama_C_uintmax_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:409.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:413.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva] computing for function Frama_C_double_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:429.
+[eva] Done for function Frama_C_double_interval
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:447.
+[eva] Done for function Frama_C_char_interval
+[eva] computing for function Frama_C_wint_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:450.
+[eva] Done for function Frama_C_wint_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:462.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_make_unknown <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:461.
+[eva] Done for function Frama_C_make_unknown
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:467.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_make_unknown_wchar <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:466.
+[eva] Done for function Frama_C_make_unknown_wchar
+[eva] computing for function Frama_C_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:350.
+[eva] Done for function Frama_C_interval
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:353.
+[eva] Done for function Frama_C_char_interval
+[eva] computing for function Frama_C_short_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:356.
+[eva] Done for function Frama_C_short_interval
+[eva] computing for function Frama_C_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:359.
+[eva] Done for function Frama_C_long_interval
+[eva] computing for function Frama_C_long_long_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:364.
+[eva] Done for function Frama_C_long_long_interval
+[eva] computing for function Frama_C_intmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:368.
+[eva] Done for function Frama_C_intmax_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:371.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:375.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva] computing for function Frama_C_unsigned_int_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:386.
+[eva] Done for function Frama_C_unsigned_int_interval
+[eva] computing for function Frama_C_unsigned_char_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:390.
+[eva] Done for function Frama_C_unsigned_char_interval
+[eva] computing for function Frama_C_unsigned_short_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:394.
+[eva] Done for function Frama_C_unsigned_short_interval
+[eva] computing for function Frama_C_unsigned_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:398.
+[eva] Done for function Frama_C_unsigned_long_interval
+[eva] computing for function Frama_C_unsigned_long_long_interval <- vfscanf <- 
+                          vscanf <- caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:403.
+[eva] Done for function Frama_C_unsigned_long_long_interval
+[eva] computing for function Frama_C_uintmax_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:406.
+[eva] Done for function Frama_C_uintmax_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:409.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_ptrdiff_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:413.
+[eva] Done for function Frama_C_ptrdiff_t_interval
+[eva] computing for function Frama_C_double_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:429.
+[eva] Done for function Frama_C_double_interval
+[eva] computing for function Frama_C_char_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:447.
+[eva] Done for function Frama_C_char_interval
+[eva] computing for function Frama_C_wint_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:450.
+[eva] Done for function Frama_C_wint_t_interval
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:462.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_make_unknown <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:461.
+[eva] Done for function Frama_C_make_unknown
+[eva] computing for function Frama_C_size_t_interval <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:467.
+[eva] Done for function Frama_C_size_t_interval
+[eva] computing for function Frama_C_make_unknown_wchar <- vfscanf <- vscanf <- 
+                          caller_stub_for_vscanf <- main.
+  Called from FRAMAC_SHARE/libc/stdio.c:466.
+[eva] Done for function Frama_C_make_unknown_wchar
+[eva] Recording results for vfscanf
+[eva] Done for function vfscanf
+[eva] Recording results for vscanf
+[eva] Done for function vscanf
+[eva] Recording results for caller_stub_for_vscanf
+[eva] Done for function caller_stub_for_vscanf
+[eva:alarm] stdio_c.c:68: Warning: check got status unknown.
+[eva:alarm] stdio_c.c:69: Warning: check got status unknown.
+[eva] stdio_c.c:70: 
+  Frama_C_show_each_must_be_reachable:
+  [-2147483648..2147483647],
+  {{ &vscanf_c }},
+  {{ &vscanf_Ld }},
+  [--..--] or UNINITIALIZED,
+  [-2147483648..2147483647],
+  [-9223372036854775808..9223372036854775807],
+  [0..4294967295]
 [eva] Recording results for main
 [eva] Done for function main
 [eva] ====== VALUES COMPUTED ======
@@ -370,20 +1075,11 @@
   Frama_C_entropy_source ∈ [--..--]
 [eva:final-states] Values at end of function is_valid_mode:
   __retres ∈ {1}
-[eva:final-states] Values at end of function asprintf:
-  __fc_heap_status ∈ [--..--]
-  Frama_C_entropy_source ∈ [--..--]
-  args ∈ {{ &__va_args[0] }}
-  len ∈ [1..256]
-  s ∈ {{ NULL ; &__malloc_asprintf_l124[0] }}
-  __retres ∈ [-1..256]
-  __malloc_asprintf_l124[0..254] ∈ [--..--] or UNINITIALIZED
-                        [255] ∈ {0} or UNINITIALIZED
 [eva:final-states] Values at end of function fmemopen:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
-  buf ∈ {{ NULL ; (void *)&__malloc_fmemopen_l224 }}
+  buf ∈ {{ NULL ; (void *)&__malloc_fmemopen_l231 }}
   __retres ∈ {{ NULL ; &__fc_fopen + [0..120],0%8 }}
 [eva:final-states] Values at end of function getline:
   __fc_heap_status ∈ [--..--]
@@ -391,12 +1087,61 @@
   Frama_C_entropy_source ∈ [--..--]
   cur ∈ [0..2147483647] or UNINITIALIZED
   line ∈
-      {{ NULL ; &__malloc_w_getline_l73[0] ; &__realloc_w_getline_l104[0] }}
+      {{ NULL ; &__malloc_w_getline_l75[0] ; &__realloc_w_getline_l106[0] }}
   len ∈ [0..2147483647]
   __retres ∈ [-1..2147483646]
-  __malloc_w_getline_l73[0..1] ∈ [--..--] or UNINITIALIZED
-  __realloc_w_getline_l104[0..2147483645] ∈ [--..--] or UNINITIALIZED
+  __malloc_w_getline_l75[0..1] ∈ [--..--] or UNINITIALIZED
+  __realloc_w_getline_l106[0..2147483645] ∈ [--..--] or UNINITIALIZED
                           [2147483646] ∈ {0} or UNINITIALIZED
+[eva:final-states] Values at end of function vasprintf:
+  __fc_heap_status ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
+  len ∈ [1..256]
+  s ∈ {{ NULL ; &__malloc_vasprintf_l124[0] }}
+  __retres ∈ [-1..256]
+  __malloc_vasprintf_l124[0..254] ∈ [--..--] or UNINITIALIZED
+                         [255] ∈ {0} or UNINITIALIZED
+[eva:final-states] Values at end of function asprintf:
+  __fc_heap_status ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
+  args ∈ {{ &__va_args[0] }}
+  res ∈ [-1..256]
+  s ∈ {{ NULL ; &__malloc_vasprintf_l124[0] }}
+  __malloc_vasprintf_l124[0..254] ∈ [--..--] or UNINITIALIZED
+                         [255] ∈ {0} or UNINITIALIZED
+[eva:final-states] Values at end of function vfscanf:
+  Frama_C_entropy_source ∈ [--..--]
+  arg ∈ {{ &__va_args_39{[0], [1], [2], [3], [4], [5], [6], [7]} }}
+  p ∈ {{ "%+d %-2c % 41.999Lf %s %ti %jx %zu" + [2..34] }}
+  conversion_counter ∈ [--..--]
+  vscanf_d ∈ [--..--] or UNINITIALIZED
+  vscanf_c ∈ [--..--] or UNINITIALIZED
+  vscanf_Ld ∈ [--..--] or UNINITIALIZED
+  vscanf_s[0..29] ∈ [--..--] or UNINITIALIZED
+  vscanf_t ∈ [--..--] or UNINITIALIZED
+  vscanf_j ∈ [--..--] or UNINITIALIZED
+  vscanf_z ∈ [--..--] or UNINITIALIZED
+  __retres ∈ [-128..127]
+[eva:final-states] Values at end of function vscanf:
+  Frama_C_entropy_source ∈ [--..--]
+  vscanf_d ∈ [--..--] or UNINITIALIZED
+  vscanf_c ∈ [--..--] or UNINITIALIZED
+  vscanf_Ld ∈ [--..--] or UNINITIALIZED
+  vscanf_s[0..29] ∈ [--..--] or UNINITIALIZED
+  vscanf_t ∈ [--..--] or UNINITIALIZED
+  vscanf_j ∈ [--..--] or UNINITIALIZED
+  vscanf_z ∈ [--..--] or UNINITIALIZED
+[eva:final-states] Values at end of function caller_stub_for_vscanf:
+  Frama_C_entropy_source ∈ [--..--]
+  vscanf_d ∈ [--..--] or UNINITIALIZED
+  vscanf_c ∈ [--..--] or UNINITIALIZED
+  vscanf_Ld ∈ [--..--] or UNINITIALIZED
+  vscanf_s[0..29] ∈ [--..--] or UNINITIALIZED
+  vscanf_t ∈ [--..--] or UNINITIALIZED
+  vscanf_j ∈ [--..--] or UNINITIALIZED
+  vscanf_z ∈ [--..--] or UNINITIALIZED
+  args ∈ {{ &__va_args_39[0] }}
+  res ∈ [-128..127]
 [eva:final-states] Values at end of function main:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
@@ -406,7 +1151,7 @@
                      .__fc_FILE_data ∈ [--..--]
   stream ∈ {{ NULL ; &__fc_fopen + [0..120],0%8 }}
   line ∈
-      {{ NULL ; &__malloc_w_getline_l73[0] ; &__realloc_w_getline_l104[0] }} or ESCAPINGADDR
+      {{ NULL ; &__malloc_w_getline_l75[0] ; &__realloc_w_getline_l106[0] }} or ESCAPINGADDR
   len ∈ [0..2147483647]
   total_len ∈ [--..--]
   read ∈ {-1} or UNINITIALIZED
@@ -414,9 +1159,31 @@
   buf[0..8] ∈ [--..--] or UNINITIALIZED
      [9] ∈ {0} or UNINITIALIZED
   r_1 ∈ {{ NULL ; &buf[0] }} or UNINITIALIZED
+  vscanf_d ∈ [--..--] or UNINITIALIZED
+  vscanf_c ∈ [--..--] or UNINITIALIZED
+  vscanf_Ld ∈ [--..--] or UNINITIALIZED
+  vscanf_s[0..29] ∈ [--..--] or UNINITIALIZED
+  vscanf_t ∈ [--..--] or UNINITIALIZED
+  vscanf_j ∈ [--..--] or UNINITIALIZED
+  vscanf_z ∈ [--..--] or UNINITIALIZED
+  vscanf_res ∈ [-128..127] or UNINITIALIZED
+  __va_arg0_31 ∈ {{ &vscanf_d }} or UNINITIALIZED
+  __va_arg1 ∈ {{ &vscanf_c }} or UNINITIALIZED
+  __va_arg2 ∈ {{ &vscanf_Ld }} or UNINITIALIZED
+  __va_arg3 ∈ {{ &vscanf_s[0] }} or UNINITIALIZED
+  __va_arg4 ∈ {{ &vscanf_t }} or UNINITIALIZED
+  __va_arg5 ∈ {{ &vscanf_j }} or UNINITIALIZED
+  __va_arg6 ∈ {{ &vscanf_z }} or UNINITIALIZED
+  __va_args_39[0] ∈ {{ (void *)&__va_arg0_31 }} or UNINITIALIZED
+              [1] ∈ {{ (void *)&__va_arg1 }} or UNINITIALIZED
+              [2] ∈ {{ (void *)&__va_arg2 }} or UNINITIALIZED
+              [3] ∈ {{ (void *)&__va_arg3 }} or UNINITIALIZED
+              [4] ∈ {{ (void *)&__va_arg4 }} or UNINITIALIZED
+              [5] ∈ {{ (void *)&__va_arg5 }} or UNINITIALIZED
+              [6] ∈ {{ (void *)&__va_arg6 }} or UNINITIALIZED
   __retres ∈ {0; 1}
-  __malloc_w_getline_l73[0..1] ∈ [--..--] or UNINITIALIZED
-  __realloc_w_getline_l104[0..2147483645] ∈ [--..--] or UNINITIALIZED
+  __malloc_w_getline_l75[0..1] ∈ [--..--] or UNINITIALIZED
+  __realloc_w_getline_l106[0..2147483645] ∈ [--..--] or UNINITIALIZED
                           [2147483646] ∈ {0} or UNINITIALIZED
-  __malloc_asprintf_l124[0..254] ∈ [--..--] or UNINITIALIZED
-                        [255] ∈ {0} or UNINITIALIZED
+  __malloc_vasprintf_l124[0..254] ∈ [--..--] or UNINITIALIZED
+                         [255] ∈ {0} or UNINITIALIZED
diff --git a/tests/libc/oracle/stdio_h.res.oracle b/tests/libc/oracle/stdio_h.res.oracle
index 0bbf2f381b0429cf2a075a45800b5fdf5444d5d2..473073174b670ab1fea643f327945e86dfc31f05 100644
--- a/tests/libc/oracle/stdio_h.res.oracle
+++ b/tests/libc/oracle/stdio_h.res.oracle
@@ -5,167 +5,228 @@
 [eva:initial-state] Values of globals at initialization
   nondet ∈ [--..--]
 [eva] computing for function fopen <- main.
-  Called from stdio_h.c:6.
+  Called from stdio_h.c:9.
 [eva] using specification for function fopen
-[eva] stdio_h.c:6: 
+[eva] stdio_h.c:9: 
   function fopen: precondition 'valid_filename' got status valid.
-[eva] stdio_h.c:6: function fopen: precondition 'valid_mode' got status valid.
+[eva] stdio_h.c:9: function fopen: precondition 'valid_mode' got status valid.
 [eva] Done for function fopen
 [eva] computing for function fseek <- main.
-  Called from stdio_h.c:8.
+  Called from stdio_h.c:11.
 [eva] using specification for function fseek
-[eva] stdio_h.c:8: function fseek: precondition 'valid_stream' got status valid.
-[eva] stdio_h.c:8: function fseek: precondition 'whence_enum' got status valid.
+[eva] stdio_h.c:11: 
+  function fseek: precondition 'valid_stream' got status valid.
+[eva] stdio_h.c:11: function fseek: precondition 'whence_enum' got status valid.
 [eva] Done for function fseek
 [eva] computing for function fseek <- main.
-  Called from stdio_h.c:10.
-[eva:alarm] stdio_h.c:10: Warning: 
+  Called from stdio_h.c:13.
+[eva:alarm] stdio_h.c:13: Warning: 
   function fseek: precondition 'valid_stream' got status invalid.
-[eva] stdio_h.c:10: 
+[eva] stdio_h.c:13: 
   function fseek: no state left, precondition 'whence_enum' got status valid.
 [eva] Done for function fseek
 [eva] computing for function Frama_C_interval <- main.
-  Called from stdio_h.c:16.
+  Called from stdio_h.c:19.
 [eva] using specification for function Frama_C_interval
-[eva] stdio_h.c:16: 
+[eva] stdio_h.c:19: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function fseek <- main.
-  Called from stdio_h.c:19.
-[eva] stdio_h.c:19: 
+  Called from stdio_h.c:22.
+[eva] stdio_h.c:22: 
   function fseek: precondition 'valid_stream' got status valid.
-[eva:alarm] stdio_h.c:19: Warning: 
+[eva:alarm] stdio_h.c:22: Warning: 
   function fseek: precondition 'whence_enum' got status invalid.
 [eva] Done for function fseek
 [eva] computing for function tmpfile <- main.
-  Called from stdio_h.c:23.
+  Called from stdio_h.c:26.
 [eva] using specification for function tmpfile
 [eva] Done for function tmpfile
 [eva] computing for function fseek <- main.
-  Called from stdio_h.c:25.
-[eva] stdio_h.c:25: 
+  Called from stdio_h.c:28.
+[eva] stdio_h.c:28: 
   function fseek: precondition 'valid_stream' got status valid.
-[eva] stdio_h.c:25: function fseek: precondition 'whence_enum' got status valid.
+[eva] stdio_h.c:28: function fseek: precondition 'whence_enum' got status valid.
 [eva] Done for function fseek
 [eva] computing for function fseeko <- main.
-  Called from stdio_h.c:26.
+  Called from stdio_h.c:29.
 [eva] using specification for function fseeko
-[eva] stdio_h.c:26: 
+[eva] stdio_h.c:29: 
   function fseeko: precondition 'valid_stream' got status valid.
-[eva] stdio_h.c:26: 
+[eva] stdio_h.c:29: 
   function fseeko: precondition 'whence_enum' got status valid.
 [eva] Done for function fseeko
 [eva] computing for function ftell <- main.
-  Called from stdio_h.c:27.
+  Called from stdio_h.c:30.
 [eva] using specification for function ftell
-[eva] stdio_h.c:27: 
+[eva] stdio_h.c:30: 
   function ftell: precondition 'valid_stream' got status valid.
 [eva] Done for function ftell
 [eva] computing for function ftello <- main.
-  Called from stdio_h.c:28.
+  Called from stdio_h.c:31.
 [eva] using specification for function ftello
-[eva] stdio_h.c:28: 
+[eva] stdio_h.c:31: 
   function ftello: precondition 'valid_stream' got status valid.
 [eva] Done for function ftello
 [eva] computing for function fclose <- main.
-  Called from stdio_h.c:29.
+  Called from stdio_h.c:32.
 [eva] using specification for function fclose
-[eva] stdio_h.c:29: 
+[eva] stdio_h.c:32: 
   function fclose: precondition 'valid_stream' got status valid.
 [eva] Done for function fclose
 [eva] computing for function freopen <- main.
-  Called from stdio_h.c:31.
+  Called from stdio_h.c:34.
 [eva] using specification for function freopen
-[eva] stdio_h.c:31: 
+[eva] stdio_h.c:34: 
   function freopen: precondition 'valid_filename' got status valid.
-[eva] stdio_h.c:31: 
+[eva] stdio_h.c:34: 
   function freopen: precondition 'valid_mode' got status valid.
-[eva:alarm] stdio_h.c:31: Warning: 
+[eva:alarm] stdio_h.c:34: Warning: 
   function freopen: precondition 'valid_stream' got status unknown.
 [eva] Done for function freopen
 [eva] computing for function printf_va_1 <- main.
-  Called from stdio_h.c:33.
+  Called from stdio_h.c:36.
 [eva] using specification for function printf_va_1
-[eva] stdio_h.c:33: function printf_va_1: precondition got status valid.
+[eva] stdio_h.c:36: function printf_va_1: precondition got status valid.
 [eva] Done for function printf_va_1
 [eva] computing for function fclose <- main.
-  Called from stdio_h.c:34.
-[eva] stdio_h.c:34: 
+  Called from stdio_h.c:37.
+[eva] stdio_h.c:37: 
   function fclose: precondition 'valid_stream' got status valid.
 [eva] Done for function fclose
 [eva] computing for function fgets <- main.
-  Called from stdio_h.c:37.
+  Called from stdio_h.c:40.
 [eva] using specification for function fgets
-[eva] stdio_h.c:37: 
+[eva] stdio_h.c:40: 
   function fgets: precondition 'valid_stream' got status valid.
-[eva] stdio_h.c:37: function fgets: precondition 'room_s' got status valid.
+[eva] stdio_h.c:40: function fgets: precondition 'room_s' got status valid.
 [eva] Done for function fgets
-[eva:alarm] stdio_h.c:39: Warning: check got status unknown.
+[eva:alarm] stdio_h.c:42: Warning: check got status unknown.
 [eva] computing for function fgets <- main.
-  Called from stdio_h.c:41.
-[eva] stdio_h.c:41: 
+  Called from stdio_h.c:44.
+[eva] stdio_h.c:44: 
   function fgets: precondition 'valid_stream' got status valid.
-[eva:alarm] stdio_h.c:41: Warning: 
+[eva:alarm] stdio_h.c:44: Warning: 
   function fgets: precondition 'room_s' got status invalid.
 [eva] Done for function fgets
 [eva] computing for function fgetpos <- main.
-  Called from stdio_h.c:46.
+  Called from stdio_h.c:49.
 [eva] using specification for function fgetpos
-[eva] stdio_h.c:46: 
+[eva] stdio_h.c:49: 
   function fgetpos: precondition 'valid_stream' got status valid.
-[eva] stdio_h.c:46: function fgetpos: precondition 'valid_pos' got status valid.
+[eva] stdio_h.c:49: function fgetpos: precondition 'valid_pos' got status valid.
 [eva] Done for function fgetpos
 [eva] computing for function fsetpos <- main.
-  Called from stdio_h.c:47.
+  Called from stdio_h.c:50.
 [eva] using specification for function fsetpos
-[eva] stdio_h.c:47: 
+[eva] stdio_h.c:50: 
   function fsetpos: precondition 'valid_stream' got status valid.
-[eva] stdio_h.c:47: function fsetpos: precondition 'valid_pos' got status valid.
-[eva] stdio_h.c:47: 
+[eva] stdio_h.c:50: function fsetpos: precondition 'valid_pos' got status valid.
+[eva] stdio_h.c:50: 
   function fsetpos: precondition 'initialization,pos' got status valid.
 [eva] Done for function fsetpos
 [eva] computing for function fclose <- main.
-  Called from stdio_h.c:48.
-[eva] stdio_h.c:48: 
+  Called from stdio_h.c:51.
+[eva] stdio_h.c:51: 
   function fclose: precondition 'valid_stream' got status valid.
 [eva] Done for function fclose
 [eva] computing for function asprintf <- main.
-  Called from stdio_h.c:52.
+  Called from stdio_h.c:58.
 [eva] using specification for function asprintf
-[eva:libc:unsupported-spec] stdio_h.c:52: Warning: 
+[eva:libc:unsupported-spec] stdio_h.c:58: Warning: 
   The specification of function 'asprintf' is currently not supported by Eva.
   Consider adding 'FRAMAC_SHARE/libc/stdio.c' to the analyzed source files.
-[eva] stdio_h.c:52: Warning: ignoring unsupported allocates clause
-[eva] stdio_h.c:52: 
+[eva] stdio_h.c:58: Warning: ignoring unsupported allocates clause
+[eva] stdio_h.c:58: 
   function asprintf: precondition 'valid_strp' got status valid.
-[eva] stdio_h.c:52: 
+[eva] stdio_h.c:58: 
   function asprintf: precondition 'valid_fmt' got status valid.
 [eva] Done for function asprintf
-[eva:alarm] stdio_h.c:54: Warning: 
+[eva:alarm] stdio_h.c:60: Warning: 
   accessing uninitialized left-value. assert \initialized(&s);
 [eva] computing for function printf_va_2 <- main.
-  Called from stdio_h.c:54.
+  Called from stdio_h.c:60.
 [eva] using specification for function printf_va_2
-[eva:alarm] stdio_h.c:54: Warning: 
+[eva:alarm] stdio_h.c:60: Warning: 
   function printf_va_2: precondition valid_read_string(param0) got status invalid.
-[eva] stdio_h.c:54: 
+[eva] stdio_h.c:60: 
   function printf_va_2: no state left, precondition valid_read_string(format) got status valid.
 [eva] Done for function printf_va_2
+[eva] computing for function caller_stub_for_vasprintf <- main.
+  Called from stdio_h.c:69.
+[eva] computing for function vasprintf <- caller_stub_for_vasprintf <- main.
+  Called from stdio_h.c:91.
+[eva] using specification for function vasprintf
+[eva:libc:unsupported-spec] stdio_h.c:91: Warning: 
+  The specification of function 'vasprintf' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/stdio.c' to the analyzed source files.
+[eva] stdio_h.c:91: Warning: ignoring unsupported allocates clause
+[eva] stdio_h.c:91: 
+  function vasprintf: precondition 'valid_strp' got status valid.
+[eva] stdio_h.c:91: 
+  function vasprintf: precondition 'valid_fmt' got status valid.
+[eva:garbled-mix:assigns] stdio_h.c:91: 
+  The specification of function vasprintf
+  has generated a garbled mix of addresses for assigns clause *strp.
+[eva] Done for function vasprintf
+[eva] Recording results for caller_stub_for_vasprintf
+[eva] Done for function caller_stub_for_vasprintf
+[eva:locals-escaping] stdio_h.c:69: Warning: 
+  locals {__va_args_30} escaping the scope of a block of main through s_0
+[eva:alarm] stdio_h.c:71: Warning: 
+  accessing uninitialized left-value. assert \initialized(&s_0);
+[eva:alarm] stdio_h.c:71: Warning: 
+  accessing left-value that contains escaping addresses.
+  assert ¬\dangling(&s_0);
+[eva] computing for function printf_va_3 <- main.
+  Called from stdio_h.c:71.
+[eva] using specification for function printf_va_3
+[eva:alarm] stdio_h.c:71: Warning: 
+  function printf_va_3: precondition valid_read_string(param0) got status invalid.
+[eva] stdio_h.c:71: 
+  function printf_va_3: no state left, precondition valid_read_string(format) got status valid.
+[eva] Done for function printf_va_3
 [eva] computing for function fmemopen <- main.
-  Called from stdio_h.c:58.
+  Called from stdio_h.c:75.
 [eva] using specification for function fmemopen
-[eva:libc:unsupported-spec] stdio_h.c:58: Warning: 
+[eva:libc:unsupported-spec] stdio_h.c:75: Warning: 
   The specification of function 'fmemopen' is currently not supported by Eva.
   Consider adding 'FRAMAC_SHARE/libc/stdio.c' to the analyzed source files.
-[eva] stdio_h.c:58: Warning: ignoring unsupported allocates clause
-[eva] stdio_h.c:58: 
+[eva] stdio_h.c:75: Warning: ignoring unsupported allocates clause
+[eva] stdio_h.c:75: 
   function fmemopen: precondition 'valid_or_null_buff' got status valid.
-[eva] stdio_h.c:58: 
+[eva] stdio_h.c:75: 
   function fmemopen: precondition 'valid_mode' got status valid.
 [eva] Done for function fmemopen
+[eva] computing for function caller_stub_for_vscanf <- main.
+  Called from stdio_h.c:79.
+[eva] computing for function vscanf <- caller_stub_for_vscanf <- main.
+  Called from stdio_h.c:99.
+[eva] using specification for function vscanf
+[eva:libc:unsupported-spec] stdio_h.c:99: Warning: 
+  The specification of function 'vscanf' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/stdio.c' to the analyzed source files.
+[eva] FRAMAC_SHARE/libc/stdio.h:239: Warning: 
+  no 'assigns \result \from ...' clause specified for function vscanf
+[eva] Done for function vscanf
+[eva] Recording results for caller_stub_for_vscanf
+[eva] Done for function caller_stub_for_vscanf
+[eva:alarm] stdio_h.c:81: Warning: 
+  assertion got status invalid (stopping propagation).
 [eva] Recording results for main
 [eva] Done for function main
 [eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function caller_stub_for_vasprintf:
+  __fc_heap_status ∈ [--..--]
+  s_0 ∈
+     {{ garbled mix of &{__va_args_30}
+      (origin: Library function {stdio_h.c:91}) }} or UNINITIALIZED
+  args ∈ {{ &__va_args_30[0] }}
+  res ∈ [-1..2147483647]
+[eva:final-states] Values at end of function caller_stub_for_vscanf:
+  args ∈ {{ &__va_args_35[0] }}
+  res ∈ [--..--]
+  S___fc_stdin[0..1] ∈ [--..--]
 [eva:final-states] Values at end of function main:
   __fc_errno ∈ [--..--]
   __fc_fopen[0..15] ∈ [--..--]
@@ -182,4 +243,5 @@
   pos ∈ [--..--] or UNINITIALIZED
   res_fclose ∈ {-1; 0} or UNINITIALIZED
   __retres ∈ {0; 1; 2; 3}
+  S___fc_stdin[0..1] ∈ [--..--]
   S___fc_stdout[0..1] ∈ [--..--]
diff --git a/tests/libc/oracle/stdlib_c.0.res.oracle b/tests/libc/oracle/stdlib_c.0.res.oracle
index 311025d26fd3425b42362fd4c546daeeab9dacc2..0d0926fd83f88b499a5fca3e923c499dfb5b5d74 100644
--- a/tests/libc/oracle/stdlib_c.0.res.oracle
+++ b/tests/libc/oracle/stdlib_c.0.res.oracle
@@ -61,11 +61,11 @@
   (0..31/34359738367) to fit 0..63/34359738367
 [eva] computing for function posix_memalign <- main.
   Called from stdlib_c.c:38.
-[eva] FRAMAC_SHARE/libc/stdlib.c:196: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:200: 
   assertion 'alignment_is_a_suitable_power_of_two' got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: 
-  allocating variable __malloc_posix_memalign_l199
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: 
+  allocating variable __malloc_posix_memalign_l203
 [eva] Recording results for posix_memalign
 [eva] Done for function posix_memalign
 [eva] computing for function free <- main.
@@ -76,14 +76,14 @@
 [eva] Done for function free
 [eva] computing for function posix_memalign <- main.
   Called from stdlib_c.c:40.
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: 
-  allocating variable __malloc_posix_memalign_l199_0
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: 
+  allocating variable __malloc_posix_memalign_l203_0
 [eva] Recording results for posix_memalign
 [eva] Done for function posix_memalign
 [eva] computing for function posix_memalign <- main.
   Called from stdlib_c.c:40.
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: Call to builtin Frama_C_malloc
 [eva] Recording results for posix_memalign
 [eva] Done for function posix_memalign
 [eva] computing for function free <- main.
@@ -102,20 +102,20 @@
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:46.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] using specification for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:213: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:217: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
-[eva] FRAMAC_SHARE/libc/stdlib.c:222: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
+[eva] FRAMAC_SHARE/libc/stdlib.c:226: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] using specification for function Frama_C_make_unknown
-[eva] FRAMAC_SHARE/libc/stdlib.c:230: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:234: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
@@ -163,50 +163,50 @@
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:54.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: allocating variable __malloc_realpath_l224
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: allocating variable __malloc_realpath_l228
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:54.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
 [eva] computing for function canonicalize_file_name <- main.
   Called from stdlib_c.c:56.
 [eva] computing for function realpath <- canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:236.
+  Called from FRAMAC_SHARE/libc/stdlib.c:240.
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: 
-  allocating variable __malloc_realpath_l224_0
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: 
+  allocating variable __malloc_realpath_l228_0
 [eva] computing for function Frama_C_make_unknown <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
@@ -215,19 +215,19 @@
 [eva] computing for function canonicalize_file_name <- main.
   Called from stdlib_c.c:56.
 [eva] computing for function realpath <- canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:236.
+  Called from FRAMAC_SHARE/libc/stdlib.c:240.
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
 [eva] computing for function Frama_C_make_unknown <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
@@ -246,30 +246,30 @@
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function posix_memalign:
   __fc_heap_status ∈ [--..--]
-  p_al0 ∈ {{ NULL ; &__malloc_posix_memalign_l199[0] }}
-  p_al1 ∈ {{ NULL ; &__malloc_posix_memalign_l199_0[0] }} or UNINITIALIZED
+  p_al0 ∈ {{ NULL ; &__malloc_posix_memalign_l203[0] }}
+  p_al1 ∈ {{ NULL ; &__malloc_posix_memalign_l203_0[0] }} or UNINITIALIZED
   __retres ∈ {0; 12}
 [eva:final-states] Values at end of function realpath:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
   resolved_name ∈
-               {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l224[0] ;
-                  &__malloc_realpath_l224_0[0] }}
+               {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l228[0] ;
+                  &__malloc_realpath_l228_0[0] }}
   realpath_len ∈ [1..4096] or UNINITIALIZED
   __retres ∈
-          {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l224[0] ;
-             &__malloc_realpath_l224_0[0] }}
+          {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l228[0] ;
+             &__malloc_realpath_l228_0[0] }}
   __malloc_main_l44[0..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224[0] ∈ [--..--]
+  __malloc_realpath_l228[0] ∈ [--..--]
                         [1..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224_0[0] ∈ [--..--]
+  __malloc_realpath_l228_0[0] ∈ [--..--]
                           [1..4095] ∈ [--..--] or UNINITIALIZED
 [eva:final-states] Values at end of function canonicalize_file_name:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
-  __malloc_realpath_l224_0[0] ∈ [--..--]
+  __malloc_realpath_l228_0[0] ∈ [--..--]
                           [1..4095] ∈ [--..--] or UNINITIALIZED
 [eva:final-states] Values at end of function main:
   __fc_heap_status ∈ [--..--]
@@ -280,17 +280,17 @@
   q ∈ {{ NULL ; &__calloc_main_l22[0] }}
   r ∈ {0}
   s ∈ {{ NULL ; &__calloc_w_main_l33[0] }}
-  p_al0 ∈ {{ NULL ; &__malloc_posix_memalign_l199[0] }}
-  p_al1 ∈ {{ NULL ; &__malloc_posix_memalign_l199_0[0] }}
+  p_al0 ∈ {{ NULL ; &__malloc_posix_memalign_l203[0] }}
+  p_al1 ∈ {{ NULL ; &__malloc_posix_memalign_l203_0[0] }}
   p_memal_res ∈ {0; 12}
   p_memal_res2 ∈ {0; 12}
   resolved_name ∈ {{ NULL ; &__malloc_main_l44[0] }}
-  realpath_res ∈ {{ NULL ; &__malloc_realpath_l224[0] }} or UNINITIALIZED
-  canon ∈ {{ NULL ; &__malloc_realpath_l224_0[0] }} or UNINITIALIZED
+  realpath_res ∈ {{ NULL ; &__malloc_realpath_l228[0] }} or UNINITIALIZED
+  canon ∈ {{ NULL ; &__malloc_realpath_l228_0[0] }} or UNINITIALIZED
   __retres ∈ {0; 1}
   __calloc_w_main_l33[0..1073741823] ∈ {0; 42}
   __malloc_main_l44[0..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224[0] ∈ [--..--]
+  __malloc_realpath_l228[0] ∈ [--..--]
                         [1..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224_0[0] ∈ [--..--]
+  __malloc_realpath_l228_0[0] ∈ [--..--]
                           [1..4095] ∈ [--..--] or UNINITIALIZED
diff --git a/tests/libc/oracle/stdlib_c.1.res.oracle b/tests/libc/oracle/stdlib_c.1.res.oracle
index 2dd89afee8614a150420fa948b006bd6257deeea..679dd08280bd3dc8797e70018f62169126c4b578 100644
--- a/tests/libc/oracle/stdlib_c.1.res.oracle
+++ b/tests/libc/oracle/stdlib_c.1.res.oracle
@@ -77,11 +77,11 @@
   (0..31/34359738367) to fit 0..191/34359738367
 [eva] computing for function posix_memalign <- main.
   Called from stdlib_c.c:38.
-[eva] FRAMAC_SHARE/libc/stdlib.c:196: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:200: 
   assertion 'alignment_is_a_suitable_power_of_two' got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: 
-  allocating variable __malloc_posix_memalign_l199
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: 
+  allocating variable __malloc_posix_memalign_l203
 [eva] Recording results for posix_memalign
 [eva] Done for function posix_memalign
 [eva] computing for function free <- main.
@@ -92,9 +92,9 @@
 [eva] Done for function free
 [eva] computing for function posix_memalign <- main.
   Called from stdlib_c.c:40.
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: 
-  allocating variable __malloc_posix_memalign_l199_0
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: 
+  allocating variable __malloc_posix_memalign_l203_0
 [eva] Recording results for posix_memalign
 [eva] Done for function posix_memalign
 [eva] computing for function free <- main.
@@ -107,20 +107,20 @@
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:46.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] using specification for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:213: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:217: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
-[eva] FRAMAC_SHARE/libc/stdlib.c:222: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
+[eva] FRAMAC_SHARE/libc/stdlib.c:226: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] using specification for function Frama_C_make_unknown
-[eva] FRAMAC_SHARE/libc/stdlib.c:230: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:234: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
@@ -153,78 +153,78 @@
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:54.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: allocating variable __malloc_realpath_l224
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: allocating variable __malloc_realpath_l228
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:54.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:54.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:54.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
 [eva] computing for function canonicalize_file_name <- main.
   Called from stdlib_c.c:56.
 [eva] computing for function realpath <- canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:236.
+  Called from FRAMAC_SHARE/libc/stdlib.c:240.
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: 
-  allocating variable __malloc_realpath_l224_0
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: 
+  allocating variable __malloc_realpath_l228_0
 [eva] computing for function Frama_C_make_unknown <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
@@ -233,19 +233,19 @@
 [eva] computing for function canonicalize_file_name <- main.
   Called from stdlib_c.c:56.
 [eva] computing for function realpath <- canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:236.
+  Called from FRAMAC_SHARE/libc/stdlib.c:240.
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
 [eva] computing for function Frama_C_make_unknown <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
@@ -264,30 +264,30 @@
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function posix_memalign:
   __fc_heap_status ∈ [--..--]
-  p_al0 ∈ {{ &__malloc_posix_memalign_l199[0] }}
-  p_al1 ∈ {{ &__malloc_posix_memalign_l199_0[0] }} or UNINITIALIZED
+  p_al0 ∈ {{ &__malloc_posix_memalign_l203[0] }}
+  p_al1 ∈ {{ &__malloc_posix_memalign_l203_0[0] }} or UNINITIALIZED
   __retres ∈ {0}
 [eva:final-states] Values at end of function realpath:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
   resolved_name ∈
-               {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l224[0] ;
-                  &__malloc_realpath_l224_0[0] }}
+               {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l228[0] ;
+                  &__malloc_realpath_l228_0[0] }}
   realpath_len ∈ [1..4096] or UNINITIALIZED
   __retres ∈
-          {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l224[0] ;
-             &__malloc_realpath_l224_0[0] }}
+          {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l228[0] ;
+             &__malloc_realpath_l228_0[0] }}
   __malloc_main_l44[0..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224[0] ∈ [--..--]
+  __malloc_realpath_l228[0] ∈ [--..--]
                         [1..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224_0[0] ∈ [--..--]
+  __malloc_realpath_l228_0[0] ∈ [--..--]
                           [1..4095] ∈ [--..--] or UNINITIALIZED
 [eva:final-states] Values at end of function canonicalize_file_name:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
-  __malloc_realpath_l224_0[0] ∈ [--..--]
+  __malloc_realpath_l228_0[0] ∈ [--..--]
                           [1..4095] ∈ [--..--] or UNINITIALIZED
 [eva:final-states] Values at end of function main:
   __fc_heap_status ∈ [--..--]
@@ -298,17 +298,17 @@
   q ∈ {{ NULL ; &__calloc_main_l22[0] }}
   r ∈ {0}
   s ∈ {{ NULL ; &__calloc_w_main_l33[0] }}
-  p_al0 ∈ {{ &__malloc_posix_memalign_l199[0] }}
-  p_al1 ∈ {{ &__malloc_posix_memalign_l199_0[0] }}
+  p_al0 ∈ {{ &__malloc_posix_memalign_l203[0] }}
+  p_al1 ∈ {{ &__malloc_posix_memalign_l203_0[0] }}
   p_memal_res ∈ {0}
   p_memal_res2 ∈ {0}
   resolved_name ∈ {{ &__malloc_main_l44[0] }}
-  realpath_res ∈ {{ NULL ; &__malloc_realpath_l224[0] }}
-  canon ∈ {{ NULL ; &__malloc_realpath_l224_0[0] }}
+  realpath_res ∈ {{ NULL ; &__malloc_realpath_l228[0] }}
+  canon ∈ {{ NULL ; &__malloc_realpath_l228_0[0] }}
   __retres ∈ {0}
   __calloc_w_main_l33[0..1073741823] ∈ {0; 42}
   __malloc_main_l44[0..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224[0] ∈ [--..--]
+  __malloc_realpath_l228[0] ∈ [--..--]
                         [1..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224_0[0] ∈ [--..--]
+  __malloc_realpath_l228_0[0] ∈ [--..--]
                           [1..4095] ∈ [--..--] or UNINITIALIZED
diff --git a/tests/libc/oracle/stdlib_c.2.res.oracle b/tests/libc/oracle/stdlib_c.2.res.oracle
index 92a26b0f48e0b8e75ef495fdd9375ea676193e2a..2f4cdcf25ecf6df25a1e25f1252893c3c8694878 100644
--- a/tests/libc/oracle/stdlib_c.2.res.oracle
+++ b/tests/libc/oracle/stdlib_c.2.res.oracle
@@ -13,7 +13,7 @@
 [eva] using specification for function memset
 [eva] FRAMAC_SHARE/libc/stdlib.c:73: 
   function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] Done for function memset
 [eva] Recording results for calloc
@@ -96,11 +96,11 @@
 [eva] Done for function calloc
 [eva] computing for function posix_memalign <- main.
   Called from stdlib_c.c:38.
-[eva] FRAMAC_SHARE/libc/stdlib.c:196: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:200: 
   assertion 'alignment_is_a_suitable_power_of_two' got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: 
-  allocating variable __malloc_posix_memalign_l199
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: 
+  allocating variable __malloc_posix_memalign_l203
 [eva] Recording results for posix_memalign
 [eva] Done for function posix_memalign
 [eva] computing for function free <- main.
@@ -111,9 +111,9 @@
 [eva] Done for function free
 [eva] computing for function posix_memalign <- main.
   Called from stdlib_c.c:40.
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:199: 
-  allocating variable __malloc_posix_memalign_l199_0
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:203: 
+  allocating variable __malloc_posix_memalign_l203_0
 [eva] Recording results for posix_memalign
 [eva] Done for function posix_memalign
 [eva] computing for function free <- main.
@@ -126,20 +126,20 @@
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:46.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] using specification for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:213: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:217: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
-[eva] FRAMAC_SHARE/libc/stdlib.c:222: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
+[eva] FRAMAC_SHARE/libc/stdlib.c:226: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] using specification for function Frama_C_make_unknown
-[eva] FRAMAC_SHARE/libc/stdlib.c:230: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:234: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
@@ -160,36 +160,36 @@
 [eva] computing for function realpath <- main.
   Called from stdlib_c.c:54.
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: allocating variable __malloc_realpath_l224
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: allocating variable __malloc_realpath_l228
 [eva] computing for function Frama_C_make_unknown <- realpath <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
 [eva] computing for function canonicalize_file_name <- main.
   Called from stdlib_c.c:56.
 [eva] computing for function realpath <- canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:236.
+  Called from FRAMAC_SHARE/libc/stdlib.c:240.
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:213.
+  Called from FRAMAC_SHARE/libc/stdlib.c:217.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:222.
+  Called from FRAMAC_SHARE/libc/stdlib.c:226.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: Call to builtin Frama_C_malloc
-[eva] FRAMAC_SHARE/libc/stdlib.c:224: 
-  allocating variable __malloc_realpath_l224_0
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: Call to builtin Frama_C_malloc
+[eva] FRAMAC_SHARE/libc/stdlib.c:228: 
+  allocating variable __malloc_realpath_l228_0
 [eva] computing for function Frama_C_make_unknown <- realpath <- 
                           canonicalize_file_name <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:230.
+  Called from FRAMAC_SHARE/libc/stdlib.c:234.
 [eva] Done for function Frama_C_make_unknown
 [eva] Recording results for realpath
 [eva] Done for function realpath
@@ -218,28 +218,28 @@
   __malloc_w_calloc_l72_1[0..4294967291] ∈ [--..--] or UNINITIALIZED
 [eva:final-states] Values at end of function posix_memalign:
   __fc_heap_status ∈ [--..--]
-  p_al0 ∈ {{ NULL ; &__malloc_posix_memalign_l199[0] }}
-  p_al1 ∈ {{ NULL ; &__malloc_posix_memalign_l199_0[0] }} or UNINITIALIZED
+  p_al0 ∈ {{ NULL ; &__malloc_posix_memalign_l203[0] }}
+  p_al1 ∈ {{ NULL ; &__malloc_posix_memalign_l203_0[0] }} or UNINITIALIZED
   __retres ∈ {0; 12}
 [eva:final-states] Values at end of function realpath:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
   resolved_name ∈
-               {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l224[0] ;
-                  &__malloc_realpath_l224_0[0] }}
+               {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l228[0] ;
+                  &__malloc_realpath_l228_0[0] }}
   realpath_len ∈ [1..4096] or UNINITIALIZED
   __retres ∈
-          {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l224[0] ;
-             &__malloc_realpath_l224_0[0] }}
+          {{ NULL ; &__malloc_main_l44[0] ; &__malloc_realpath_l228[0] ;
+             &__malloc_realpath_l228_0[0] }}
   __malloc_main_l44[0..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224[0..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224_0[0..4095] ∈ [--..--] or UNINITIALIZED
+  __malloc_realpath_l228[0..4095] ∈ [--..--] or UNINITIALIZED
+  __malloc_realpath_l228_0[0..4095] ∈ [--..--] or UNINITIALIZED
 [eva:final-states] Values at end of function canonicalize_file_name:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
-  __malloc_realpath_l224_0[0..4095] ∈ [--..--] or UNINITIALIZED
+  __malloc_realpath_l228_0[0..4095] ∈ [--..--] or UNINITIALIZED
 [eva:final-states] Values at end of function main:
   __fc_heap_status ∈ [--..--]
   __fc_errno ∈ [--..--]
@@ -249,17 +249,17 @@
   q ∈ {{ NULL ; (int *)&__malloc_calloc_l72_0 }}
   r ∈ {0}
   s ∈ {{ NULL ; (int *)&__malloc_w_calloc_l72_1 }} or UNINITIALIZED
-  p_al0 ∈ {{ NULL ; &__malloc_posix_memalign_l199[0] }}
-  p_al1 ∈ {{ NULL ; &__malloc_posix_memalign_l199_0[0] }}
+  p_al0 ∈ {{ NULL ; &__malloc_posix_memalign_l203[0] }}
+  p_al1 ∈ {{ NULL ; &__malloc_posix_memalign_l203_0[0] }}
   p_memal_res ∈ {0; 12}
   p_memal_res2 ∈ {0; 12}
   resolved_name ∈ {{ NULL ; &__malloc_main_l44[0] }}
-  realpath_res ∈ {{ NULL ; &__malloc_realpath_l224[0] }} or UNINITIALIZED
-  canon ∈ {{ NULL ; &__malloc_realpath_l224_0[0] }} or UNINITIALIZED
+  realpath_res ∈ {{ NULL ; &__malloc_realpath_l228[0] }} or UNINITIALIZED
+  canon ∈ {{ NULL ; &__malloc_realpath_l228_0[0] }} or UNINITIALIZED
   __retres ∈ {0; 1}
   __malloc_calloc_l72[0..3] ∈ [--..--] or UNINITIALIZED
   __malloc_calloc_l72_0[0..4294967291] ∈ [--..--] or UNINITIALIZED
   __malloc_w_calloc_l72_1[0..4294967291] ∈ [--..--] or UNINITIALIZED
   __malloc_main_l44[0..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224[0..4095] ∈ [--..--] or UNINITIALIZED
-  __malloc_realpath_l224_0[0..4095] ∈ [--..--] or UNINITIALIZED
+  __malloc_realpath_l228[0..4095] ∈ [--..--] or UNINITIALIZED
+  __malloc_realpath_l228_0[0..4095] ∈ [--..--] or UNINITIALIZED
diff --git a/tests/libc/oracle/stdlib_c_env.res.oracle b/tests/libc/oracle/stdlib_c_env.res.oracle
index 1f2d4bb2994253ac4ad94e7074c908d114de2f4a..980661bdbfe72311f1f83f22fb1f8402cc15a479 100644
--- a/tests/libc/oracle/stdlib_c_env.res.oracle
+++ b/tests/libc/oracle/stdlib_c_env.res.oracle
@@ -6,95 +6,95 @@
   
 [eva] computing for function putenv <- main.
   Called from stdlib_c_env.c:8.
-[eva] FRAMAC_SHARE/libc/stdlib.c:114: Call to builtin strchr
-[eva] FRAMAC_SHARE/libc/stdlib.c:114: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:118: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/stdlib.c:118: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:181: 
+[eva] FRAMAC_SHARE/libc/string.h:202: 
   cannot evaluate ACSL term, unsupported logic var p
-[eva] FRAMAC_SHARE/libc/stdlib.c:115: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:119: 
   assertion 'string_contains_separator' got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:116: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:120: 
   assertion 'name_is_not_empty' got status valid.
 [eva] computing for function __fc_initenv <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:118.
+  Called from FRAMAC_SHARE/libc/stdlib.c:122.
 [eva] computing for function Frama_C_make_unknown <- __fc_initenv <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:87.
+  Called from FRAMAC_SHARE/libc/stdlib.c:91.
 [eva] using specification for function Frama_C_make_unknown
-[eva] FRAMAC_SHARE/libc/stdlib.c:87: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:91: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_interval <- __fc_initenv <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:89.
+  Called from FRAMAC_SHARE/libc/stdlib.c:93.
 [eva] using specification for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:89: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:93: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
-[eva] FRAMAC_SHARE/libc/stdlib.c:88: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/stdlib.c:92: starting to merge loop iterations
 [eva] computing for function Frama_C_interval <- __fc_initenv <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:89.
+  Called from FRAMAC_SHARE/libc/stdlib.c:93.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_initenv <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:89.
+  Called from FRAMAC_SHARE/libc/stdlib.c:93.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_initenv <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:89.
+  Called from FRAMAC_SHARE/libc/stdlib.c:93.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- __fc_initenv <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:89.
+  Called from FRAMAC_SHARE/libc/stdlib.c:93.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for __fc_initenv
 [eva] Done for function __fc_initenv
 [eva] computing for function Frama_C_nondet <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:125.
+  Called from FRAMAC_SHARE/libc/stdlib.c:129.
 [eva] using specification for function Frama_C_nondet
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_nondet <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:126.
+  Called from FRAMAC_SHARE/libc/stdlib.c:130.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:128.
-[eva] FRAMAC_SHARE/libc/stdlib.c:128: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:132.
+[eva] FRAMAC_SHARE/libc/stdlib.c:132: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:130.
-[eva] FRAMAC_SHARE/libc/stdlib.c:130: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:134.
+[eva] FRAMAC_SHARE/libc/stdlib.c:134: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for putenv
 [eva] Done for function putenv
 [eva] computing for function putenv <- main.
   Called from stdlib_c_env.c:10.
-[eva] FRAMAC_SHARE/libc/stdlib.c:114: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/stdlib.c:118: Call to builtin strchr
 [eva] computing for function __fc_initenv <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:118.
+  Called from FRAMAC_SHARE/libc/stdlib.c:122.
 [eva] Recording results for __fc_initenv
 [eva] Done for function __fc_initenv
 [eva] computing for function Frama_C_nondet <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:125.
+  Called from FRAMAC_SHARE/libc/stdlib.c:129.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_nondet <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:126.
+  Called from FRAMAC_SHARE/libc/stdlib.c:130.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:128.
+  Called from FRAMAC_SHARE/libc/stdlib.c:132.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- putenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:130.
+  Called from FRAMAC_SHARE/libc/stdlib.c:134.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for putenv
 [eva] Done for function putenv
 [eva] computing for function getenv <- main.
   Called from stdlib_c_env.c:11.
-[eva] FRAMAC_SHARE/libc/stdlib.c:102: assertion got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:104: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:106: assertion got status valid.
+[eva] FRAMAC_SHARE/libc/stdlib.c:108: 
   Reusing old results for call to __fc_initenv
 [eva] computing for function Frama_C_nondet <- getenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:105.
+  Called from FRAMAC_SHARE/libc/stdlib.c:109.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- getenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:106.
-[eva] FRAMAC_SHARE/libc/stdlib.c:106: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:110.
+[eva] FRAMAC_SHARE/libc/stdlib.c:110: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for getenv
@@ -109,118 +109,118 @@
   function strcpy: precondition 'room_string' got status valid.
 [eva] stdlib_c_env.c:15: 
   function strcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:373: 
+[eva] FRAMAC_SHARE/libc/string.h:425: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
 [eva] Done for function strcpy
 [eva] computing for function getenv <- main.
   Called from stdlib_c_env.c:16.
-[eva] FRAMAC_SHARE/libc/stdlib.c:104: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:108: 
   Reusing old results for call to __fc_initenv
 [eva] computing for function Frama_C_nondet <- getenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:105.
+  Called from FRAMAC_SHARE/libc/stdlib.c:109.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- getenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:106.
+  Called from FRAMAC_SHARE/libc/stdlib.c:110.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for getenv
 [eva] Done for function getenv
 [eva] computing for function setenv <- main.
   Called from stdlib_c_env.c:17.
-[eva] FRAMAC_SHARE/libc/stdlib.c:137: Call to builtin strchr
-[eva] FRAMAC_SHARE/libc/stdlib.c:137: 
-  function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:141: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/stdlib.c:141: Call to builtin strchr
 [eva] FRAMAC_SHARE/libc/stdlib.c:141: 
+  function strchr: precondition 'valid_string_s' got status valid.
+[eva] FRAMAC_SHARE/libc/stdlib.c:145: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/stdlib.c:145: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:147: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:151: 
   Reusing old results for call to __fc_initenv
 [eva] computing for function Frama_C_nondet <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:153.
+  Called from FRAMAC_SHARE/libc/stdlib.c:157.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_nondet <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:157.
+  Called from FRAMAC_SHARE/libc/stdlib.c:161.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_make_unknown <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:158.
-[eva] FRAMAC_SHARE/libc/stdlib.c:158: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:162.
+[eva] FRAMAC_SHARE/libc/stdlib.c:162: 
   function Frama_C_make_unknown: precondition 'valid_p' got status valid.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_interval <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:160.
-[eva] FRAMAC_SHARE/libc/stdlib.c:160: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:164.
+[eva] FRAMAC_SHARE/libc/stdlib.c:164: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:160.
-[eva] FRAMAC_SHARE/libc/stdlib.c:160: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:164.
+[eva] FRAMAC_SHARE/libc/stdlib.c:164: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for setenv
 [eva] Done for function setenv
 [eva] computing for function setenv <- main.
   Called from stdlib_c_env.c:18.
-[eva] FRAMAC_SHARE/libc/stdlib.c:137: Call to builtin strchr
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.c:137: Warning: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:141: Call to builtin strchr
+[eva:alarm] FRAMAC_SHARE/libc/stdlib.c:141: Warning: 
   function strchr: precondition 'valid_string_s' got status unknown.
-[eva] FRAMAC_SHARE/libc/stdlib.c:141: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/stdlib.c:147: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:145: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/stdlib.c:151: 
   Reusing old results for call to __fc_initenv
 [eva] computing for function Frama_C_nondet <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:153.
+  Called from FRAMAC_SHARE/libc/stdlib.c:157.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_nondet <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:157.
+  Called from FRAMAC_SHARE/libc/stdlib.c:161.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_make_unknown <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:158.
+  Called from FRAMAC_SHARE/libc/stdlib.c:162.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_interval <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:160.
+  Called from FRAMAC_SHARE/libc/stdlib.c:164.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:160.
+  Called from FRAMAC_SHARE/libc/stdlib.c:164.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for setenv
 [eva] Done for function setenv
 [eva] computing for function setenv <- main.
   Called from stdlib_c_env.c:19.
-[eva] FRAMAC_SHARE/libc/stdlib.c:137: Call to builtin strchr
-[eva] FRAMAC_SHARE/libc/stdlib.c:141: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/stdlib.c:147: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:141: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/stdlib.c:145: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/stdlib.c:151: 
   Reusing old results for call to __fc_initenv
 [eva] computing for function Frama_C_nondet <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:153.
+  Called from FRAMAC_SHARE/libc/stdlib.c:157.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_nondet <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:157.
+  Called from FRAMAC_SHARE/libc/stdlib.c:161.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_make_unknown <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:158.
+  Called from FRAMAC_SHARE/libc/stdlib.c:162.
 [eva] Done for function Frama_C_make_unknown
 [eva] computing for function Frama_C_interval <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:160.
+  Called from FRAMAC_SHARE/libc/stdlib.c:164.
 [eva] Done for function Frama_C_interval
 [eva] computing for function Frama_C_interval <- setenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:160.
+  Called from FRAMAC_SHARE/libc/stdlib.c:164.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for setenv
 [eva] Done for function setenv
 [eva] computing for function unsetenv <- main.
   Called from stdlib_c_env.c:20.
-[eva] FRAMAC_SHARE/libc/stdlib.c:167: Call to builtin strchr
-[eva] FRAMAC_SHARE/libc/stdlib.c:167: 
-  function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:171: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/stdlib.c:171: Call to builtin strchr
 [eva] FRAMAC_SHARE/libc/stdlib.c:171: 
+  function strchr: precondition 'valid_string_s' got status valid.
+[eva] FRAMAC_SHARE/libc/stdlib.c:175: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/stdlib.c:175: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/stdlib.c:177: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:181: 
   Reusing old results for call to __fc_initenv
 [eva] computing for function Frama_C_nondet <- unsetenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:179.
+  Called from FRAMAC_SHARE/libc/stdlib.c:183.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- unsetenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:180.
-[eva] FRAMAC_SHARE/libc/stdlib.c:180: 
+  Called from FRAMAC_SHARE/libc/stdlib.c:184.
+[eva] FRAMAC_SHARE/libc/stdlib.c:184: 
   function Frama_C_interval: precondition 'order' got status valid.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for unsetenv
@@ -228,38 +228,51 @@
 [eva] stdlib_c_env.c:21: assertion got status valid.
 [eva] computing for function unsetenv <- main.
   Called from stdlib_c_env.c:22.
-[eva] FRAMAC_SHARE/libc/stdlib.c:167: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/stdlib.c:171: Call to builtin strchr
 [eva] Recording results for unsetenv
 [eva] Done for function unsetenv
 [eva] stdlib_c_env.c:23: assertion got status valid.
 [eva] computing for function unsetenv <- main.
   Called from stdlib_c_env.c:24.
-[eva] FRAMAC_SHARE/libc/stdlib.c:167: Call to builtin strchr
-[eva] FRAMAC_SHARE/libc/stdlib.c:171: Call to builtin strlen
-[eva] FRAMAC_SHARE/libc/stdlib.c:177: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:171: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/stdlib.c:175: Call to builtin strlen
+[eva] FRAMAC_SHARE/libc/stdlib.c:181: 
   Reusing old results for call to __fc_initenv
 [eva] computing for function Frama_C_nondet <- unsetenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:179.
+  Called from FRAMAC_SHARE/libc/stdlib.c:183.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- unsetenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:180.
+  Called from FRAMAC_SHARE/libc/stdlib.c:184.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for unsetenv
 [eva] Done for function unsetenv
 [eva] computing for function getenv <- main.
   Called from stdlib_c_env.c:25.
-[eva:alarm] FRAMAC_SHARE/libc/stdlib.c:102: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/stdlib.c:106: Warning: 
   assertion got status unknown.
-[eva] FRAMAC_SHARE/libc/stdlib.c:104: 
+[eva] FRAMAC_SHARE/libc/stdlib.c:108: 
   Reusing old results for call to __fc_initenv
 [eva] computing for function Frama_C_nondet <- getenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:105.
+  Called from FRAMAC_SHARE/libc/stdlib.c:109.
 [eva] Done for function Frama_C_nondet
 [eva] computing for function Frama_C_interval <- getenv <- main.
-  Called from FRAMAC_SHARE/libc/stdlib.c:106.
+  Called from FRAMAC_SHARE/libc/stdlib.c:110.
 [eva] Done for function Frama_C_interval
 [eva] Recording results for getenv
 [eva] Done for function getenv
+[eva] computing for function setenv <- main.
+  Called from stdlib_c_env.c:26.
+[eva] FRAMAC_SHARE/libc/stdlib.c:141: Call to builtin strchr
+[eva] Recording results for setenv
+[eva] Done for function setenv
+[eva] stdlib_c_env.c:27: check got status valid.
+[eva] computing for function setenv <- main.
+  Called from stdlib_c_env.c:28.
+[eva] FRAMAC_SHARE/libc/stdlib.c:141: Call to builtin strchr
+[eva] FRAMAC_SHARE/libc/stdlib.c:145: Call to builtin strlen
+[eva] Recording results for setenv
+[eva] Done for function setenv
+[eva] stdlib_c_env.c:29: check got status valid.
 [eva] Recording results for main
 [eva] Done for function main
 [eva] ====== VALUES COMPUTED ======
@@ -273,6 +286,7 @@
   Frama_C_entropy_source ∈ [--..--]
   __retres ∈ {{ NULL ; &s[0] ; &__fc_env_strings + [0..63] ; "BLA=1" }}
 [eva:final-states] Values at end of function putenv:
+  __fc_errno ∈ [--..--]
   __fc_env[0..4095] ∈
           {{ NULL ; &s[0] ; &__fc_env_strings + [0..63] ; "BLA=1" }}
   Frama_C_entropy_source ∈ [--..--]
@@ -282,6 +296,7 @@
   __fc_initenv_init ∈ {1}
   __retres ∈ [--..--]
 [eva:final-states] Values at end of function setenv:
+  __fc_errno ∈ [--..--]
   __fc_env[0..4095] ∈
           {{ NULL ; &s[0] ; &__fc_env_strings + [0..63] ; "BLA=1" }}
   Frama_C_entropy_source ∈ [--..--]
@@ -290,12 +305,14 @@
                   [63] ∈ {0}
   __retres ∈ {-1; 0}
 [eva:final-states] Values at end of function unsetenv:
+  __fc_errno ∈ [--..--]
   __fc_env[0..4095] ∈
           {{ NULL ; &s[0] ; &__fc_env_strings + [0..63] ; "BLA=1" }}
   Frama_C_entropy_source ∈ [--..--]
   namelen ∈ [0..63] or UNINITIALIZED
   __retres ∈ {-1; 0}
 [eva:final-states] Values at end of function main:
+  __fc_errno ∈ {22}
   __fc_env[0..4095] ∈
           {{ NULL ; &s[0] ; &__fc_env_strings + [0..63] ; "BLA=1" }}
   Frama_C_entropy_source ∈ [--..--]
@@ -313,6 +330,8 @@
   i7 ∈ {-1}
   i8 ∈ {-1; 0}
   r3 ∈ {{ NULL ; &s[0] ; &__fc_env_strings + [0..63] ; "BLA=1" }}
+  i9 ∈ {-1}
+  i10 ∈ {-1}
   __fc_env_strings[0..62] ∈ [--..--]
                   [63] ∈ {0}
   __fc_initenv_init ∈ {1}
diff --git a/tests/libc/oracle/stdlib_h.0.res.oracle b/tests/libc/oracle/stdlib_h.0.res.oracle
index f3c34ab3d7b20fc92706f5c64290e6cff09f0e05..1cc7c46da275314b800ce751b73538b533351c96 100644
--- a/tests/libc/oracle/stdlib_h.0.res.oracle
+++ b/tests/libc/oracle/stdlib_h.0.res.oracle
@@ -3,325 +3,435 @@
 [eva] Computing initial state
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
+  putenv_buf[0] ∈ {80}
+            [1] ∈ {65}
+            [2] ∈ {84}
+            [3] ∈ {72}
+            [4] ∈ {51}
+            [5] ∈ {61}
+            [6] ∈ {47}
+            [7] ∈ {58}
+            [8] ∈ {47}
+            [9] ∈ {102}
+            [10..11] ∈ {111}
+            [12] ∈ {58}
+            [13] ∈ {47}
+            [14] ∈ {98}
+            [15] ∈ {97}
+            [16] ∈ {114}
+            [17] ∈ {58}
+            [18..29] ∈ {0}
   nondet ∈ [--..--]
 [eva] computing for function strtol <- main.
-  Called from stdlib_h.c:21.
+  Called from stdlib_h.c:23.
 [eva] using specification for function strtol
-[eva] stdlib_h.c:21: 
+[eva] stdlib_h.c:23: 
   function strtol: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:21: 
+[eva] stdlib_h.c:23: 
   function strtol: precondition 'separation' got status valid.
-[eva] stdlib_h.c:21: 
+[eva] stdlib_h.c:23: 
   function strtol: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:21: 
+[eva] stdlib_h.c:23: 
   function strtol, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtol
 [eva] computing for function strtol <- main.
-  Called from stdlib_h.c:22.
-[eva] stdlib_h.c:22: 
+  Called from stdlib_h.c:24.
+[eva] stdlib_h.c:24: 
   function strtol: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:22: 
+[eva] stdlib_h.c:24: 
   function strtol: precondition 'separation' got status valid.
-[eva] stdlib_h.c:22: 
+[eva] stdlib_h.c:24: 
   function strtol: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:22: 
+[eva] stdlib_h.c:24: 
   function strtol, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtol
 [eva] computing for function strtol <- main.
-  Called from stdlib_h.c:23.
-[eva] stdlib_h.c:23: 
+  Called from stdlib_h.c:25.
+[eva] stdlib_h.c:25: 
   function strtol: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:23: 
+[eva] stdlib_h.c:25: 
   function strtol: precondition 'separation' got status valid.
-[eva] stdlib_h.c:23: 
+[eva] stdlib_h.c:25: 
   function strtol: precondition 'base_range' got status valid.
 [eva] Done for function strtol
 [eva] computing for function strtol <- main.
-  Called from stdlib_h.c:24.
-[eva] stdlib_h.c:24: 
+  Called from stdlib_h.c:26.
+[eva] stdlib_h.c:26: 
   function strtol: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:24: 
+[eva] stdlib_h.c:26: 
   function strtol: precondition 'separation' got status valid.
-[eva] stdlib_h.c:24: 
+[eva] stdlib_h.c:26: 
   function strtol: precondition 'base_range' got status valid.
 [eva] Done for function strtol
 [eva] computing for function strtoll <- main.
-  Called from stdlib_h.c:28.
+  Called from stdlib_h.c:30.
 [eva] using specification for function strtoll
-[eva] stdlib_h.c:28: 
+[eva] stdlib_h.c:30: 
   function strtoll: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:28: 
+[eva] stdlib_h.c:30: 
   function strtoll: precondition 'separation' got status valid.
-[eva] stdlib_h.c:28: 
+[eva] stdlib_h.c:30: 
   function strtoll: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:28: 
+[eva] stdlib_h.c:30: 
   function strtoll, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoll
 [eva] computing for function strtoll <- main.
-  Called from stdlib_h.c:29.
-[eva] stdlib_h.c:29: 
+  Called from stdlib_h.c:31.
+[eva] stdlib_h.c:31: 
   function strtoll: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:29: 
+[eva] stdlib_h.c:31: 
   function strtoll: precondition 'separation' got status valid.
-[eva] stdlib_h.c:29: 
+[eva] stdlib_h.c:31: 
   function strtoll: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:29: 
+[eva] stdlib_h.c:31: 
   function strtoll, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoll
 [eva] computing for function strtoll <- main.
-  Called from stdlib_h.c:30.
-[eva] stdlib_h.c:30: 
+  Called from stdlib_h.c:32.
+[eva] stdlib_h.c:32: 
   function strtoll: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:30: 
+[eva] stdlib_h.c:32: 
   function strtoll: precondition 'separation' got status valid.
-[eva] stdlib_h.c:30: 
+[eva] stdlib_h.c:32: 
   function strtoll: precondition 'base_range' got status valid.
 [eva] Done for function strtoll
 [eva] computing for function strtoul <- main.
-  Called from stdlib_h.c:34.
+  Called from stdlib_h.c:36.
 [eva] using specification for function strtoul
-[eva] stdlib_h.c:34: 
+[eva] stdlib_h.c:36: 
   function strtoul: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:34: 
+[eva] stdlib_h.c:36: 
   function strtoul: precondition 'separation' got status valid.
-[eva] stdlib_h.c:34: 
+[eva] stdlib_h.c:36: 
   function strtoul: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:34: 
+[eva] stdlib_h.c:36: 
   function strtoul, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoul
 [eva] computing for function strtoul <- main.
-  Called from stdlib_h.c:35.
-[eva] stdlib_h.c:35: 
+  Called from stdlib_h.c:37.
+[eva] stdlib_h.c:37: 
   function strtoul: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:35: 
+[eva] stdlib_h.c:37: 
   function strtoul: precondition 'separation' got status valid.
-[eva] stdlib_h.c:35: 
+[eva] stdlib_h.c:37: 
   function strtoul: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:35: 
+[eva] stdlib_h.c:37: 
   function strtoul, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoul
 [eva] computing for function strtoul <- main.
-  Called from stdlib_h.c:36.
-[eva] stdlib_h.c:36: 
+  Called from stdlib_h.c:38.
+[eva] stdlib_h.c:38: 
   function strtoul: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:36: 
+[eva] stdlib_h.c:38: 
   function strtoul: precondition 'separation' got status valid.
-[eva] stdlib_h.c:36: 
+[eva] stdlib_h.c:38: 
   function strtoul: precondition 'base_range' got status valid.
 [eva] Done for function strtoul
 [eva] computing for function strtoull <- main.
-  Called from stdlib_h.c:40.
+  Called from stdlib_h.c:42.
 [eva] using specification for function strtoull
-[eva] stdlib_h.c:40: 
+[eva] stdlib_h.c:42: 
   function strtoull: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:40: 
+[eva] stdlib_h.c:42: 
   function strtoull: precondition 'separation' got status valid.
-[eva] stdlib_h.c:40: 
+[eva] stdlib_h.c:42: 
   function strtoull: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:40: 
+[eva] stdlib_h.c:42: 
   function strtoull, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoull
 [eva] computing for function strtoull <- main.
-  Called from stdlib_h.c:41.
-[eva] stdlib_h.c:41: 
+  Called from stdlib_h.c:43.
+[eva] stdlib_h.c:43: 
   function strtoull: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:41: 
+[eva] stdlib_h.c:43: 
   function strtoull: precondition 'separation' got status valid.
-[eva] stdlib_h.c:41: 
+[eva] stdlib_h.c:43: 
   function strtoull: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:41: 
+[eva] stdlib_h.c:43: 
   function strtoull, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoull
 [eva] computing for function strtoull <- main.
-  Called from stdlib_h.c:42.
-[eva] stdlib_h.c:42: 
+  Called from stdlib_h.c:44.
+[eva] stdlib_h.c:44: 
   function strtoull: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:42: 
+[eva] stdlib_h.c:44: 
   function strtoull: precondition 'separation' got status valid.
-[eva] stdlib_h.c:42: 
+[eva] stdlib_h.c:44: 
   function strtoull: precondition 'base_range' got status valid.
 [eva] Done for function strtoull
 [eva] computing for function strtod <- main.
-  Called from stdlib_h.c:47.
+  Called from stdlib_h.c:49.
 [eva] using specification for function strtod
-[eva] stdlib_h.c:47: 
+[eva] stdlib_h.c:49: 
   function strtod: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:47: 
+[eva] stdlib_h.c:49: 
   function strtod: precondition 'separation' got status valid.
-[eva] stdlib_h.c:47: 
+[eva] stdlib_h.c:49: 
   function strtod, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtod
 [eva] computing for function strtod <- main.
-  Called from stdlib_h.c:48.
-[eva] stdlib_h.c:48: 
+  Called from stdlib_h.c:50.
+[eva] stdlib_h.c:50: 
   function strtod: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:48: 
+[eva] stdlib_h.c:50: 
   function strtod: precondition 'separation' got status valid.
-[eva] stdlib_h.c:48: 
+[eva] stdlib_h.c:50: 
   function strtod, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtod
 [eva] computing for function strtod <- main.
-  Called from stdlib_h.c:49.
-[eva] stdlib_h.c:49: 
+  Called from stdlib_h.c:51.
+[eva] stdlib_h.c:51: 
   function strtod: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:49: 
+[eva] stdlib_h.c:51: 
   function strtod: precondition 'separation' got status valid.
 [eva] Done for function strtod
 [eva] computing for function strtold <- main.
-  Called from stdlib_h.c:53.
+  Called from stdlib_h.c:55.
 [eva] using specification for function strtold
-[eva] stdlib_h.c:53: 
+[eva] stdlib_h.c:55: 
   function strtold: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:53: 
+[eva] stdlib_h.c:55: 
   function strtold: precondition 'separation' got status valid.
-[eva] stdlib_h.c:53: 
+[eva] stdlib_h.c:55: 
   function strtold, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtold
 [eva] computing for function strtold <- main.
-  Called from stdlib_h.c:54.
-[eva] stdlib_h.c:54: 
+  Called from stdlib_h.c:56.
+[eva] stdlib_h.c:56: 
   function strtold: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:54: 
+[eva] stdlib_h.c:56: 
   function strtold: precondition 'separation' got status valid.
-[eva] stdlib_h.c:54: 
+[eva] stdlib_h.c:56: 
   function strtold, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtold
 [eva] computing for function strtold <- main.
-  Called from stdlib_h.c:55.
-[eva] stdlib_h.c:55: 
+  Called from stdlib_h.c:57.
+[eva] stdlib_h.c:57: 
   function strtold: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:55: 
+[eva] stdlib_h.c:57: 
   function strtold: precondition 'separation' got status valid.
 [eva] Done for function strtold
 [eva] computing for function strtof <- main.
-  Called from stdlib_h.c:59.
+  Called from stdlib_h.c:61.
 [eva] using specification for function strtof
-[eva] stdlib_h.c:59: 
+[eva] stdlib_h.c:61: 
   function strtof: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:59: 
+[eva] stdlib_h.c:61: 
   function strtof: precondition 'separation' got status valid.
-[eva] stdlib_h.c:59: 
+[eva] stdlib_h.c:61: 
   function strtof, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtof
 [eva] computing for function strtof <- main.
-  Called from stdlib_h.c:60.
-[eva] stdlib_h.c:60: 
+  Called from stdlib_h.c:62.
+[eva] stdlib_h.c:62: 
   function strtof: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:60: 
+[eva] stdlib_h.c:62: 
   function strtof: precondition 'separation' got status valid.
-[eva] stdlib_h.c:60: 
+[eva] stdlib_h.c:62: 
   function strtof, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtof
 [eva] computing for function strtof <- main.
-  Called from stdlib_h.c:61.
-[eva] stdlib_h.c:61: 
+  Called from stdlib_h.c:63.
+[eva] stdlib_h.c:63: 
   function strtof: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:61: 
+[eva] stdlib_h.c:63: 
   function strtof: precondition 'separation' got status valid.
 [eva] Done for function strtof
 [eva] computing for function bsearch <- main.
-  Called from stdlib_h.c:65.
+  Called from stdlib_h.c:67.
 [eva] using specification for function bsearch
-[eva] stdlib_h.c:65: 
+[eva] stdlib_h.c:67: 
   function bsearch: precondition 'valid_function_compar' got status valid.
 [eva] Done for function bsearch
-[eva:alarm] stdlib_h.c:66: Warning: assertion got status unknown.
+[eva:alarm] stdlib_h.c:68: Warning: assertion got status unknown.
 [eva] computing for function bsearch <- main.
-  Called from stdlib_h.c:68.
-[eva] stdlib_h.c:68: 
+  Called from stdlib_h.c:70.
+[eva] stdlib_h.c:70: 
   function bsearch: precondition 'valid_function_compar' got status valid.
 [eva] Done for function bsearch
-[eva:alarm] stdlib_h.c:69: Warning: assertion got status unknown.
+[eva:alarm] stdlib_h.c:71: Warning: assertion got status unknown.
 [eva] computing for function mkstemp <- main.
-  Called from stdlib_h.c:83.
+  Called from stdlib_h.c:85.
 [eva] using specification for function mkstemp
-[eva] stdlib_h.c:83: 
+[eva] stdlib_h.c:85: 
   function mkstemp: precondition 'valid_template' got status valid.
-[eva] stdlib_h.c:83: 
+[eva] stdlib_h.c:85: 
   function mkstemp: precondition 'template_len' got status valid.
 [eva] Done for function mkstemp
 [eva] computing for function drand48 <- main.
-  Called from stdlib_h.c:87.
+  Called from stdlib_h.c:89.
 [eva] using specification for function drand48
-[eva:alarm] stdlib_h.c:87: Warning: 
+[eva:alarm] stdlib_h.c:89: Warning: 
   function drand48: precondition 'random48_initialized' got status invalid.
 [eva] Done for function drand48
 [eva] computing for function lrand48 <- main.
-  Called from stdlib_h.c:91.
+  Called from stdlib_h.c:93.
 [eva] using specification for function lrand48
-[eva:alarm] stdlib_h.c:91: Warning: 
+[eva:alarm] stdlib_h.c:93: Warning: 
   function lrand48: precondition 'random48_initialized' got status invalid.
 [eva] Done for function lrand48
 [eva] computing for function mrand48 <- main.
-  Called from stdlib_h.c:95.
+  Called from stdlib_h.c:97.
 [eva] using specification for function mrand48
-[eva:alarm] stdlib_h.c:95: Warning: 
+[eva:alarm] stdlib_h.c:97: Warning: 
   function mrand48: precondition 'random48_initialized' got status invalid.
 [eva] Done for function mrand48
 [eva] computing for function erand48 <- main.
-  Called from stdlib_h.c:100.
+  Called from stdlib_h.c:102.
 [eva] using specification for function erand48
-[eva:alarm] stdlib_h.c:100: Warning: 
+[eva] stdlib_h.c:102: 
+  function erand48: precondition 'valid_xsubi' got status valid.
+[eva:alarm] stdlib_h.c:102: Warning: 
   function erand48: precondition 'initialization,initialized_xsubi' got status invalid.
 [eva] Done for function erand48
 [eva] computing for function erand48 <- main.
-  Called from stdlib_h.c:105.
-[eva] stdlib_h.c:105: 
+  Called from stdlib_h.c:107.
+[eva] stdlib_h.c:107: 
+  function erand48: precondition 'valid_xsubi' got status valid.
+[eva] stdlib_h.c:107: 
   function erand48: precondition 'initialization,initialized_xsubi' got status valid.
 [eva] Done for function erand48
-[eva] stdlib_h.c:106: assertion got status valid.
+[eva] stdlib_h.c:108: assertion got status valid.
 [eva] computing for function jrand48 <- main.
-  Called from stdlib_h.c:107.
+  Called from stdlib_h.c:109.
 [eva] using specification for function jrand48
-[eva] stdlib_h.c:107: 
+[eva] stdlib_h.c:109: 
+  function jrand48: precondition 'valid_xsubi' got status valid.
+[eva] stdlib_h.c:109: 
   function jrand48: precondition 'initialization,initialized_xsubi' got status valid.
 [eva] Done for function jrand48
-[eva] stdlib_h.c:108: assertion got status valid.
+[eva] stdlib_h.c:110: assertion got status valid.
 [eva] computing for function nrand48 <- main.
-  Called from stdlib_h.c:109.
+  Called from stdlib_h.c:111.
 [eva] using specification for function nrand48
-[eva] stdlib_h.c:109: 
+[eva] stdlib_h.c:111: 
+  function nrand48: precondition 'valid_xsubi' got status valid.
+[eva] stdlib_h.c:111: 
   function nrand48: precondition 'initialization,initialized_xsubi' got status valid.
 [eva] Done for function nrand48
-[eva] stdlib_h.c:110: assertion got status valid.
+[eva] stdlib_h.c:112: assertion got status valid.
 [eva] computing for function srand48 <- main.
-  Called from stdlib_h.c:112.
+  Called from stdlib_h.c:114.
 [eva] using specification for function srand48
 [eva] Done for function srand48
 [eva] computing for function seed48 <- main.
-  Called from stdlib_h.c:114.
+  Called from stdlib_h.c:116.
 [eva] using specification for function seed48
-[eva] stdlib_h.c:114: 
+[eva] stdlib_h.c:116: 
+  function seed48: precondition 'valid_seed16v' got status valid.
+[eva] stdlib_h.c:116: 
   function seed48: precondition 'initialization,initialized_seed16v' got status valid.
 [eva] Done for function seed48
 [eva] computing for function lcong48 <- main.
-  Called from stdlib_h.c:116.
+  Called from stdlib_h.c:118.
 [eva] using specification for function lcong48
+[eva] stdlib_h.c:118: 
+  function lcong48: precondition 'valid_param' got status valid.
+[eva] stdlib_h.c:118: 
+  function lcong48: precondition 'initialization,initialized_param' got status valid.
 [eva] Done for function lcong48
 [eva] computing for function drand48 <- main.
-  Called from stdlib_h.c:118.
-[eva] stdlib_h.c:118: 
+  Called from stdlib_h.c:120.
+[eva] stdlib_h.c:120: 
   function drand48: precondition 'random48_initialized' got status valid.
 [eva] Done for function drand48
-[eva] stdlib_h.c:119: assertion got status valid.
+[eva] stdlib_h.c:121: assertion got status valid.
 [eva] computing for function mrand48 <- main.
-  Called from stdlib_h.c:120.
-[eva] stdlib_h.c:120: 
+  Called from stdlib_h.c:122.
+[eva] stdlib_h.c:122: 
   function mrand48: precondition 'random48_initialized' got status valid.
 [eva] Done for function mrand48
-[eva] stdlib_h.c:121: assertion got status valid.
+[eva] stdlib_h.c:123: assertion got status valid.
 [eva] computing for function lrand48 <- main.
-  Called from stdlib_h.c:122.
-[eva] stdlib_h.c:122: 
+  Called from stdlib_h.c:124.
+[eva] stdlib_h.c:124: 
   function lrand48: precondition 'random48_initialized' got status valid.
 [eva] Done for function lrand48
-[eva] stdlib_h.c:123: assertion got status valid.
+[eva] stdlib_h.c:125: assertion got status valid.
+[eva] computing for function getenv <- main.
+  Called from stdlib_h.c:127.
+[eva] using specification for function getenv
+[eva:libc:unsupported-spec] stdlib_h.c:127: Warning: 
+  The specification of function 'getenv' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/stdlib.c' to the analyzed source files.
+[eva] stdlib_h.c:127: 
+  function getenv: precondition 'valid_name' got status valid.
+[eva] Done for function getenv
+[eva:alarm] stdlib_h.c:129: Warning: check 'imprecise' got status unknown.
+[eva] computing for function setenv <- main.
+  Called from stdlib_h.c:131.
+[eva] using specification for function setenv
+[eva:libc:unsupported-spec] stdlib_h.c:131: Warning: 
+  The specification of function 'setenv' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/stdlib.c' to the analyzed source files.
+[eva] stdlib_h.c:131: Warning: ignoring unsupported allocates clause
+[eva] stdlib_h.c:131: 
+  function setenv: precondition 'valid_name' got status valid.
+[eva] stdlib_h.c:131: 
+  function setenv: precondition 'valid_value' got status valid.
+[eva:garbled-mix:assigns] stdlib_h.c:131: 
+  The specification of function setenv has generated a garbled mix of addresses
+  for assigns clause __fc_env[0 ..].
+[eva] Done for function setenv
+[eva] stdlib_h.c:132: check got status valid.
+[eva] computing for function putenv <- main.
+  Called from stdlib_h.c:133.
+[eva] using specification for function putenv
+[eva:libc:unsupported-spec] stdlib_h.c:133: Warning: 
+  The specification of function 'putenv' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/stdlib.c' to the analyzed source files.
+[eva] stdlib_h.c:133: 
+  function putenv: precondition 'valid_string' got status valid.
+[eva] Done for function putenv
+[eva] computing for function div <- main.
+  Called from stdlib_h.c:137.
+[eva] using specification for function div
+[eva:alarm] stdlib_h.c:137: Warning: 
+  function div: precondition 'denom_nonzero' got status invalid.
+[eva] stdlib_h.c:137: 
+  function div: no state left, precondition 'no_overflow' got status valid.
+[eva] Done for function div
+[eva] computing for function div <- main.
+  Called from stdlib_h.c:141.
+[eva] stdlib_h.c:141: 
+  function div: precondition 'denom_nonzero' got status valid.
+[eva:alarm] stdlib_h.c:141: Warning: 
+  function div: precondition 'no_overflow' got status invalid.
+[eva] Done for function div
+[eva] computing for function div <- main.
+  Called from stdlib_h.c:144.
+[eva] stdlib_h.c:144: 
+  function div: precondition 'denom_nonzero' got status valid.
+[eva] stdlib_h.c:144: function div: precondition 'no_overflow' got status valid.
+[eva] Done for function div
+[eva] computing for function ldiv <- main.
+  Called from stdlib_h.c:146.
+[eva] using specification for function ldiv
+[eva] stdlib_h.c:146: 
+  function ldiv: precondition 'denom_nonzero' got status valid.
+[eva] stdlib_h.c:146: 
+  function ldiv: precondition 'no_overflow' got status valid.
+[eva] Done for function ldiv
+[eva] computing for function lldiv <- main.
+  Called from stdlib_h.c:147.
+[eva] using specification for function lldiv
+[eva] stdlib_h.c:147: 
+  function lldiv: precondition 'denom_nonzero' got status valid.
+[eva] stdlib_h.c:147: 
+  function lldiv: precondition 'no_overflow' got status valid.
+[eva] Done for function lldiv
 [eva] Recording results for main
 [eva] Done for function main
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
+  __fc_errno ∈
+            {{ garbled mix of &{S_0___fc_env; S_1___fc_env}
+             (origin: Library function {stdlib_h.c:131}) }}
   __fc_random48_init ∈ {1}
   __fc_random48_counter[0..2] ∈ [--..--]
+  __fc_env[0..4095] ∈
+          {{ garbled mix of &{putenv_buf; S_0___fc_env; S_1___fc_env}
+           (origin: Library function {stdlib_h.c:131}) }}
   base ∈ {0; 2; 36}
   sl ∈ {{ "12 34 -56" }}
   s ∈ {{ " 3.14 0x1.2p2" }}
@@ -361,4 +471,12 @@
        [4] ∈ {4}
        [5] ∈ {2}
        [6] ∈ {0}
+  path ∈ {{ NULL ; &S_0___fc_env{[0], [1]} ; &S_1___fc_env{[0], [1]} }}
+  setenv_res ∈ {-1; 0}
+  putenv_res ∈ [--..--]
+  div_res ∈ [--..--]
+  ldiv_res ∈ [--..--]
+  lldiv_res ∈ [--..--]
   __retres ∈ {0}
+  S_0___fc_env[0..1] ∈ [--..--]
+  S_1___fc_env[0..1] ∈ [--..--]
diff --git a/tests/libc/oracle/stdlib_h.1.res.oracle b/tests/libc/oracle/stdlib_h.1.res.oracle
index ae6a5de51506dd6f6c779a0f8b45098644817988..51a15bb613a6ef5a89578c5d4cdcb03753f2684d 100644
--- a/tests/libc/oracle/stdlib_h.1.res.oracle
+++ b/tests/libc/oracle/stdlib_h.1.res.oracle
@@ -3,325 +3,435 @@
 [eva] Computing initial state
 [eva] Initial state computed
 [eva:initial-state] Values of globals at initialization
+  putenv_buf[0] ∈ {80}
+            [1] ∈ {65}
+            [2] ∈ {84}
+            [3] ∈ {72}
+            [4] ∈ {51}
+            [5] ∈ {61}
+            [6] ∈ {47}
+            [7] ∈ {58}
+            [8] ∈ {47}
+            [9] ∈ {102}
+            [10..11] ∈ {111}
+            [12] ∈ {58}
+            [13] ∈ {47}
+            [14] ∈ {98}
+            [15] ∈ {97}
+            [16] ∈ {114}
+            [17] ∈ {58}
+            [18..29] ∈ {0}
   nondet ∈ [--..--]
 [eva] computing for function strtol <- main.
-  Called from stdlib_h.c:21.
+  Called from stdlib_h.c:23.
 [eva] using specification for function strtol
-[eva] stdlib_h.c:21: 
+[eva] stdlib_h.c:23: 
   function strtol: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:21: 
+[eva] stdlib_h.c:23: 
   function strtol: precondition 'separation' got status valid.
-[eva] stdlib_h.c:21: 
+[eva] stdlib_h.c:23: 
   function strtol: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:21: 
+[eva] stdlib_h.c:23: 
   function strtol, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtol
 [eva] computing for function strtol <- main.
-  Called from stdlib_h.c:22.
-[eva] stdlib_h.c:22: 
+  Called from stdlib_h.c:24.
+[eva] stdlib_h.c:24: 
   function strtol: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:22: 
+[eva] stdlib_h.c:24: 
   function strtol: precondition 'separation' got status valid.
-[eva] stdlib_h.c:22: 
+[eva] stdlib_h.c:24: 
   function strtol: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:22: 
+[eva] stdlib_h.c:24: 
   function strtol, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtol
 [eva] computing for function strtol <- main.
-  Called from stdlib_h.c:23.
-[eva] stdlib_h.c:23: 
+  Called from stdlib_h.c:25.
+[eva] stdlib_h.c:25: 
   function strtol: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:23: 
+[eva] stdlib_h.c:25: 
   function strtol: precondition 'separation' got status valid.
-[eva] stdlib_h.c:23: 
+[eva] stdlib_h.c:25: 
   function strtol: precondition 'base_range' got status valid.
 [eva] Done for function strtol
 [eva] computing for function strtol <- main.
-  Called from stdlib_h.c:24.
-[eva] stdlib_h.c:24: 
+  Called from stdlib_h.c:26.
+[eva] stdlib_h.c:26: 
   function strtol: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:24: 
+[eva] stdlib_h.c:26: 
   function strtol: precondition 'separation' got status valid.
-[eva] stdlib_h.c:24: 
+[eva] stdlib_h.c:26: 
   function strtol: precondition 'base_range' got status valid.
 [eva] Done for function strtol
 [eva] computing for function strtoll <- main.
-  Called from stdlib_h.c:28.
+  Called from stdlib_h.c:30.
 [eva] using specification for function strtoll
-[eva] stdlib_h.c:28: 
+[eva] stdlib_h.c:30: 
   function strtoll: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:28: 
+[eva] stdlib_h.c:30: 
   function strtoll: precondition 'separation' got status valid.
-[eva] stdlib_h.c:28: 
+[eva] stdlib_h.c:30: 
   function strtoll: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:28: 
+[eva] stdlib_h.c:30: 
   function strtoll, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoll
 [eva] computing for function strtoll <- main.
-  Called from stdlib_h.c:29.
-[eva] stdlib_h.c:29: 
+  Called from stdlib_h.c:31.
+[eva] stdlib_h.c:31: 
   function strtoll: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:29: 
+[eva] stdlib_h.c:31: 
   function strtoll: precondition 'separation' got status valid.
-[eva] stdlib_h.c:29: 
+[eva] stdlib_h.c:31: 
   function strtoll: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:29: 
+[eva] stdlib_h.c:31: 
   function strtoll, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoll
 [eva] computing for function strtoll <- main.
-  Called from stdlib_h.c:30.
-[eva] stdlib_h.c:30: 
+  Called from stdlib_h.c:32.
+[eva] stdlib_h.c:32: 
   function strtoll: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:30: 
+[eva] stdlib_h.c:32: 
   function strtoll: precondition 'separation' got status valid.
-[eva] stdlib_h.c:30: 
+[eva] stdlib_h.c:32: 
   function strtoll: precondition 'base_range' got status valid.
 [eva] Done for function strtoll
 [eva] computing for function strtoul <- main.
-  Called from stdlib_h.c:34.
+  Called from stdlib_h.c:36.
 [eva] using specification for function strtoul
-[eva] stdlib_h.c:34: 
+[eva] stdlib_h.c:36: 
   function strtoul: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:34: 
+[eva] stdlib_h.c:36: 
   function strtoul: precondition 'separation' got status valid.
-[eva] stdlib_h.c:34: 
+[eva] stdlib_h.c:36: 
   function strtoul: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:34: 
+[eva] stdlib_h.c:36: 
   function strtoul, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoul
 [eva] computing for function strtoul <- main.
-  Called from stdlib_h.c:35.
-[eva] stdlib_h.c:35: 
+  Called from stdlib_h.c:37.
+[eva] stdlib_h.c:37: 
   function strtoul: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:35: 
+[eva] stdlib_h.c:37: 
   function strtoul: precondition 'separation' got status valid.
-[eva] stdlib_h.c:35: 
+[eva] stdlib_h.c:37: 
   function strtoul: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:35: 
+[eva] stdlib_h.c:37: 
   function strtoul, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoul
 [eva] computing for function strtoul <- main.
-  Called from stdlib_h.c:36.
-[eva] stdlib_h.c:36: 
+  Called from stdlib_h.c:38.
+[eva] stdlib_h.c:38: 
   function strtoul: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:36: 
+[eva] stdlib_h.c:38: 
   function strtoul: precondition 'separation' got status valid.
-[eva] stdlib_h.c:36: 
+[eva] stdlib_h.c:38: 
   function strtoul: precondition 'base_range' got status valid.
 [eva] Done for function strtoul
 [eva] computing for function strtoull <- main.
-  Called from stdlib_h.c:40.
+  Called from stdlib_h.c:42.
 [eva] using specification for function strtoull
-[eva] stdlib_h.c:40: 
+[eva] stdlib_h.c:42: 
   function strtoull: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:40: 
+[eva] stdlib_h.c:42: 
   function strtoull: precondition 'separation' got status valid.
-[eva] stdlib_h.c:40: 
+[eva] stdlib_h.c:42: 
   function strtoull: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:40: 
+[eva] stdlib_h.c:42: 
   function strtoull, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoull
 [eva] computing for function strtoull <- main.
-  Called from stdlib_h.c:41.
-[eva] stdlib_h.c:41: 
+  Called from stdlib_h.c:43.
+[eva] stdlib_h.c:43: 
   function strtoull: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:41: 
+[eva] stdlib_h.c:43: 
   function strtoull: precondition 'separation' got status valid.
-[eva] stdlib_h.c:41: 
+[eva] stdlib_h.c:43: 
   function strtoull: precondition 'base_range' got status valid.
-[eva] stdlib_h.c:41: 
+[eva] stdlib_h.c:43: 
   function strtoull, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtoull
 [eva] computing for function strtoull <- main.
-  Called from stdlib_h.c:42.
-[eva] stdlib_h.c:42: 
+  Called from stdlib_h.c:44.
+[eva] stdlib_h.c:44: 
   function strtoull: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:42: 
+[eva] stdlib_h.c:44: 
   function strtoull: precondition 'separation' got status valid.
-[eva] stdlib_h.c:42: 
+[eva] stdlib_h.c:44: 
   function strtoull: precondition 'base_range' got status valid.
 [eva] Done for function strtoull
 [eva] computing for function strtod <- main.
-  Called from stdlib_h.c:47.
+  Called from stdlib_h.c:49.
 [eva] using specification for function strtod
-[eva] stdlib_h.c:47: 
+[eva] stdlib_h.c:49: 
   function strtod: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:47: 
+[eva] stdlib_h.c:49: 
   function strtod: precondition 'separation' got status valid.
-[eva] stdlib_h.c:47: 
+[eva] stdlib_h.c:49: 
   function strtod, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtod
 [eva] computing for function strtod <- main.
-  Called from stdlib_h.c:48.
-[eva] stdlib_h.c:48: 
+  Called from stdlib_h.c:50.
+[eva] stdlib_h.c:50: 
   function strtod: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:48: 
+[eva] stdlib_h.c:50: 
   function strtod: precondition 'separation' got status valid.
-[eva] stdlib_h.c:48: 
+[eva] stdlib_h.c:50: 
   function strtod, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtod
 [eva] computing for function strtod <- main.
-  Called from stdlib_h.c:49.
-[eva] stdlib_h.c:49: 
+  Called from stdlib_h.c:51.
+[eva] stdlib_h.c:51: 
   function strtod: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:49: 
+[eva] stdlib_h.c:51: 
   function strtod: precondition 'separation' got status valid.
 [eva] Done for function strtod
 [eva] computing for function strtold <- main.
-  Called from stdlib_h.c:53.
+  Called from stdlib_h.c:55.
 [eva] using specification for function strtold
-[eva] stdlib_h.c:53: 
+[eva] stdlib_h.c:55: 
   function strtold: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:53: 
+[eva] stdlib_h.c:55: 
   function strtold: precondition 'separation' got status valid.
-[eva] stdlib_h.c:53: 
+[eva] stdlib_h.c:55: 
   function strtold, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtold
 [eva] computing for function strtold <- main.
-  Called from stdlib_h.c:54.
-[eva] stdlib_h.c:54: 
+  Called from stdlib_h.c:56.
+[eva] stdlib_h.c:56: 
   function strtold: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:54: 
+[eva] stdlib_h.c:56: 
   function strtold: precondition 'separation' got status valid.
-[eva] stdlib_h.c:54: 
+[eva] stdlib_h.c:56: 
   function strtold, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtold
 [eva] computing for function strtold <- main.
-  Called from stdlib_h.c:55.
-[eva] stdlib_h.c:55: 
+  Called from stdlib_h.c:57.
+[eva] stdlib_h.c:57: 
   function strtold: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:55: 
+[eva] stdlib_h.c:57: 
   function strtold: precondition 'separation' got status valid.
 [eva] Done for function strtold
 [eva] computing for function strtof <- main.
-  Called from stdlib_h.c:59.
+  Called from stdlib_h.c:61.
 [eva] using specification for function strtof
-[eva] stdlib_h.c:59: 
+[eva] stdlib_h.c:61: 
   function strtof: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:59: 
+[eva] stdlib_h.c:61: 
   function strtof: precondition 'separation' got status valid.
-[eva] stdlib_h.c:59: 
+[eva] stdlib_h.c:61: 
   function strtof, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtof
 [eva] computing for function strtof <- main.
-  Called from stdlib_h.c:60.
-[eva] stdlib_h.c:60: 
+  Called from stdlib_h.c:62.
+[eva] stdlib_h.c:62: 
   function strtof: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:60: 
+[eva] stdlib_h.c:62: 
   function strtof: precondition 'separation' got status valid.
-[eva] stdlib_h.c:60: 
+[eva] stdlib_h.c:62: 
   function strtof, behavior store_position: precondition 'valid_endptr' got status valid.
 [eva] Done for function strtof
 [eva] computing for function strtof <- main.
-  Called from stdlib_h.c:61.
-[eva] stdlib_h.c:61: 
+  Called from stdlib_h.c:63.
+[eva] stdlib_h.c:63: 
   function strtof: precondition 'valid_string_nptr' got status valid.
-[eva] stdlib_h.c:61: 
+[eva] stdlib_h.c:63: 
   function strtof: precondition 'separation' got status valid.
 [eva] Done for function strtof
 [eva] computing for function bsearch <- main.
-  Called from stdlib_h.c:65.
+  Called from stdlib_h.c:67.
 [eva] using specification for function bsearch
-[eva] stdlib_h.c:65: 
+[eva] stdlib_h.c:67: 
   function bsearch: precondition 'valid_function_compar' got status valid.
 [eva] Done for function bsearch
-[eva:alarm] stdlib_h.c:66: Warning: assertion got status unknown.
+[eva:alarm] stdlib_h.c:68: Warning: assertion got status unknown.
 [eva] computing for function bsearch <- main.
-  Called from stdlib_h.c:68.
-[eva] stdlib_h.c:68: 
+  Called from stdlib_h.c:70.
+[eva] stdlib_h.c:70: 
   function bsearch: precondition 'valid_function_compar' got status valid.
 [eva] Done for function bsearch
-[eva:alarm] stdlib_h.c:69: Warning: assertion got status unknown.
+[eva:alarm] stdlib_h.c:71: Warning: assertion got status unknown.
 [eva] computing for function mkstemp <- main.
-  Called from stdlib_h.c:83.
+  Called from stdlib_h.c:85.
 [eva] using specification for function mkstemp
-[eva] stdlib_h.c:83: 
+[eva] stdlib_h.c:85: 
   function mkstemp: precondition 'valid_template' got status valid.
-[eva] stdlib_h.c:83: 
+[eva] stdlib_h.c:85: 
   function mkstemp: precondition 'template_len' got status valid.
 [eva] Done for function mkstemp
 [eva] computing for function drand48 <- main.
-  Called from stdlib_h.c:87.
+  Called from stdlib_h.c:89.
 [eva] using specification for function drand48
-[eva:alarm] stdlib_h.c:87: Warning: 
+[eva:alarm] stdlib_h.c:89: Warning: 
   function drand48: precondition 'random48_initialized' got status invalid.
 [eva] Done for function drand48
 [eva] computing for function lrand48 <- main.
-  Called from stdlib_h.c:91.
+  Called from stdlib_h.c:93.
 [eva] using specification for function lrand48
-[eva:alarm] stdlib_h.c:91: Warning: 
+[eva:alarm] stdlib_h.c:93: Warning: 
   function lrand48: precondition 'random48_initialized' got status invalid.
 [eva] Done for function lrand48
 [eva] computing for function mrand48 <- main.
-  Called from stdlib_h.c:95.
+  Called from stdlib_h.c:97.
 [eva] using specification for function mrand48
-[eva:alarm] stdlib_h.c:95: Warning: 
+[eva:alarm] stdlib_h.c:97: Warning: 
   function mrand48: precondition 'random48_initialized' got status invalid.
 [eva] Done for function mrand48
 [eva] computing for function erand48 <- main.
-  Called from stdlib_h.c:100.
+  Called from stdlib_h.c:102.
 [eva] using specification for function erand48
-[eva:alarm] stdlib_h.c:100: Warning: 
+[eva] stdlib_h.c:102: 
+  function erand48: precondition 'valid_xsubi' got status valid.
+[eva:alarm] stdlib_h.c:102: Warning: 
   function erand48: precondition 'initialization,initialized_xsubi' got status invalid.
 [eva] Done for function erand48
 [eva] computing for function erand48 <- main.
-  Called from stdlib_h.c:105.
-[eva] stdlib_h.c:105: 
+  Called from stdlib_h.c:107.
+[eva] stdlib_h.c:107: 
+  function erand48: precondition 'valid_xsubi' got status valid.
+[eva] stdlib_h.c:107: 
   function erand48: precondition 'initialization,initialized_xsubi' got status valid.
 [eva] Done for function erand48
-[eva] stdlib_h.c:106: assertion got status valid.
+[eva] stdlib_h.c:108: assertion got status valid.
 [eva] computing for function jrand48 <- main.
-  Called from stdlib_h.c:107.
+  Called from stdlib_h.c:109.
 [eva] using specification for function jrand48
-[eva] stdlib_h.c:107: 
+[eva] stdlib_h.c:109: 
+  function jrand48: precondition 'valid_xsubi' got status valid.
+[eva] stdlib_h.c:109: 
   function jrand48: precondition 'initialization,initialized_xsubi' got status valid.
 [eva] Done for function jrand48
-[eva] stdlib_h.c:108: assertion got status valid.
+[eva] stdlib_h.c:110: assertion got status valid.
 [eva] computing for function nrand48 <- main.
-  Called from stdlib_h.c:109.
+  Called from stdlib_h.c:111.
 [eva] using specification for function nrand48
-[eva] stdlib_h.c:109: 
+[eva] stdlib_h.c:111: 
+  function nrand48: precondition 'valid_xsubi' got status valid.
+[eva] stdlib_h.c:111: 
   function nrand48: precondition 'initialization,initialized_xsubi' got status valid.
 [eva] Done for function nrand48
-[eva] stdlib_h.c:110: assertion got status valid.
+[eva] stdlib_h.c:112: assertion got status valid.
 [eva] computing for function srand48 <- main.
-  Called from stdlib_h.c:112.
+  Called from stdlib_h.c:114.
 [eva] using specification for function srand48
 [eva] Done for function srand48
 [eva] computing for function seed48 <- main.
-  Called from stdlib_h.c:114.
+  Called from stdlib_h.c:116.
 [eva] using specification for function seed48
-[eva] stdlib_h.c:114: 
+[eva] stdlib_h.c:116: 
+  function seed48: precondition 'valid_seed16v' got status valid.
+[eva] stdlib_h.c:116: 
   function seed48: precondition 'initialization,initialized_seed16v' got status valid.
 [eva] Done for function seed48
 [eva] computing for function lcong48 <- main.
-  Called from stdlib_h.c:116.
+  Called from stdlib_h.c:118.
 [eva] using specification for function lcong48
+[eva] stdlib_h.c:118: 
+  function lcong48: precondition 'valid_param' got status valid.
+[eva] stdlib_h.c:118: 
+  function lcong48: precondition 'initialization,initialized_param' got status valid.
 [eva] Done for function lcong48
 [eva] computing for function drand48 <- main.
-  Called from stdlib_h.c:118.
-[eva] stdlib_h.c:118: 
+  Called from stdlib_h.c:120.
+[eva] stdlib_h.c:120: 
   function drand48: precondition 'random48_initialized' got status valid.
 [eva] Done for function drand48
-[eva] stdlib_h.c:119: assertion got status valid.
+[eva] stdlib_h.c:121: assertion got status valid.
 [eva] computing for function mrand48 <- main.
-  Called from stdlib_h.c:120.
-[eva] stdlib_h.c:120: 
+  Called from stdlib_h.c:122.
+[eva] stdlib_h.c:122: 
   function mrand48: precondition 'random48_initialized' got status valid.
 [eva] Done for function mrand48
-[eva] stdlib_h.c:121: assertion got status valid.
+[eva] stdlib_h.c:123: assertion got status valid.
 [eva] computing for function lrand48 <- main.
-  Called from stdlib_h.c:122.
-[eva] stdlib_h.c:122: 
+  Called from stdlib_h.c:124.
+[eva] stdlib_h.c:124: 
   function lrand48: precondition 'random48_initialized' got status valid.
 [eva] Done for function lrand48
-[eva] stdlib_h.c:123: assertion got status valid.
+[eva] stdlib_h.c:125: assertion got status valid.
+[eva] computing for function getenv <- main.
+  Called from stdlib_h.c:127.
+[eva] using specification for function getenv
+[eva:libc:unsupported-spec] stdlib_h.c:127: Warning: 
+  The specification of function 'getenv' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/stdlib.c' to the analyzed source files.
+[eva] stdlib_h.c:127: 
+  function getenv: precondition 'valid_name' got status valid.
+[eva] Done for function getenv
+[eva:alarm] stdlib_h.c:129: Warning: check 'imprecise' got status unknown.
+[eva] computing for function setenv <- main.
+  Called from stdlib_h.c:131.
+[eva] using specification for function setenv
+[eva:libc:unsupported-spec] stdlib_h.c:131: Warning: 
+  The specification of function 'setenv' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/stdlib.c' to the analyzed source files.
+[eva] stdlib_h.c:131: Warning: ignoring unsupported allocates clause
+[eva] stdlib_h.c:131: 
+  function setenv: precondition 'valid_name' got status valid.
+[eva] stdlib_h.c:131: 
+  function setenv: precondition 'valid_value' got status valid.
+[eva:garbled-mix:assigns] stdlib_h.c:131: 
+  The specification of function setenv has generated a garbled mix of addresses
+  for assigns clause __fc_env[0 ..].
+[eva] Done for function setenv
+[eva] stdlib_h.c:132: check got status valid.
+[eva] computing for function putenv <- main.
+  Called from stdlib_h.c:133.
+[eva] using specification for function putenv
+[eva:libc:unsupported-spec] stdlib_h.c:133: Warning: 
+  The specification of function 'putenv' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/stdlib.c' to the analyzed source files.
+[eva] stdlib_h.c:133: 
+  function putenv: precondition 'valid_string' got status valid.
+[eva] Done for function putenv
+[eva] computing for function div <- main.
+  Called from stdlib_h.c:137.
+[eva] using specification for function div
+[eva:alarm] stdlib_h.c:137: Warning: 
+  function div: precondition 'denom_nonzero' got status invalid.
+[eva] stdlib_h.c:137: 
+  function div: no state left, precondition 'no_overflow' got status valid.
+[eva] Done for function div
+[eva] computing for function div <- main.
+  Called from stdlib_h.c:141.
+[eva] stdlib_h.c:141: 
+  function div: precondition 'denom_nonzero' got status valid.
+[eva:alarm] stdlib_h.c:141: Warning: 
+  function div: precondition 'no_overflow' got status invalid.
+[eva] Done for function div
+[eva] computing for function div <- main.
+  Called from stdlib_h.c:144.
+[eva] stdlib_h.c:144: 
+  function div: precondition 'denom_nonzero' got status valid.
+[eva] stdlib_h.c:144: function div: precondition 'no_overflow' got status valid.
+[eva] Done for function div
+[eva] computing for function ldiv <- main.
+  Called from stdlib_h.c:146.
+[eva] using specification for function ldiv
+[eva] stdlib_h.c:146: 
+  function ldiv: precondition 'denom_nonzero' got status valid.
+[eva] stdlib_h.c:146: 
+  function ldiv: precondition 'no_overflow' got status valid.
+[eva] Done for function ldiv
+[eva] computing for function lldiv <- main.
+  Called from stdlib_h.c:147.
+[eva] using specification for function lldiv
+[eva] stdlib_h.c:147: 
+  function lldiv: precondition 'denom_nonzero' got status valid.
+[eva] stdlib_h.c:147: 
+  function lldiv: precondition 'no_overflow' got status valid.
+[eva] Done for function lldiv
 [eva] Recording results for main
 [eva] Done for function main
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
+  __fc_errno ∈
+            {{ garbled mix of &{S_0___fc_env; S_1___fc_env}
+             (origin: Library function {stdlib_h.c:131}) }}
   __fc_random48_init ∈ {1}
   __fc_random48_counter[0..2] ∈ [--..--]
+  __fc_env[0..4095] ∈
+          {{ garbled mix of &{putenv_buf; S_0___fc_env; S_1___fc_env}
+           (origin: Library function {stdlib_h.c:131}) }}
   base ∈ {0; 2; 36}
   sl ∈ {{ "12 34 -56" }}
   s ∈ {{ " 3.14 0x1.2p2" }}
@@ -361,4 +471,12 @@
        [4] ∈ {4}
        [5] ∈ {2}
        [6] ∈ {0}
+  path ∈ {{ NULL ; &S_0___fc_env{[0], [1]} ; &S_1___fc_env{[0], [1]} }}
+  setenv_res ∈ {-1; 0}
+  putenv_res ∈ [--..--]
+  div_res ∈ [--..--]
+  ldiv_res ∈ [--..--]
+  lldiv_res ∈ [--..--]
   __retres ∈ {0}
+  S_0___fc_env[0..1] ∈ [--..--]
+  S_1___fc_env[0..1] ∈ [--..--]
diff --git a/tests/libc/oracle/string_c.res.oracle b/tests/libc/oracle/string_c.res.oracle
index 510703cce422f71fa9c2927caafe8b238d9f8468..67ca8f2a247924dddf282df302a36b367f9283c7 100644
--- a/tests/libc/oracle/string_c.res.oracle
+++ b/tests/libc/oracle/string_c.res.oracle
@@ -5,7 +5,7 @@
 [eva:initial-state] Values of globals at initialization
   v ∈ [--..--]
 [eva] computing for function test_memcpy <- main.
-  Called from string_c.c:294.
+  Called from string_c.c:293.
 [eva] computing for function memcpy <- test_memcpy <- main.
   Called from string_c.c:10.
 [eva] string_c.c:10: 
@@ -13,11 +13,11 @@
 [eva] string_c.c:10: function memcpy: precondition 'valid_src' got status valid.
 [eva] string_c.c:10: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:101: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:118: Warning: 
   function memcpy: postcondition 'copied_contents' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:102: 
+[eva] FRAMAC_SHARE/libc/string.h:119: 
   function memcpy: postcondition 'result_ptr' got status valid.
 [eva] Recording results for memcpy
 [eva] Done for function memcpy
@@ -71,7 +71,7 @@
 [eva] Recording results for test_memcpy
 [eva] Done for function test_memcpy
 [eva] computing for function test_memmove <- main.
-  Called from string_c.c:295.
+  Called from string_c.c:294.
 [eva] string_c.c:34: Frama_C_show_each_s0: {1}
 [eva] string_c.c:35: Frama_C_show_each_s0: {2}
 [eva] string_c.c:36: Frama_C_show_each_s0: {3}
@@ -92,11 +92,11 @@
   function memoverlap, behavior not_separated_gt: postcondition 'result_p_after_q' got status valid.
 [eva] Recording results for memoverlap
 [eva] Done for function memoverlap
-[eva] FRAMAC_SHARE/libc/string.h:124: 
+[eva] FRAMAC_SHARE/libc/string.h:141: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:124: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:141: Warning: 
   function memmove: postcondition 'copied_contents' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:125: 
+[eva] FRAMAC_SHARE/libc/string.h:142: 
   function memmove: postcondition 'result_ptr' got status valid.
 [eva] Recording results for memmove
 [eva] Done for function memmove
@@ -148,12 +148,12 @@
 [eva] Recording results for test_memmove
 [eva] Done for function test_memmove
 [eva] computing for function test_strlen <- main.
-  Called from string_c.c:296.
+  Called from string_c.c:295.
 [eva] computing for function strlen <- test_strlen <- main.
   Called from string_c.c:64.
 [eva] string_c.c:64: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:143: 
+[eva] FRAMAC_SHARE/libc/string.h:160: 
   function strlen: postcondition 'acsl_c_equiv' got status valid.
 [eva] Recording results for strlen
 [eva] Done for function strlen
@@ -175,12 +175,12 @@
 [eva] Recording results for test_strlen
 [eva] Done for function test_strlen
 [eva] computing for function test_strnlen <- main.
-  Called from string_c.c:297.
+  Called from string_c.c:296.
 [eva] computing for function strnlen <- test_strnlen <- main.
   Called from string_c.c:75.
 [eva] string_c.c:75: 
   function strnlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:149: 
+[eva] FRAMAC_SHARE/libc/string.h:166: 
   function strnlen: postcondition 'result_bounded' got status valid.
 [eva] Recording results for strnlen
 [eva] Done for function strnlen
@@ -223,15 +223,15 @@
 [eva] Recording results for test_strnlen
 [eva] Done for function test_strnlen
 [eva] computing for function test_memset <- main.
-  Called from string_c.c:298.
+  Called from string_c.c:297.
 [eva] computing for function memset <- test_memset <- main.
   Called from string_c.c:92.
 [eva] string_c.c:92: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
-[eva:alarm] FRAMAC_SHARE/libc/string.h:134: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:151: Warning: 
   function memset: postcondition 'acsl_c_equiv' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:135: 
+[eva] FRAMAC_SHARE/libc/string.h:152: 
   function memset: postcondition 'result_ptr' got status valid.
 [eva] Recording results for memset
 [eva] Done for function memset
@@ -247,16 +247,16 @@
 [eva] Recording results for test_memset
 [eva] Done for function test_memset
 [eva] computing for function test_strcmp <- main.
-  Called from string_c.c:299.
+  Called from string_c.c:298.
 [eva] computing for function strcmp <- test_strcmp <- main.
   Called from string_c.c:104.
 [eva] string_c.c:104: 
   function strcmp: precondition 'valid_string_s1' got status valid.
 [eva] string_c.c:104: 
   function strcmp: precondition 'valid_string_s2' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:156: 
+[eva] FRAMAC_SHARE/libc/string.h:174: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:156: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:174: Warning: 
   function strcmp: postcondition 'acsl_c_equiv' got status unknown.
 [eva] Recording results for strcmp
 [eva] Done for function strcmp
@@ -318,98 +318,98 @@
 [eva] Recording results for test_strcmp
 [eva] Done for function test_strcmp
 [eva] computing for function test_strncmp <- main.
-  Called from string_c.c:300.
+  Called from string_c.c:299.
 [eva] computing for function strncmp <- test_strncmp <- main.
-  Called from string_c.c:167.
-[eva] string_c.c:167: 
+  Called from string_c.c:166.
+[eva] string_c.c:166: 
   function strncmp: precondition 'valid_string_s1' got status valid.
-[eva] string_c.c:167: 
+[eva] string_c.c:166: 
   function strncmp: precondition 'valid_string_s2' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:163: 
+[eva] FRAMAC_SHARE/libc/string.h:181: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strncmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:163: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:181: Warning: 
   function strncmp: postcondition 'acsl_c_equiv' got status unknown.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
-[eva] string_c.c:168: assertion got status valid.
+[eva] string_c.c:167: assertion got status valid.
 [eva] computing for function strncmp <- test_strncmp <- main.
-  Called from string_c.c:169.
-[eva] string_c.c:169: 
+  Called from string_c.c:168.
+[eva] string_c.c:168: 
   function strncmp: precondition 'valid_string_s1' got status valid.
-[eva] string_c.c:169: 
+[eva] string_c.c:168: 
   function strncmp: precondition 'valid_string_s2' got status valid.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
-[eva] string_c.c:170: assertion got status valid.
+[eva] string_c.c:169: assertion got status valid.
 [eva] computing for function strncmp <- test_strncmp <- main.
-  Called from string_c.c:172.
-[eva] string_c.c:172: 
+  Called from string_c.c:171.
+[eva] string_c.c:171: 
   function strncmp: precondition 'valid_string_s1' got status valid.
-[eva] string_c.c:172: 
+[eva] string_c.c:171: 
   function strncmp: precondition 'valid_string_s2' got status valid.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
-[eva] string_c.c:173: assertion got status valid.
+[eva] string_c.c:172: assertion got status valid.
 [eva] computing for function strncmp <- test_strncmp <- main.
-  Called from string_c.c:174.
-[eva] string_c.c:174: 
+  Called from string_c.c:173.
+[eva] string_c.c:173: 
   function strncmp: precondition 'valid_string_s1' got status valid.
-[eva] string_c.c:174: 
+[eva] string_c.c:173: 
   function strncmp: precondition 'valid_string_s2' got status valid.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
-[eva] string_c.c:175: assertion got status valid.
+[eva] string_c.c:174: assertion got status valid.
 [eva] computing for function strncmp <- test_strncmp <- main.
-  Called from string_c.c:176.
-[eva] string_c.c:176: 
+  Called from string_c.c:175.
+[eva] string_c.c:175: 
   function strncmp: precondition 'valid_string_s1' got status valid.
-[eva] string_c.c:176: 
+[eva] string_c.c:175: 
   function strncmp: precondition 'valid_string_s2' got status valid.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
-[eva] string_c.c:177: assertion got status valid.
+[eva] string_c.c:176: assertion got status valid.
 [eva] computing for function strncmp <- test_strncmp <- main.
-  Called from string_c.c:178.
-[eva] string_c.c:178: 
+  Called from string_c.c:177.
+[eva] string_c.c:177: 
   function strncmp: precondition 'valid_string_s1' got status valid.
-[eva] string_c.c:178: 
+[eva] string_c.c:177: 
   function strncmp: precondition 'valid_string_s2' got status valid.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
-[eva] string_c.c:179: assertion got status valid.
+[eva] string_c.c:178: assertion got status valid.
 [eva] computing for function strncmp <- test_strncmp <- main.
-  Called from string_c.c:180.
-[eva] string_c.c:180: 
+  Called from string_c.c:179.
+[eva] string_c.c:179: 
   function strncmp: precondition 'valid_string_s1' got status valid.
-[eva] string_c.c:180: 
+[eva] string_c.c:179: 
   function strncmp: precondition 'valid_string_s2' got status valid.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
-[eva] string_c.c:181: assertion got status valid.
+[eva] string_c.c:180: assertion got status valid.
 [eva] computing for function strncmp <- test_strncmp <- main.
-  Called from string_c.c:182.
-[eva] string_c.c:182: 
+  Called from string_c.c:181.
+[eva] string_c.c:181: 
   function strncmp: precondition 'valid_string_s1' got status valid.
-[eva] string_c.c:182: 
+[eva] string_c.c:181: 
   function strncmp: precondition 'valid_string_s2' got status valid.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
-[eva] string_c.c:183: assertion got status valid.
+[eva] string_c.c:182: assertion got status valid.
 [eva] Recording results for test_strncmp
 [eva] Done for function test_strncmp
 [eva] computing for function test_memcmp <- main.
-  Called from string_c.c:301.
+  Called from string_c.c:300.
 [eva] computing for function memcmp <- test_memcmp <- main.
-  Called from string_c.c:188.
-[eva] string_c.c:188: function memcmp: precondition 'valid_s1' got status valid.
-[eva] string_c.c:188: function memcmp: precondition 'valid_s2' got status valid.
-[eva] string_c.c:188: 
+  Called from string_c.c:187.
+[eva] string_c.c:187: function memcmp: precondition 'valid_s1' got status valid.
+[eva] string_c.c:187: function memcmp: precondition 'valid_s2' got status valid.
+[eva] string_c.c:187: 
   function memcmp: precondition 'initialization,s1' got status valid.
-[eva] string_c.c:188: 
+[eva] string_c.c:187: 
   function memcmp: precondition 'initialization,s2' got status valid.
-[eva] string_c.c:188: 
+[eva] string_c.c:187: 
   function memcmp: precondition 'danglingness,s1' got status valid.
-[eva] string_c.c:188: 
+[eva] string_c.c:187: 
   function memcmp: precondition 'danglingness,s2' got status valid.
 [eva] FRAMAC_SHARE/libc/string.h:63: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
@@ -417,56 +417,56 @@
   function memcmp: postcondition 'logic_spec' got status unknown.
 [eva] Recording results for memcmp
 [eva] Done for function memcmp
-[eva] string_c.c:189: assertion got status valid.
+[eva] string_c.c:188: assertion got status valid.
 [eva] computing for function memcmp <- test_memcmp <- main.
-  Called from string_c.c:190.
-[eva] string_c.c:190: function memcmp: precondition 'valid_s1' got status valid.
-[eva] string_c.c:190: function memcmp: precondition 'valid_s2' got status valid.
-[eva] string_c.c:190: 
+  Called from string_c.c:189.
+[eva] string_c.c:189: function memcmp: precondition 'valid_s1' got status valid.
+[eva] string_c.c:189: function memcmp: precondition 'valid_s2' got status valid.
+[eva] string_c.c:189: 
   function memcmp: precondition 'initialization,s1' got status valid.
-[eva] string_c.c:190: 
+[eva] string_c.c:189: 
   function memcmp: precondition 'initialization,s2' got status valid.
-[eva] string_c.c:190: 
+[eva] string_c.c:189: 
   function memcmp: precondition 'danglingness,s1' got status valid.
-[eva] string_c.c:190: 
+[eva] string_c.c:189: 
   function memcmp: precondition 'danglingness,s2' got status valid.
 [eva] Recording results for memcmp
 [eva] Done for function memcmp
-[eva] string_c.c:191: assertion got status valid.
+[eva] string_c.c:190: assertion got status valid.
 [eva] computing for function memcmp <- test_memcmp <- main.
-  Called from string_c.c:192.
-[eva] string_c.c:192: function memcmp: precondition 'valid_s1' got status valid.
-[eva] string_c.c:192: function memcmp: precondition 'valid_s2' got status valid.
-[eva] string_c.c:192: 
+  Called from string_c.c:191.
+[eva] string_c.c:191: function memcmp: precondition 'valid_s1' got status valid.
+[eva] string_c.c:191: function memcmp: precondition 'valid_s2' got status valid.
+[eva] string_c.c:191: 
   function memcmp: precondition 'initialization,s1' got status valid.
-[eva] string_c.c:192: 
+[eva] string_c.c:191: 
   function memcmp: precondition 'initialization,s2' got status valid.
-[eva] string_c.c:192: 
+[eva] string_c.c:191: 
   function memcmp: precondition 'danglingness,s1' got status valid.
-[eva] string_c.c:192: 
+[eva] string_c.c:191: 
   function memcmp: precondition 'danglingness,s2' got status valid.
 [eva] Recording results for memcmp
 [eva] Done for function memcmp
-[eva] string_c.c:193: assertion got status valid.
+[eva] string_c.c:192: assertion got status valid.
 [eva] computing for function memcmp <- test_memcmp <- main.
-  Called from string_c.c:194.
-[eva] string_c.c:194: function memcmp: precondition 'valid_s1' got status valid.
-[eva] string_c.c:194: function memcmp: precondition 'valid_s2' got status valid.
-[eva] string_c.c:194: 
+  Called from string_c.c:193.
+[eva] string_c.c:193: function memcmp: precondition 'valid_s1' got status valid.
+[eva] string_c.c:193: function memcmp: precondition 'valid_s2' got status valid.
+[eva] string_c.c:193: 
   function memcmp: precondition 'initialization,s1' got status valid.
-[eva] string_c.c:194: 
+[eva] string_c.c:193: 
   function memcmp: precondition 'initialization,s2' got status valid.
-[eva] string_c.c:194: 
+[eva] string_c.c:193: 
   function memcmp: precondition 'danglingness,s1' got status valid.
-[eva] string_c.c:194: 
+[eva] string_c.c:193: 
   function memcmp: precondition 'danglingness,s2' got status valid.
 [eva] Recording results for memcmp
 [eva] Done for function memcmp
-[eva] string_c.c:195: assertion got status valid.
+[eva] string_c.c:194: assertion got status valid.
 [eva] Recording results for test_memcmp
 [eva] Done for function test_memcmp
 [eva] computing for function test_strcat <- main.
-  Called from string_c.c:302.
+  Called from string_c.c:301.
 [eva] computing for function strcat <- test_strcat <- main.
   Called from string_c.c:124.
 [eva] string_c.c:124: 
@@ -475,514 +475,562 @@
   function strcat: precondition 'valid_string_dest' got status valid.
 [eva] string_c.c:124: 
   function strcat: precondition 'room_string' got status valid.
+[eva] string_c.c:124: 
+  function strcat: precondition 'separation' got status valid.
 [eva] computing for function strlen <- strcat <- test_strcat <- main.
-  Called from FRAMAC_SHARE/libc/string.c:198.
-[eva] FRAMAC_SHARE/libc/string.c:198: 
+  Called from FRAMAC_SHARE/libc/string.c:201.
+[eva] FRAMAC_SHARE/libc/string.c:201: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] Recording results for strlen
 [eva] Done for function strlen
-[eva] FRAMAC_SHARE/libc/string.h:429: 
+[eva] FRAMAC_SHARE/libc/string.h:483: 
   function strcat: postcondition 'sum_of_lengths' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:432: 
+[eva] FRAMAC_SHARE/libc/string.h:486: 
   function strcat: postcondition 'initialization,dest' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:433: 
+[eva] FRAMAC_SHARE/libc/string.h:487: 
   function strcat: postcondition 'dest_null_terminated' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:434: 
+[eva] FRAMAC_SHARE/libc/string.h:488: 
   function strcat: postcondition 'result_ptr' got status valid.
 [eva] Recording results for strcat
 [eva] Done for function strcat
 [eva] string_c.c:125: assertion got status valid.
 [eva] string_c.c:126: assertion got status valid.
 [eva] computing for function strcat <- test_strcat <- main.
-  Called from string_c.c:132.
-[eva] string_c.c:132: 
+  Called from string_c.c:131.
+[eva] string_c.c:131: 
   function strcat: precondition 'valid_string_src' got status valid.
-[eva] string_c.c:132: 
+[eva] string_c.c:131: 
   function strcat: precondition 'valid_string_dest' got status valid.
-[eva] string_c.c:132: 
+[eva] string_c.c:131: 
   function strcat: precondition 'room_string' got status valid.
+[eva] string_c.c:131: 
+  function strcat: precondition 'separation' got status valid.
 [eva] computing for function strlen <- strcat <- test_strcat <- main.
-  Called from FRAMAC_SHARE/libc/string.c:198.
+  Called from FRAMAC_SHARE/libc/string.c:201.
 [eva] Recording results for strlen
 [eva] Done for function strlen
 [eva] Recording results for strcat
 [eva] Done for function strcat
-[eva] string_c.c:133: assertion got status valid.
+[eva] string_c.c:132: assertion got status valid.
 [eva] computing for function strcat <- test_strcat <- main.
-  Called from string_c.c:134.
-[eva] string_c.c:134: 
+  Called from string_c.c:133.
+[eva] string_c.c:133: 
   function strcat: precondition 'valid_string_src' got status valid.
-[eva] string_c.c:134: 
+[eva] string_c.c:133: 
   function strcat: precondition 'valid_string_dest' got status valid.
-[eva] string_c.c:134: 
+[eva] string_c.c:133: 
   function strcat: precondition 'room_string' got status valid.
+[eva] string_c.c:133: 
+  function strcat: precondition 'separation' got status valid.
 [eva] computing for function strlen <- strcat <- test_strcat <- main.
-  Called from FRAMAC_SHARE/libc/string.c:198.
+  Called from FRAMAC_SHARE/libc/string.c:201.
 [eva] Recording results for strlen
 [eva] Done for function strlen
 [eva] Recording results for strcat
 [eva] Done for function strcat
 [eva] computing for function strcat <- test_strcat <- main.
-  Called from string_c.c:135.
-[eva] string_c.c:135: 
+  Called from string_c.c:134.
+[eva] string_c.c:134: 
   function strcat: precondition 'valid_string_src' got status valid.
-[eva] string_c.c:135: 
+[eva] string_c.c:134: 
   function strcat: precondition 'valid_string_dest' got status valid.
-[eva] string_c.c:135: 
+[eva] string_c.c:134: 
   function strcat: precondition 'room_string' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:198: Reusing old results for call to strlen
+[eva] string_c.c:134: 
+  function strcat: precondition 'separation' got status valid.
+[eva] FRAMAC_SHARE/libc/string.c:201: Reusing old results for call to strlen
 [eva] Recording results for strcat
 [eva] Done for function strcat
-[eva] string_c.c:136: assertion got status valid.
+[eva] string_c.c:135: assertion got status valid.
 [eva] Recording results for test_strcat
 [eva] Done for function test_strcat
 [eva] computing for function test_strcpy <- main.
-  Called from string_c.c:304.
+  Called from string_c.c:303.
 [eva] computing for function strcpy <- test_strcpy <- main.
-  Called from string_c.c:142.
-[eva] string_c.c:142: 
+  Called from string_c.c:141.
+[eva] string_c.c:141: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] string_c.c:142: 
+[eva] string_c.c:141: 
   function strcpy: precondition 'room_string' got status valid.
-[eva] string_c.c:142: 
+[eva] string_c.c:141: 
   function strcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:373: 
+[eva] FRAMAC_SHARE/libc/string.h:425: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:373: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:425: Warning: 
   function strcpy: postcondition 'equal_contents' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:374: 
+[eva] FRAMAC_SHARE/libc/string.h:426: 
   function strcpy: postcondition 'result_ptr' got status valid.
 [eva] Recording results for strcpy
 [eva] Done for function strcpy
+[eva] string_c.c:142: assertion got status valid.
 [eva] string_c.c:143: assertion got status valid.
-[eva] string_c.c:144: assertion got status valid.
 [eva] computing for function strcpy <- test_strcpy <- main.
-  Called from string_c.c:145.
-[eva] string_c.c:145: 
+  Called from string_c.c:144.
+[eva] string_c.c:144: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] string_c.c:145: 
+[eva] string_c.c:144: 
   function strcpy: precondition 'room_string' got status valid.
-[eva] string_c.c:145: 
+[eva] string_c.c:144: 
   function strcpy: precondition 'separation' got status valid.
 [eva] Recording results for strcpy
 [eva] Done for function strcpy
-[eva] string_c.c:146: assertion got status valid.
+[eva] string_c.c:145: assertion got status valid.
 [eva] computing for function strcpy <- test_strcpy <- main.
-  Called from string_c.c:147.
-[eva] string_c.c:147: 
+  Called from string_c.c:146.
+[eva] string_c.c:146: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] string_c.c:147: 
+[eva] string_c.c:146: 
   function strcpy: precondition 'room_string' got status valid.
-[eva] string_c.c:147: 
+[eva] string_c.c:146: 
   function strcpy: precondition 'separation' got status valid.
 [eva] Recording results for strcpy
 [eva] Done for function strcpy
-[eva] string_c.c:148: assertion got status valid.
+[eva] string_c.c:147: assertion got status valid.
 [eva] Recording results for test_strcpy
 [eva] Done for function test_strcpy
 [eva] computing for function test_strncpy <- main.
-  Called from string_c.c:305.
+  Called from string_c.c:304.
 [eva] computing for function strncpy <- test_strncpy <- main.
-  Called from string_c.c:154.
-[eva] string_c.c:154: 
+  Called from string_c.c:153.
+[eva] string_c.c:153: 
   function strncpy: precondition 'valid_nstring_src' got status valid.
-[eva] string_c.c:154: 
+[eva] string_c.c:153: 
   function strncpy: precondition 'room_nstring' got status valid.
-[eva] string_c.c:154: 
+[eva] string_c.c:153: 
   function strncpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:385: 
+[eva] FRAMAC_SHARE/libc/string.h:437: 
   function strncpy: postcondition 'result_ptr' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:386: 
+[eva] FRAMAC_SHARE/libc/string.h:438: 
   function strncpy: postcondition 'initialization' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:389: 
+[eva] FRAMAC_SHARE/libc/string.h:441: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:389: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:441: Warning: 
   function strncpy, behavior complete: postcondition 'equal_after_copy' got status unknown.
 [eva] Recording results for strncpy
 [eva] Done for function strncpy
+[eva] string_c.c:154: assertion got status valid.
 [eva] string_c.c:155: assertion got status valid.
-[eva] string_c.c:156: assertion got status valid.
 [eva] computing for function strncpy <- test_strncpy <- main.
-  Called from string_c.c:157.
-[eva] string_c.c:157: 
+  Called from string_c.c:156.
+[eva] string_c.c:156: 
   function strncpy: precondition 'valid_nstring_src' got status valid.
-[eva] string_c.c:157: 
+[eva] string_c.c:156: 
   function strncpy: precondition 'room_nstring' got status valid.
-[eva] string_c.c:157: 
+[eva] string_c.c:156: 
   function strncpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:392: 
+[eva] FRAMAC_SHARE/libc/string.h:444: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:392: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:444: Warning: 
   function strncpy, behavior partial: postcondition 'equal_prefix' got status unknown.
 [eva] Recording results for strncpy
 [eva] Done for function strncpy
-[eva] string_c.c:158: assertion got status valid.
+[eva] string_c.c:157: assertion got status valid.
 [eva] computing for function strncpy <- test_strncpy <- main.
-  Called from string_c.c:159.
-[eva] string_c.c:159: 
+  Called from string_c.c:158.
+[eva] string_c.c:158: 
   function strncpy: precondition 'valid_nstring_src' got status valid.
-[eva] string_c.c:159: 
+[eva] string_c.c:158: 
   function strncpy: precondition 'room_nstring' got status valid.
-[eva] string_c.c:159: 
+[eva] string_c.c:158: 
   function strncpy: precondition 'separation' got status valid.
 [eva] Recording results for strncpy
 [eva] Done for function strncpy
-[eva] string_c.c:160: assertion got status valid.
+[eva] string_c.c:159: assertion got status valid.
 [eva] computing for function strncpy <- test_strncpy <- main.
-  Called from string_c.c:161.
-[eva] string_c.c:161: 
+  Called from string_c.c:160.
+[eva] string_c.c:160: 
   function strncpy: precondition 'valid_nstring_src' got status valid.
-[eva] string_c.c:161: 
+[eva] string_c.c:160: 
   function strncpy: precondition 'room_nstring' got status valid.
-[eva] string_c.c:161: 
+[eva] string_c.c:160: 
   function strncpy: precondition 'separation' got status valid.
 [eva] Recording results for strncpy
 [eva] Done for function strncpy
-[eva] string_c.c:162: assertion got status valid.
+[eva] string_c.c:161: assertion got status valid.
 [eva] Recording results for test_strncpy
 [eva] Done for function test_strncpy
 [eva] computing for function test_strchr <- main.
-  Called from string_c.c:306.
+  Called from string_c.c:305.
 [eva] computing for function strchr <- test_strchr <- main.
-  Called from string_c.c:201.
-[eva] string_c.c:201: 
+  Called from string_c.c:200.
+[eva] string_c.c:200: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:177: 
+[eva] FRAMAC_SHARE/libc/string.h:197: 
+  function strchr, behavior found: postcondition 'result_valid_string' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:198: 
   function strchr, behavior found: postcondition 'result_char' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:178: 
+[eva] FRAMAC_SHARE/libc/string.h:199: 
   function strchr, behavior found: postcondition 'result_same_base' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:179: 
+[eva] FRAMAC_SHARE/libc/string.h:200: 
   function strchr, behavior found: postcondition 'result_in_length' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:180: 
-  function strchr, behavior found: postcondition 'result_valid_string' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:181: 
+[eva] FRAMAC_SHARE/libc/string.h:202: 
   cannot evaluate ACSL term, unsupported logic var p
-[eva:alarm] FRAMAC_SHARE/libc/string.h:181: Warning: 
-  function strchr, behavior found: postcondition 'result_first_occur' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:187: 
-  function strchr, behavior default: postcondition 'result_null_or_same_base' got status valid.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:202: Warning: 
+  function strchr, behavior found: postcondition 'result_first_occurrence' got status unknown.
 [eva] Recording results for strchr
 [eva] Done for function strchr
-[eva] string_c.c:202: assertion got status valid.
+[eva] string_c.c:201: assertion got status valid.
 [eva] computing for function strchr <- test_strchr <- main.
-  Called from string_c.c:203.
-[eva] string_c.c:203: 
+  Called from string_c.c:202.
+[eva] string_c.c:202: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:184: 
+[eva] FRAMAC_SHARE/libc/string.h:205: 
   function strchr, behavior not_found: postcondition 'result_null' got status valid.
 [eva] Recording results for strchr
 [eva] Done for function strchr
-[eva] string_c.c:204: assertion got status valid.
+[eva] string_c.c:203: assertion got status valid.
 [eva] computing for function strchr <- test_strchr <- main.
-  Called from string_c.c:205.
-[eva] string_c.c:205: 
+  Called from string_c.c:204.
+[eva] string_c.c:204: 
   function strchr: precondition 'valid_string_s' got status valid.
 [eva] Recording results for strchr
 [eva] Done for function strchr
-[eva] string_c.c:206: assertion got status valid.
+[eva] string_c.c:205: assertion got status valid.
 [eva] computing for function strchr <- test_strchr <- main.
-  Called from string_c.c:207.
-[eva] string_c.c:207: 
+  Called from string_c.c:206.
+[eva] string_c.c:206: 
   function strchr: precondition 'valid_string_s' got status valid.
 [eva] Recording results for strchr
 [eva] Done for function strchr
-[eva] string_c.c:208: assertion got status valid.
+[eva] string_c.c:207: assertion got status valid.
 [eva] Recording results for test_strchr
 [eva] Done for function test_strchr
 [eva] computing for function test_strrchr <- main.
-  Called from string_c.c:307.
+  Called from string_c.c:306.
 [eva] computing for function strrchr <- test_strrchr <- main.
-  Called from string_c.c:214.
-[eva] string_c.c:214: 
+  Called from string_c.c:213.
+[eva] string_c.c:213: 
   function strrchr: precondition 'valid_string_s' got status valid.
 [eva] computing for function strlen <- strrchr <- test_strrchr <- main.
-  Called from FRAMAC_SHARE/libc/string.c:263.
-[eva] FRAMAC_SHARE/libc/string.c:263: 
+  Called from FRAMAC_SHARE/libc/string.c:266.
+[eva] FRAMAC_SHARE/libc/string.c:266: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] Recording results for strlen
 [eva] Done for function strlen
-[eva] FRAMAC_SHARE/libc/string.h:201: 
-  function strrchr, behavior found: postcondition 'result_char' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:202: 
-  function strrchr, behavior found: postcondition 'result_same_base' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:203: 
-  function strrchr, behavior found: postcondition 'result_valid_string' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:209: 
-  function strrchr, behavior default: postcondition 'result_null_or_same_base' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:223: 
+  function strrchr: postcondition 'result_null_or_same_base' got status valid.
 [eva] Recording results for strrchr
 [eva] Done for function strrchr
-[eva] string_c.c:215: assertion got status valid.
+[eva] string_c.c:214: assertion got status valid.
 [eva] computing for function strrchr <- test_strrchr <- main.
-  Called from string_c.c:216.
-[eva] string_c.c:216: 
+  Called from string_c.c:215.
+[eva] string_c.c:215: 
   function strrchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:263: Reusing old results for call to strlen
-[eva] FRAMAC_SHARE/libc/string.h:206: 
-  function strrchr, behavior not_found: postcondition 'result_null' got status valid.
+[eva] FRAMAC_SHARE/libc/string.c:266: Reusing old results for call to strlen
 [eva] Recording results for strrchr
 [eva] Done for function strrchr
-[eva] string_c.c:217: assertion got status valid.
+[eva] string_c.c:216: assertion got status valid.
 [eva] computing for function strrchr <- test_strrchr <- main.
-  Called from string_c.c:218.
-[eva] string_c.c:218: 
+  Called from string_c.c:217.
+[eva] string_c.c:217: 
   function strrchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:263: Reusing old results for call to strlen
+[eva] FRAMAC_SHARE/libc/string.c:266: Reusing old results for call to strlen
 [eva] Recording results for strrchr
 [eva] Done for function strrchr
-[eva] string_c.c:219: assertion got status valid.
+[eva] string_c.c:218: assertion got status valid.
 [eva] computing for function strrchr <- test_strrchr <- main.
-  Called from string_c.c:220.
-[eva] string_c.c:220: 
+  Called from string_c.c:219.
+[eva] string_c.c:219: 
   function strrchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:263: Reusing old results for call to strlen
+[eva] FRAMAC_SHARE/libc/string.c:266: Reusing old results for call to strlen
 [eva] Recording results for strrchr
 [eva] Done for function strrchr
-[eva] string_c.c:221: assertion got status valid.
+[eva] string_c.c:220: assertion got status valid.
 [eva] Recording results for test_strrchr
 [eva] Done for function test_strrchr
 [eva] computing for function test_memchr <- main.
-  Called from string_c.c:308.
+  Called from string_c.c:307.
 [eva] computing for function memchr <- test_memchr <- main.
-  Called from string_c.c:227.
-[eva] string_c.c:227: function memchr: precondition 'valid' got status valid.
-[eva] string_c.c:227: 
+  Called from string_c.c:226.
+[eva] string_c.c:226: function memchr: precondition 'valid' got status valid.
+[eva] string_c.c:226: 
   function memchr: precondition 'initialization' got status valid.
-[eva] string_c.c:227: 
+[eva] string_c.c:226: 
   function memchr: precondition 'danglingness' got status valid.
 [eva] FRAMAC_SHARE/libc/string.h:78: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
-[eva] FRAMAC_SHARE/libc/string.h:85: 
+[eva] FRAMAC_SHARE/libc/string.h:86: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
 [eva] FRAMAC_SHARE/libc/string.h:79: 
-  function memchr, behavior found: postcondition 'result_same_base' got status valid. (Behavior may be inactive, no reduction performed.)
+  function memchr, behavior found: postcondition 'result_valid_read' got status valid. (Behavior may be inactive, no reduction performed.)
 [eva] FRAMAC_SHARE/libc/string.h:80: 
-  function memchr, behavior found: postcondition 'result_char' got status valid. (Behavior may be inactive, no reduction performed.)
+  function memchr, behavior found: postcondition 'result_same_base' got status valid. (Behavior may be inactive, no reduction performed.)
 [eva] FRAMAC_SHARE/libc/string.h:81: 
+  function memchr, behavior found: postcondition 'result_char' got status valid. (Behavior may be inactive, no reduction performed.)
+[eva] FRAMAC_SHARE/libc/string.h:82: 
   function memchr, behavior found: postcondition 'result_in_str' got status valid. (Behavior may be inactive, no reduction performed.)
-[eva:alarm] FRAMAC_SHARE/libc/string.h:86: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:87: Warning: 
   function memchr, behavior not_found: postcondition 'result_null' got status invalid. (Behavior may be inactive, no reduction performed.)
 [eva] Recording results for memchr
 [eva] Done for function memchr
-[eva] string_c.c:228: assertion got status valid.
+[eva] string_c.c:227: assertion got status valid.
 [eva] computing for function memchr <- test_memchr <- main.
-  Called from string_c.c:229.
-[eva] string_c.c:229: function memchr: precondition 'valid' got status valid.
-[eva] string_c.c:229: 
+  Called from string_c.c:228.
+[eva] string_c.c:228: function memchr: precondition 'valid' got status valid.
+[eva] string_c.c:228: 
   function memchr: precondition 'initialization' got status valid.
-[eva] string_c.c:229: 
+[eva] string_c.c:228: 
   function memchr: precondition 'danglingness' got status valid.
 [eva:alarm] FRAMAC_SHARE/libc/string.h:79: Warning: 
-  function memchr, behavior found: postcondition 'result_same_base' got status invalid. (Behavior may be inactive, no reduction performed.)
+  function memchr, behavior found: postcondition 'result_valid_read' got status invalid. (Behavior may be inactive, no reduction performed.)
 [eva:alarm] FRAMAC_SHARE/libc/string.h:80: Warning: 
+  function memchr, behavior found: postcondition 'result_same_base' got status invalid. (Behavior may be inactive, no reduction performed.)
+[eva:alarm] FRAMAC_SHARE/libc/string.h:81: Warning: 
   function memchr, behavior found: postcondition 'result_char' got status unknown. (Behavior may be inactive, no reduction performed.)
-[eva] FRAMAC_SHARE/libc/string.h:86: 
+[eva] FRAMAC_SHARE/libc/string.h:87: 
   function memchr, behavior not_found: postcondition 'result_null' got status valid. (Behavior may be inactive, no reduction performed.)
 [eva] Recording results for memchr
 [eva] Done for function memchr
-[eva] string_c.c:230: assertion got status valid.
+[eva] string_c.c:229: assertion got status valid.
 [eva] computing for function memchr <- test_memchr <- main.
-  Called from string_c.c:231.
-[eva] string_c.c:231: function memchr: precondition 'valid' got status valid.
-[eva] string_c.c:231: 
+  Called from string_c.c:230.
+[eva] string_c.c:230: function memchr: precondition 'valid' got status valid.
+[eva] string_c.c:230: 
   function memchr: precondition 'initialization' got status valid.
-[eva] string_c.c:231: 
+[eva] string_c.c:230: 
   function memchr: precondition 'danglingness' got status valid.
-[eva:alarm] FRAMAC_SHARE/libc/string.h:81: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:82: Warning: 
   function memchr, behavior found: postcondition 'result_in_str' got status unknown. (Behavior may be inactive, no reduction performed.)
 [eva] Recording results for memchr
 [eva] Done for function memchr
-[eva] string_c.c:232: assertion got status valid.
+[eva] string_c.c:231: assertion got status valid.
 [eva] computing for function memchr <- test_memchr <- main.
-  Called from string_c.c:233.
-[eva] string_c.c:233: function memchr: precondition 'valid' got status valid.
-[eva] string_c.c:233: 
+  Called from string_c.c:232.
+[eva] string_c.c:232: function memchr: precondition 'valid' got status valid.
+[eva] string_c.c:232: 
   function memchr: precondition 'initialization' got status valid.
-[eva] string_c.c:233: 
+[eva] string_c.c:232: 
   function memchr: precondition 'danglingness' got status valid.
 [eva] Recording results for memchr
 [eva] Done for function memchr
-[eva] string_c.c:234: assertion got status valid.
+[eva] string_c.c:233: assertion got status valid.
 [eva] computing for function memchr <- test_memchr <- main.
-  Called from string_c.c:235.
-[eva] string_c.c:235: function memchr: precondition 'valid' got status valid.
-[eva] string_c.c:235: 
+  Called from string_c.c:234.
+[eva] string_c.c:234: function memchr: precondition 'valid' got status valid.
+[eva] string_c.c:234: 
   function memchr: precondition 'initialization' got status valid.
-[eva] string_c.c:235: 
+[eva] string_c.c:234: 
   function memchr: precondition 'danglingness' got status valid.
 [eva] Recording results for memchr
 [eva] Done for function memchr
-[eva] string_c.c:236: assertion got status valid.
+[eva] string_c.c:235: assertion got status valid.
 [eva] computing for function memchr <- test_memchr <- main.
-  Called from string_c.c:237.
-[eva] string_c.c:237: function memchr: precondition 'valid' got status valid.
-[eva] string_c.c:237: 
+  Called from string_c.c:236.
+[eva] string_c.c:236: function memchr: precondition 'valid' got status valid.
+[eva] string_c.c:236: 
   function memchr: precondition 'initialization' got status valid.
-[eva] string_c.c:237: 
+[eva] string_c.c:236: 
   function memchr: precondition 'danglingness' got status valid.
 [eva] Recording results for memchr
 [eva] Done for function memchr
-[eva] string_c.c:238: assertion got status valid.
+[eva] string_c.c:237: assertion got status valid.
 [eva] Recording results for test_memchr
 [eva] Done for function test_memchr
 [eva] computing for function test_memrchr <- main.
-  Called from string_c.c:309.
+  Called from string_c.c:308.
 [eva] computing for function memrchr <- test_memrchr <- main.
-  Called from string_c.c:244.
+  Called from string_c.c:243.
+[eva] string_c.c:243: function memrchr: precondition 'valid' got status valid.
+[eva] string_c.c:243: 
+  function memrchr: precondition 'initialization' got status valid.
+[eva] string_c.c:243: 
+  function memrchr: precondition 'danglingness' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:99: 
+  cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
+[eva] FRAMAC_SHARE/libc/string.h:103: 
+  cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
+[eva] FRAMAC_SHARE/libc/string.h:100: 
+  function memrchr, behavior found: postcondition 'result_valid_read' got status valid. (Behavior may be inactive, no reduction performed.)
+[eva] FRAMAC_SHARE/libc/string.h:101: 
+  function memrchr, behavior found: postcondition 'result_same_base' got status valid. (Behavior may be inactive, no reduction performed.)
+[eva:alarm] FRAMAC_SHARE/libc/string.h:104: Warning: 
+  function memrchr, behavior not_found: postcondition 'result_null' got status invalid. (Behavior may be inactive, no reduction performed.)
 [eva] Recording results for memrchr
 [eva] Done for function memrchr
-[eva] string_c.c:245: assertion got status valid.
+[eva] string_c.c:244: assertion got status valid.
 [eva] computing for function memrchr <- test_memrchr <- main.
-  Called from string_c.c:246.
+  Called from string_c.c:245.
+[eva] string_c.c:245: function memrchr: precondition 'valid' got status valid.
+[eva] string_c.c:245: 
+  function memrchr: precondition 'initialization' got status valid.
+[eva] string_c.c:245: 
+  function memrchr: precondition 'danglingness' got status valid.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:100: Warning: 
+  function memrchr, behavior found: postcondition 'result_valid_read' got status invalid. (Behavior may be inactive, no reduction performed.)
+[eva:alarm] FRAMAC_SHARE/libc/string.h:101: Warning: 
+  function memrchr, behavior found: postcondition 'result_same_base' got status invalid. (Behavior may be inactive, no reduction performed.)
+[eva] FRAMAC_SHARE/libc/string.h:104: 
+  function memrchr, behavior not_found: postcondition 'result_null' got status valid. (Behavior may be inactive, no reduction performed.)
 [eva] Recording results for memrchr
 [eva] Done for function memrchr
-[eva] string_c.c:247: assertion got status valid.
+[eva] string_c.c:246: assertion got status valid.
 [eva] computing for function memrchr <- test_memrchr <- main.
-  Called from string_c.c:248.
+  Called from string_c.c:247.
+[eva] string_c.c:247: function memrchr: precondition 'valid' got status valid.
+[eva] string_c.c:247: 
+  function memrchr: precondition 'initialization' got status valid.
+[eva] string_c.c:247: 
+  function memrchr: precondition 'danglingness' got status valid.
 [eva] Recording results for memrchr
 [eva] Done for function memrchr
-[eva] string_c.c:249: assertion got status valid.
+[eva] string_c.c:248: assertion got status valid.
 [eva] computing for function memrchr <- test_memrchr <- main.
-  Called from string_c.c:250.
+  Called from string_c.c:249.
+[eva] string_c.c:249: function memrchr: precondition 'valid' got status valid.
+[eva] string_c.c:249: 
+  function memrchr: precondition 'initialization' got status valid.
+[eva] string_c.c:249: 
+  function memrchr: precondition 'danglingness' got status valid.
 [eva] Recording results for memrchr
 [eva] Done for function memrchr
-[eva] string_c.c:251: assertion got status valid.
+[eva] string_c.c:250: assertion got status valid.
 [eva] computing for function memrchr <- test_memrchr <- main.
-  Called from string_c.c:252.
+  Called from string_c.c:251.
+[eva] string_c.c:251: function memrchr: precondition 'valid' got status valid.
+[eva] string_c.c:251: 
+  function memrchr: precondition 'initialization' got status valid.
+[eva] string_c.c:251: 
+  function memrchr: precondition 'danglingness' got status valid.
 [eva] Recording results for memrchr
 [eva] Done for function memrchr
-[eva] string_c.c:253: assertion got status valid.
+[eva] string_c.c:252: assertion got status valid.
 [eva] computing for function memrchr <- test_memrchr <- main.
-  Called from string_c.c:254.
+  Called from string_c.c:253.
+[eva] string_c.c:253: function memrchr: precondition 'valid' got status valid.
+[eva] string_c.c:253: 
+  function memrchr: precondition 'initialization' got status valid.
+[eva] string_c.c:253: 
+  function memrchr: precondition 'danglingness' got status valid.
 [eva] Recording results for memrchr
 [eva] Done for function memrchr
-[eva] string_c.c:255: assertion got status valid.
+[eva] string_c.c:254: assertion got status valid.
 [eva] Recording results for test_memrchr
 [eva] Done for function test_memrchr
 [eva] computing for function test_strstr <- main.
-  Called from string_c.c:310.
+  Called from string_c.c:309.
 [eva] computing for function strstr <- test_strstr <- main.
-  Called from string_c.c:261.
-[eva] string_c.c:261: 
+  Called from string_c.c:260.
+[eva] string_c.c:260: 
   function strstr: precondition 'valid_string_haystack' got status valid.
-[eva] string_c.c:261: 
+[eva] string_c.c:260: 
   function strstr: precondition 'valid_string_needle' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:243: 
+[eva] FRAMAC_SHARE/libc/string.h:266: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:241: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:263: Warning: 
   function strstr: postcondition 'result_null_or_in_haystack' got status unknown.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] string_c.c:262: assertion got status valid.
+[eva] string_c.c:261: assertion got status valid.
 [eva] computing for function strstr <- test_strstr <- main.
-  Called from string_c.c:263.
-[eva] string_c.c:263: 
+  Called from string_c.c:262.
+[eva] string_c.c:262: 
   function strstr: precondition 'valid_string_haystack' got status valid.
-[eva] string_c.c:263: 
+[eva] string_c.c:262: 
   function strstr: precondition 'valid_string_needle' got status valid.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] string_c.c:264: assertion got status valid.
+[eva] string_c.c:263: assertion got status valid.
 [eva] computing for function strstr <- test_strstr <- main.
-  Called from string_c.c:265.
-[eva] string_c.c:265: 
+  Called from string_c.c:264.
+[eva] string_c.c:264: 
   function strstr: precondition 'valid_string_haystack' got status valid.
-[eva] string_c.c:265: 
+[eva] string_c.c:264: 
   function strstr: precondition 'valid_string_needle' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:241: 
+[eva] FRAMAC_SHARE/libc/string.h:263: 
   function strstr: postcondition 'result_null_or_in_haystack' got status valid.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] string_c.c:266: assertion got status valid.
+[eva] string_c.c:265: assertion got status valid.
 [eva] computing for function strstr <- test_strstr <- main.
-  Called from string_c.c:267.
-[eva] string_c.c:267: 
+  Called from string_c.c:266.
+[eva] string_c.c:266: 
   function strstr: precondition 'valid_string_haystack' got status valid.
-[eva] string_c.c:267: 
+[eva] string_c.c:266: 
   function strstr: precondition 'valid_string_needle' got status valid.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] string_c.c:268: assertion got status valid.
+[eva] string_c.c:267: assertion got status valid.
 [eva] computing for function strstr <- test_strstr <- main.
-  Called from string_c.c:269.
-[eva] string_c.c:269: 
+  Called from string_c.c:268.
+[eva] string_c.c:268: 
   function strstr: precondition 'valid_string_haystack' got status valid.
-[eva] string_c.c:269: 
+[eva] string_c.c:268: 
   function strstr: precondition 'valid_string_needle' got status valid.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] string_c.c:270: assertion got status valid.
+[eva] string_c.c:269: assertion got status valid.
 [eva] computing for function strstr <- test_strstr <- main.
-  Called from string_c.c:271.
-[eva] string_c.c:271: 
+  Called from string_c.c:270.
+[eva] string_c.c:270: 
   function strstr: precondition 'valid_string_haystack' got status valid.
-[eva] string_c.c:271: 
+[eva] string_c.c:270: 
   function strstr: precondition 'valid_string_needle' got status valid.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] string_c.c:272: assertion got status valid.
+[eva] string_c.c:271: assertion got status valid.
 [eva] computing for function strstr <- test_strstr <- main.
-  Called from string_c.c:273.
-[eva] string_c.c:273: 
+  Called from string_c.c:272.
+[eva] string_c.c:272: 
   function strstr: precondition 'valid_string_haystack' got status valid.
-[eva] string_c.c:273: 
+[eva] string_c.c:272: 
   function strstr: precondition 'valid_string_needle' got status valid.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] string_c.c:274: assertion got status valid.
+[eva] string_c.c:273: assertion got status valid.
 [eva] computing for function strstr <- test_strstr <- main.
-  Called from string_c.c:275.
-[eva] string_c.c:275: 
+  Called from string_c.c:274.
+[eva] string_c.c:274: 
   function strstr: precondition 'valid_string_haystack' got status valid.
-[eva] string_c.c:275: 
+[eva] string_c.c:274: 
   function strstr: precondition 'valid_string_needle' got status valid.
 [eva] Recording results for strstr
 [eva] Done for function strstr
-[eva] string_c.c:276: assertion got status valid.
+[eva] string_c.c:275: assertion got status valid.
 [eva] Recording results for test_strstr
 [eva] Done for function test_strstr
 [eva] computing for function test_mempcpy <- main.
-  Called from string_c.c:314.
+  Called from string_c.c:313.
 [eva] computing for function mempcpy <- test_mempcpy <- main.
-  Called from string_c.c:282.
-[eva] string_c.c:282: 
+  Called from string_c.c:281.
+[eva] string_c.c:281: 
   function mempcpy: precondition 'valid_dest' got status valid.
-[eva] string_c.c:282: 
+[eva] string_c.c:281: 
   function mempcpy: precondition 'valid_src' got status valid.
-[eva] string_c.c:282: 
+[eva] string_c.c:281: 
   function mempcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:114: 
+[eva] FRAMAC_SHARE/libc/string.h:131: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:114: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:131: Warning: 
   function mempcpy: postcondition 'copied_contents' got status unknown.
 [kernel] FRAMAC_SHARE/libc/string.c:57: Warning: using size of 'void'
-[eva:alarm] FRAMAC_SHARE/libc/string.h:115: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:132: Warning: 
   function mempcpy: postcondition 'result_next_byte' got status unknown.
 [eva] Recording results for mempcpy
 [eva] Done for function mempcpy
+[eva] string_c.c:282: assertion got status valid.
 [eva] string_c.c:283: assertion got status valid.
-[eva] string_c.c:284: assertion got status valid.
 [eva] computing for function mempcpy <- test_mempcpy <- main.
-  Called from string_c.c:286.
-[eva] string_c.c:286: 
+  Called from string_c.c:285.
+[eva] string_c.c:285: 
   function mempcpy: precondition 'valid_dest' got status valid.
-[eva] string_c.c:286: 
+[eva] string_c.c:285: 
   function mempcpy: precondition 'valid_src' got status valid.
-[eva] string_c.c:286: 
+[eva] string_c.c:285: 
   function mempcpy: precondition 'separation' got status valid.
 [eva] Recording results for mempcpy
 [eva] Done for function mempcpy
-[eva] string_c.c:287: assertion got status valid.
+[eva] string_c.c:286: assertion got status valid.
 [eva] computing for function mempcpy <- test_mempcpy <- main.
-  Called from string_c.c:288.
-[eva] string_c.c:288: 
+  Called from string_c.c:287.
+[eva] string_c.c:287: 
   function mempcpy: precondition 'valid_dest' got status valid.
-[eva] string_c.c:288: 
+[eva] string_c.c:287: 
   function mempcpy: precondition 'valid_src' got status valid.
-[eva] string_c.c:288: 
+[eva] string_c.c:287: 
   function mempcpy: precondition 'separation' got status valid.
 [eva] Recording results for mempcpy
 [eva] Done for function mempcpy
-[eva] string_c.c:289: assertion got status valid.
+[eva] string_c.c:288: assertion got status valid.
 [eva] Recording results for test_mempcpy
 [eva] Done for function test_mempcpy
 [eva] Recording results for main
@@ -1053,19 +1101,19 @@
    [5] ∈ {0; 49}
    [6] ∈ {0} or UNINITIALIZED
 [eva:final-states] Values at end of function strlen:
-  i ∈ {0; 2; 4; 5; 7}
+  i ∈ {0; 2; 4; 5; 6}
 [eva:final-states] Values at end of function strcat:
-  i ∈ {0; 1; 3; 5}
-  n ∈ {0; 4; 7}
+  i ∈ {0; 1; 2; 5}
+  n ∈ {0; 4; 6}
   s[0] ∈ {104}
    [1] ∈ {101}
    [2..3] ∈ {108}
-   [4] ∈ {104; 111}
-   [5] ∈ {0; 101}
-   [6] ∈ {108} or UNINITIALIZED
-   [7] ∈ {0; 120} or UNINITIALIZED
-   [8] ∈ {0} or UNINITIALIZED
-   [9] ∈ UNINITIALIZED
+   [4] ∈ {108; 111}
+   [5] ∈ {0; 111}
+   [6] ∈ {0; 120} or UNINITIALIZED
+   [7] ∈ {0; 108} or UNINITIALIZED
+   [8] ∈ {111} or UNINITIALIZED
+   [9] ∈ {0} or UNINITIALIZED
 [eva:final-states] Values at end of function strncmp:
   __retres ∈ {-104; -4; 0; 111}
 [eva:final-states] Values at end of function strncpy:
@@ -1160,13 +1208,12 @@
 [eva:final-states] Values at end of function test_strcat:
   s[0] ∈ {104}
    [1] ∈ {101}
-   [2..3] ∈ {108}
-   [4] ∈ {104}
-   [5] ∈ {101}
-   [6] ∈ {108}
-   [7] ∈ {120}
-   [8] ∈ {0}
-   [9] ∈ UNINITIALIZED
+   [2..4] ∈ {108}
+   [5] ∈ {111}
+   [6] ∈ {120}
+   [7] ∈ {0}
+   [8] ∈ {111}
+   [9] ∈ {0}
   p ∈ {{ &s[0] }}
 [eva:final-states] Values at end of function test_strchr:
   s ∈ {{ "hello" }}
diff --git a/tests/libc/oracle/string_c_generic.res.oracle b/tests/libc/oracle/string_c_generic.res.oracle
index 2e49652f1d0e598011724c22a53f50c52cd83773..3ab945c14d00469beae4fb594ce0bcf6fef02af7 100644
--- a/tests/libc/oracle/string_c_generic.res.oracle
+++ b/tests/libc/oracle/string_c_generic.res.oracle
@@ -12,11 +12,11 @@
   function strcpy: precondition 'room_string' got status valid.
 [eva] string_c_generic.c:56: 
   function strcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:373: 
+[eva] FRAMAC_SHARE/libc/string.h:425: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:373: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:425: Warning: 
   function strcpy: postcondition 'equal_contents' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:374: 
+[eva] FRAMAC_SHARE/libc/string.h:426: 
   function strcpy: postcondition 'result_ptr' got status valid.
 [eva] Recording results for strcpy
 [eva] Done for function strcpy
@@ -26,9 +26,9 @@
   function strcmp: precondition 'valid_string_s1' got status valid.
 [eva] string_c_generic.c:57: 
   function strcmp: precondition 'valid_string_s2' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:156: 
+[eva] FRAMAC_SHARE/libc/string.h:174: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:156: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:174: Warning: 
   function strcmp: postcondition 'acsl_c_equiv' got status unknown.
 [eva] Recording results for strcmp
 [eva] Done for function strcmp
@@ -144,11 +144,11 @@
   Called from string_c_generic.c:72.
 [eva] string_c_generic.c:72: 
   function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
-[eva:alarm] FRAMAC_SHARE/libc/string.h:134: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:151: Warning: 
   function memset: postcondition 'acsl_c_equiv' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:135: 
+[eva] FRAMAC_SHARE/libc/string.h:152: 
   function memset: postcondition 'result_ptr' got status valid.
 [eva] Recording results for memset
 [eva] Done for function memset
@@ -160,14 +160,14 @@
   function strncpy: precondition 'room_nstring' got status valid.
 [eva] string_c_generic.c:73: 
   function strncpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:246: starting to merge loop iterations
-[eva] FRAMAC_SHARE/libc/string.h:385: 
+[eva] FRAMAC_SHARE/libc/string.c:249: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/string.h:437: 
   function strncpy: postcondition 'result_ptr' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:386: 
+[eva] FRAMAC_SHARE/libc/string.h:438: 
   function strncpy: postcondition 'initialization' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:389: 
+[eva] FRAMAC_SHARE/libc/string.h:441: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:389: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:441: Warning: 
   function strncpy, behavior complete: postcondition 'equal_after_copy' got status unknown.
 [eva] Recording results for strncpy
 [eva] Done for function strncpy
@@ -199,9 +199,9 @@
   function strncpy: precondition 'room_nstring' got status valid.
 [eva] string_c_generic.c:78: 
   function strncpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:392: 
+[eva] FRAMAC_SHARE/libc/string.h:444: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:392: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:444: Warning: 
   function strncpy, behavior partial: postcondition 'equal_prefix' got status unknown.
 [eva] Recording results for strncpy
 [eva] Done for function strncpy
@@ -212,9 +212,9 @@
 [eva] string_c_generic.c:82: 
   function strncmp: precondition 'valid_string_s2' got status valid.
 [eva] FRAMAC_SHARE/libc/string.c:154: starting to merge loop iterations
-[eva] FRAMAC_SHARE/libc/string.h:163: 
+[eva] FRAMAC_SHARE/libc/string.h:181: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strncmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:163: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:181: Warning: 
   function strncmp: postcondition 'acsl_c_equiv' got status unknown.
 [eva] Recording results for strncmp
 [eva] Done for function strncmp
@@ -242,19 +242,21 @@
   function strncat: precondition 'valid_nstring_src' got status valid.
 [eva] string_c_generic.c:86: 
   function strncat: precondition 'valid_string_dest' got status valid.
+[eva] string_c_generic.c:86: 
+  function strncat: precondition 'separation' got status valid.
 [eva] string_c_generic.c:86: 
   function strncat, behavior partial: precondition 'room_string' got status valid.
 [eva] computing for function strlen <- strncat <- main.
-  Called from FRAMAC_SHARE/libc/string.c:209.
-[eva] FRAMAC_SHARE/libc/string.c:209: 
+  Called from FRAMAC_SHARE/libc/string.c:212.
+[eva] FRAMAC_SHARE/libc/string.c:212: 
   function strlen: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:143: 
+[eva] FRAMAC_SHARE/libc/string.h:160: 
   function strlen: postcondition 'acsl_c_equiv' got status valid.
 [eva] Recording results for strlen
 [eva] Done for function strlen
-[eva] FRAMAC_SHARE/libc/string.h:443: 
+[eva] FRAMAC_SHARE/libc/string.h:504: 
   function strncat: postcondition 'result_ptr' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:458: 
+[eva] FRAMAC_SHARE/libc/string.h:518: 
   function strncat, behavior partial: postcondition 'sum_of_bounded_lengths' got status valid.
 [eva] Recording results for strncat
 [eva] Done for function strncat
@@ -280,27 +282,25 @@
   Called from string_c_generic.c:91.
 [eva] string_c_generic.c:91: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:177: 
+[eva] FRAMAC_SHARE/libc/string.h:197: 
+  function strchr, behavior found: postcondition 'result_valid_string' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:198: 
   function strchr, behavior found: postcondition 'result_char' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:178: 
+[eva] FRAMAC_SHARE/libc/string.h:199: 
   function strchr, behavior found: postcondition 'result_same_base' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:179: 
+[eva] FRAMAC_SHARE/libc/string.h:200: 
   function strchr, behavior found: postcondition 'result_in_length' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:180: 
-  function strchr, behavior found: postcondition 'result_valid_string' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:181: 
+[eva] FRAMAC_SHARE/libc/string.h:202: 
   cannot evaluate ACSL term, unsupported logic var p
-[eva:alarm] FRAMAC_SHARE/libc/string.h:181: Warning: 
-  function strchr, behavior found: postcondition 'result_first_occur' got status unknown.
-[eva] FRAMAC_SHARE/libc/string.h:187: 
-  function strchr, behavior default: postcondition 'result_null_or_same_base' got status valid.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:202: Warning: 
+  function strchr, behavior found: postcondition 'result_first_occurrence' got status unknown.
 [eva] Recording results for strchr
 [eva] Done for function strchr
 [eva] computing for function strchr <- main.
   Called from string_c_generic.c:92.
 [eva] string_c_generic.c:92: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:184: 
+[eva] FRAMAC_SHARE/libc/string.h:205: 
   function strchr, behavior not_found: postcondition 'result_null' got status valid.
 [eva] Recording results for strchr
 [eva] Done for function strchr
@@ -309,29 +309,21 @@
 [eva] string_c_generic.c:93: 
   function strrchr: precondition 'valid_string_s' got status valid.
 [eva] computing for function strlen <- strrchr <- main.
-  Called from FRAMAC_SHARE/libc/string.c:263.
-[eva] FRAMAC_SHARE/libc/string.c:263: 
+  Called from FRAMAC_SHARE/libc/string.c:266.
+[eva] FRAMAC_SHARE/libc/string.c:266: 
   function strlen: precondition 'valid_string_s' got status valid.
 [eva] Recording results for strlen
 [eva] Done for function strlen
-[eva] FRAMAC_SHARE/libc/string.h:201: 
-  function strrchr, behavior found: postcondition 'result_char' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:202: 
-  function strrchr, behavior found: postcondition 'result_same_base' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:203: 
-  function strrchr, behavior found: postcondition 'result_valid_string' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:209: 
-  function strrchr, behavior default: postcondition 'result_null_or_same_base' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:223: 
+  function strrchr: postcondition 'result_null_or_same_base' got status valid.
 [eva] Recording results for strrchr
 [eva] Done for function strrchr
 [eva] computing for function strrchr <- main.
   Called from string_c_generic.c:94.
 [eva] string_c_generic.c:94: 
   function strrchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:263: Reusing old results for call to strlen
-[eva] FRAMAC_SHARE/libc/string.c:263: starting to merge loop iterations
-[eva] FRAMAC_SHARE/libc/string.h:206: 
-  function strrchr, behavior not_found: postcondition 'result_null' got status valid.
+[eva] FRAMAC_SHARE/libc/string.c:266: Reusing old results for call to strlen
+[eva] FRAMAC_SHARE/libc/string.c:266: starting to merge loop iterations
 [eva] Recording results for strrchr
 [eva] Done for function strrchr
 [eva] Recording results for main
diff --git a/tests/libc/oracle/string_c_strchr.res.oracle b/tests/libc/oracle/string_c_strchr.res.oracle
index 38d187e61abac5a476850d22c8c9d47cfc878dbe..a453fa14af65fd8f81e255557ba7a21a50f104af 100644
--- a/tests/libc/oracle/string_c_strchr.res.oracle
+++ b/tests/libc/oracle/string_c_strchr.res.oracle
@@ -10,10 +10,8 @@
   Called from string_c_strchr.c:62.
 [eva] string_c_strchr.c:62: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:184: 
+[eva] FRAMAC_SHARE/libc/string.h:205: 
   function strchr, behavior not_found: postcondition 'result_null' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:187: 
-  function strchr, behavior default: postcondition 'result_null_or_same_base' got status valid.
 [eva] Recording results for strchr
 [eva] Done for function strchr
 [eva] computing for function strchr <- main.
@@ -44,7 +42,7 @@
   Called from string_c_strchr.c:67.
 [eva] string_c_strchr.c:67: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:255: 
+[eva] FRAMAC_SHARE/libc/string.c:258: 
   Trace partitioning superposing up to 100 states
 [eva] Recording results for strchr
 [eva] Done for function strchr
@@ -58,18 +56,18 @@
   Called from string_c_strchr.c:70.
 [eva] string_c_strchr.c:70: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:177: 
+[eva] FRAMAC_SHARE/libc/string.h:197: 
+  function strchr, behavior found: postcondition 'result_valid_string' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:198: 
   function strchr, behavior found: postcondition 'result_char' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:178: 
+[eva] FRAMAC_SHARE/libc/string.h:199: 
   function strchr, behavior found: postcondition 'result_same_base' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:179: 
+[eva] FRAMAC_SHARE/libc/string.h:200: 
   function strchr, behavior found: postcondition 'result_in_length' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:180: 
-  function strchr, behavior found: postcondition 'result_valid_string' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:181: 
+[eva] FRAMAC_SHARE/libc/string.h:202: 
   cannot evaluate ACSL term, unsupported logic var p
-[eva:alarm] FRAMAC_SHARE/libc/string.h:181: Warning: 
-  function strchr, behavior found: postcondition 'result_first_occur' got status unknown.
+[eva:alarm] FRAMAC_SHARE/libc/string.h:202: Warning: 
+  function strchr, behavior found: postcondition 'result_first_occurrence' got status unknown.
 [eva] Recording results for strchr
 [eva] Done for function strchr
 [eva] computing for function strchr <- main.
@@ -172,7 +170,7 @@
   Called from string_c_strchr.c:87.
 [eva] string_c_strchr.c:87: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:255: 
+[eva] FRAMAC_SHARE/libc/string.c:258: 
   Trace partitioning superposing up to 200 states
 [eva] Recording results for strchr
 [eva] Done for function strchr
diff --git a/tests/libc/oracle/string_c_strstr.res.oracle b/tests/libc/oracle/string_c_strstr.res.oracle
index d4134467a53b8833d169dd88011027ba67a77297..4d8bf67212fd75cf0737ede051d148edc4ab0951 100644
--- a/tests/libc/oracle/string_c_strstr.res.oracle
+++ b/tests/libc/oracle/string_c_strstr.res.oracle
@@ -10,7 +10,7 @@
   function strstr: precondition 'valid_string_haystack' got status valid.
 [eva] string_c_strstr.c:52: 
   function strstr: precondition 'valid_string_needle' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:241: 
+[eva] FRAMAC_SHARE/libc/string.h:263: 
   function strstr: postcondition 'result_null_or_in_haystack' got status valid.
 [eva] Recording results for strstr
 [eva] Done for function strstr
@@ -68,7 +68,7 @@
   function strstr: precondition 'valid_string_haystack' got status valid.
 [eva] string_c_strstr.c:59: 
   function strstr: precondition 'valid_string_needle' got status valid.
-[eva] FRAMAC_SHARE/libc/string.c:292: starting to merge loop iterations
+[eva] FRAMAC_SHARE/libc/string.c:295: starting to merge loop iterations
 [eva] Recording results for strstr
 [eva] Done for function strstr
 [eva] computing for function strstr <- main.
@@ -101,9 +101,9 @@
   function strstr: precondition 'valid_string_haystack' got status valid.
 [eva] string_c_strstr.c:64: 
   function strstr: precondition 'valid_string_needle' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:243: 
+[eva] FRAMAC_SHARE/libc/string.h:266: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[eva:alarm] FRAMAC_SHARE/libc/string.h:241: Warning: 
+[eva:alarm] FRAMAC_SHARE/libc/string.h:263: Warning: 
   function strstr: postcondition 'result_null_or_in_haystack' got status unknown.
 [eva] Recording results for strstr
 [eva] Done for function strstr
diff --git a/tests/libc/oracle/string_h.res.oracle b/tests/libc/oracle/string_h.res.oracle
index b30641505aaf527e215907aacd0c353cb7acd29a..2b9a24d5ee7bf35eac5421780a8616bf2f61ea9f 100644
--- a/tests/libc/oracle/string_h.res.oracle
+++ b/tests/libc/oracle/string_h.res.oracle
@@ -5,7 +5,7 @@
 [eva:initial-state] Values of globals at initialization
   nondet ∈ [--..--]
 [eva] computing for function test_strcmp <- main.
-  Called from string_h.c:139.
+  Called from string_h.c:157.
 [eva] computing for function strcmp <- test_strcmp <- main.
   Called from string_h.c:5.
 [eva] using specification for function strcmp
@@ -13,14 +13,14 @@
   function strcmp: precondition 'valid_string_s1' got status valid.
 [eva] string_h.c:5: 
   function strcmp: precondition 'valid_string_s2' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:156: 
+[eva] FRAMAC_SHARE/libc/string.h:174: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
 [eva] Done for function strcmp
-[eva:alarm] string_h.c:6: Warning: assertion got status unknown.
+[eva:alarm] string_h.c:6: Warning: check got status unknown.
 [eva] Recording results for test_strcmp
 [eva] Done for function test_strcmp
 [eva] computing for function test_strcat <- main.
-  Called from string_h.c:140.
+  Called from string_h.c:158.
 [eva] computing for function strcat <- test_strcat <- main.
   Called from string_h.c:13.
 [eva] using specification for function strcat
@@ -30,6 +30,8 @@
   function strcat: precondition 'valid_string_dest' got status valid.
 [eva] string_h.c:13: 
   function strcat: precondition 'room_string' got status valid.
+[eva] string_h.c:13: 
+  function strcat: precondition 'separation' got status valid.
 [eva] Done for function strcat
 [eva] computing for function strcat <- test_strcat <- main.
   Called from string_h.c:16.
@@ -39,11 +41,13 @@
   function strcat: precondition 'valid_string_dest' got status valid.
 [eva] string_h.c:16: 
   function strcat: precondition 'room_string' got status valid.
+[eva] string_h.c:16: 
+  function strcat: precondition 'separation' got status valid.
 [eva] Done for function strcat
 [eva] Recording results for test_strcat
 [eva] Done for function test_strcat
 [eva] computing for function test_strstr <- main.
-  Called from string_h.c:141.
+  Called from string_h.c:159.
 [eva] computing for function strstr <- test_strstr <- main.
   Called from string_h.c:24.
 [eva] using specification for function strstr
@@ -51,14 +55,14 @@
   function strstr: precondition 'valid_string_haystack' got status valid.
 [eva] string_h.c:24: 
   function strstr: precondition 'valid_string_needle' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:243: 
+[eva] FRAMAC_SHARE/libc/string.h:266: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] Done for function strstr
-[eva:alarm] string_h.c:25: Warning: assertion got status unknown.
+[eva:alarm] string_h.c:25: Warning: check got status unknown.
 [eva] Recording results for test_strstr
 [eva] Done for function test_strstr
 [eva] computing for function test_strncat <- main.
-  Called from string_h.c:142.
+  Called from string_h.c:160.
 [eva] string_h.c:34: Trace partitioning superposing up to 100 states
 [eva] computing for function strncat <- test_strncat <- main.
   Called from string_h.c:36.
@@ -67,294 +71,543 @@
   function strncat: precondition 'valid_nstring_src' got status valid.
 [eva] string_h.c:36: 
   function strncat: precondition 'valid_string_dest' got status valid.
+[eva] string_h.c:36: 
+  function strncat: precondition 'separation' got status valid.
 [eva] string_h.c:36: 
   function strncat, behavior complete: precondition 'room_string' got status valid.
 [eva] Done for function strncat
+[eva] computing for function strncat <- test_strncat <- main.
+  Called from string_h.c:40.
+[eva] string_h.c:40: 
+  function strncat: precondition 'valid_nstring_src' got status valid.
+[eva] string_h.c:40: 
+  function strncat: precondition 'valid_string_dest' got status valid.
+[eva] string_h.c:40: 
+  function strncat: precondition 'separation' got status valid.
+[eva] string_h.c:40: 
+  function strncat, behavior partial: precondition 'room_string' got status valid.
+[eva] Done for function strncat
+[eva] computing for function strncat <- test_strncat <- main.
+  Called from string_h.c:44.
+[eva] string_h.c:44: 
+  function strncat: precondition 'valid_nstring_src' got status valid.
+[eva] string_h.c:44: 
+  function strncat: precondition 'valid_string_dest' got status valid.
+[eva] string_h.c:44: 
+  function strncat: precondition 'separation' got status valid.
+[eva:alarm] string_h.c:44: Warning: 
+  function strncat, behavior partial: precondition 'room_string' got status invalid.
+[eva] Done for function strncat
 [eva] Recording results for test_strncat
 [eva] Done for function test_strncat
 [eva] computing for function crashes_gcc <- main.
-  Called from string_h.c:143.
+  Called from string_h.c:161.
 [eva] computing for function strcpy <- crashes_gcc <- main.
-  Called from string_h.c:53.
+  Called from string_h.c:63.
 [eva] using specification for function strcpy
-[eva] string_h.c:53: 
+[eva] string_h.c:63: 
   function strcpy: precondition 'valid_string_src' got status valid.
-[eva] string_h.c:53: 
+[eva] string_h.c:63: 
   function strcpy: precondition 'room_string' got status valid.
-[eva:alarm] string_h.c:53: Warning: 
+[eva:alarm] string_h.c:63: Warning: 
   function strcpy: precondition 'separation' got status invalid.
 [eva] Done for function strcpy
 [eva] Recording results for crashes_gcc
 [eva] Done for function crashes_gcc
 [eva] computing for function test_strtok <- main.
-  Called from string_h.c:144.
+  Called from string_h.c:162.
 [eva] computing for function strtok <- test_strtok <- main.
-  Called from string_h.c:58.
+  Called from string_h.c:68.
 [eva] using specification for function strtok
-[eva] string_h.c:58: 
+[eva] string_h.c:68: 
   function strtok: precondition 'valid_string_delim' got status valid.
-[eva:alarm] string_h.c:58: Warning: 
+[eva] string_h.c:68: 
+  function strtok: precondition 'separation' got status valid.
+[eva:alarm] string_h.c:68: Warning: 
   function strtok, behavior resume_str: precondition 'not_first_call' got status invalid.
 [eva] Done for function strtok
 [eva] computing for function strtok <- test_strtok <- main.
-  Called from string_h.c:62.
-[eva] string_h.c:62: 
+  Called from string_h.c:72.
+[eva] string_h.c:72: 
   function strtok: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:62: 
+[eva] string_h.c:72: 
+  function strtok: precondition 'separation' got status valid.
+[eva] string_h.c:72: 
   function strtok, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status valid.
 [eva] Done for function strtok
-[eva:alarm] string_h.c:63: Warning: assertion got status unknown.
+[eva] string_h.c:73: check got status valid.
 [eva] computing for function strtok <- test_strtok <- main.
-  Called from string_h.c:64.
-[eva] string_h.c:64: 
+  Called from string_h.c:74.
+[eva] string_h.c:74: 
   function strtok: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:64: 
+[eva] string_h.c:74: 
+  function strtok: precondition 'separation' got status valid.
+[eva] string_h.c:74: 
   function strtok, behavior resume_str: precondition 'not_first_call' got status valid.
 [eva] Done for function strtok
-[eva:alarm] string_h.c:65: Warning: assertion got status unknown.
+[eva] string_h.c:75: check got status valid.
 [eva] computing for function strtok <- test_strtok <- main.
-  Called from string_h.c:67.
-[eva] string_h.c:67: 
+  Called from string_h.c:77.
+[eva] string_h.c:77: 
   function strtok: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:67: 
+[eva] string_h.c:77: 
+  function strtok: precondition 'separation' got status valid.
+[eva] string_h.c:77: 
   function strtok, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status valid.
 [eva] Done for function strtok
-[eva:alarm] string_h.c:68: Warning: assertion got status unknown.
+[eva] string_h.c:78: check got status valid.
 [eva] computing for function strtok <- test_strtok <- main.
-  Called from string_h.c:69.
-[eva] string_h.c:69: 
+  Called from string_h.c:79.
+[eva] string_h.c:79: 
   function strtok: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:69: 
+[eva] string_h.c:79: 
+  function strtok: precondition 'separation' got status valid.
+[eva] string_h.c:79: 
   function strtok, behavior resume_str: precondition 'not_first_call' got status valid.
 [eva] Done for function strtok
-[eva:alarm] string_h.c:70: Warning: assertion got status unknown.
+[eva:alarm] string_h.c:80: Warning: check got status unknown.
 [eva] computing for function strtok <- test_strtok <- main.
-  Called from string_h.c:72.
-[eva] string_h.c:72: 
+  Called from string_h.c:82.
+[eva] string_h.c:82: 
   function strtok: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:72: 
+[eva] string_h.c:82: 
+  function strtok: precondition 'separation' got status valid.
+[eva] string_h.c:82: 
   function strtok, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status valid.
-[eva:invalid-assigns] string_h.c:72: 
+[eva:invalid-assigns] string_h.c:82: 
   Completely invalid destination for assigns clause *(s + (0 ..)). Ignoring.
 [eva] Done for function strtok
-[eva:alarm] string_h.c:73: Warning: assertion got status unknown.
+[eva:alarm] string_h.c:83: Warning: check got status unknown.
 [eva] computing for function strtok <- test_strtok <- main.
-  Called from string_h.c:75.
-[eva] string_h.c:75: 
+  Called from string_h.c:85.
+[eva] string_h.c:85: 
   function strtok: precondition 'valid_string_delim' got status valid.
-[eva:alarm] string_h.c:75: Warning: 
+[eva] string_h.c:85: 
+  function strtok: precondition 'separation' got status valid.
+[eva:alarm] string_h.c:85: Warning: 
   function strtok, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status invalid.
 [eva] Done for function strtok
 [eva] Recording results for test_strtok
 [eva] Done for function test_strtok
 [eva] computing for function test_strtok_r <- main.
-  Called from string_h.c:145.
+  Called from string_h.c:163.
 [eva] computing for function strtok_r <- test_strtok_r <- main.
-  Called from string_h.c:82.
+  Called from string_h.c:92.
 [eva] using specification for function strtok_r
-[eva] string_h.c:82: 
+[eva] string_h.c:92: 
   function strtok_r: precondition 'valid_string_delim' got status valid.
-[eva:alarm] string_h.c:82: Warning: 
+[eva:alarm] string_h.c:92: Warning: 
+  function strtok_r: precondition 'separation' got status unknown.
+[eva:alarm] string_h.c:92: Warning: 
   function strtok_r: precondition 'valid_saveptr' got status invalid.
 [eva] Done for function strtok_r
 [eva] computing for function strtok_r <- test_strtok_r <- main.
-  Called from string_h.c:87.
-[eva] string_h.c:87: 
+  Called from string_h.c:97.
+[eva] string_h.c:97: 
   function strtok_r: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:87: 
+[eva:alarm] string_h.c:97: Warning: 
+  function strtok_r: precondition 'separation' got status unknown.
+[eva] string_h.c:97: 
   function strtok_r: precondition 'valid_saveptr' got status valid.
-[eva] string_h.c:87: 
+[eva] string_h.c:97: 
   function strtok_r, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status valid.
 [eva] Done for function strtok_r
 [eva] computing for function strtok_r <- test_strtok_r <- main.
-  Called from string_h.c:89.
-[eva] string_h.c:89: 
+  Called from string_h.c:99.
+[eva] string_h.c:99: 
   function strtok_r: precondition 'valid_string_delim' got status valid.
-[eva:alarm] string_h.c:89: Warning: 
+[eva:alarm] string_h.c:99: Warning: 
+  function strtok_r: precondition 'separation' got status unknown.
+[eva:alarm] string_h.c:99: Warning: 
   function strtok_r: precondition 'valid_saveptr' got status invalid.
 [eva] Done for function strtok_r
-[eva:alarm] string_h.c:92: Warning: assertion got status unknown.
+[eva] string_h.c:102: check got status valid.
 [eva] computing for function strtok_r <- test_strtok_r <- main.
-  Called from string_h.c:93.
-[eva] string_h.c:93: 
+  Called from string_h.c:103.
+[eva] string_h.c:103: 
   function strtok_r: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:93: 
+[eva] string_h.c:103: 
+  function strtok_r: precondition 'separation' got status valid.
+[eva] string_h.c:103: 
   function strtok_r: precondition 'valid_saveptr' got status valid.
-[eva] string_h.c:93: 
+[eva] string_h.c:103: 
   function strtok_r, behavior resume_str: precondition 'not_first_call' got status valid.
-[eva] string_h.c:93: 
+[eva] string_h.c:103: 
   function strtok_r, behavior resume_str: precondition 'initialization,saveptr' got status valid.
 [eva] Done for function strtok_r
-[eva] string_h.c:94: Frama_C_show_each_saveptr: {{ &buf + [0..--] }}
-[eva:alarm] string_h.c:95: Warning: assertion got status unknown.
+[eva] string_h.c:104: Frama_C_show_each_saveptr: {{ &buf + {0; 1} }}
+[eva] string_h.c:105: check got status valid.
 [eva] computing for function strtok_r <- test_strtok_r <- main.
-  Called from string_h.c:97.
-[eva] string_h.c:97: 
+  Called from string_h.c:107.
+[eva] string_h.c:107: 
   function strtok_r: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:97: 
+[eva] string_h.c:107: 
+  function strtok_r: precondition 'separation' got status valid.
+[eva] string_h.c:107: 
   function strtok_r: precondition 'valid_saveptr' got status valid.
-[eva] string_h.c:97: 
+[eva] string_h.c:107: 
   function strtok_r, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status valid.
 [eva] Done for function strtok_r
-[eva:alarm] string_h.c:98: Warning: assertion got status unknown.
+[eva] string_h.c:108: check got status valid.
 [eva] computing for function strtok_r <- test_strtok_r <- main.
-  Called from string_h.c:99.
-[eva] string_h.c:99: 
+  Called from string_h.c:109.
+[eva] string_h.c:109: 
   function strtok_r: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:99: 
+[eva] string_h.c:109: 
+  function strtok_r: precondition 'separation' got status valid.
+[eva] string_h.c:109: 
   function strtok_r: precondition 'valid_saveptr' got status valid.
-[eva] string_h.c:99: 
+[eva] string_h.c:109: 
   function strtok_r, behavior resume_str: precondition 'not_first_call' got status valid.
-[eva] string_h.c:99: 
+[eva] string_h.c:109: 
   function strtok_r, behavior resume_str: precondition 'initialization,saveptr' got status valid.
 [eva] Done for function strtok_r
-[eva:alarm] string_h.c:100: Warning: assertion got status unknown.
+[eva:alarm] string_h.c:110: Warning: check got status unknown.
 [eva] computing for function strtok_r <- test_strtok_r <- main.
-  Called from string_h.c:102.
-[eva] string_h.c:102: 
+  Called from string_h.c:112.
+[eva] string_h.c:112: 
   function strtok_r: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:102: 
+[eva] string_h.c:112: 
+  function strtok_r: precondition 'separation' got status valid.
+[eva] string_h.c:112: 
   function strtok_r: precondition 'valid_saveptr' got status valid.
-[eva] string_h.c:102: 
+[eva] string_h.c:112: 
   function strtok_r, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status valid.
-[eva:invalid-assigns] string_h.c:102: 
+[eva:invalid-assigns] string_h.c:112: 
   Completely invalid destination for assigns clause *(s + (0 ..)). Ignoring.
 [eva] Done for function strtok_r
-[eva:alarm] string_h.c:103: Warning: assertion got status unknown.
+[eva:alarm] string_h.c:113: Warning: check got status unknown.
 [eva] computing for function strtok_r <- test_strtok_r <- main.
-  Called from string_h.c:105.
-[eva] string_h.c:105: 
+  Called from string_h.c:115.
+[eva] string_h.c:115: 
   function strtok_r: precondition 'valid_string_delim' got status valid.
-[eva] string_h.c:105: 
+[eva] string_h.c:115: 
+  function strtok_r: precondition 'separation' got status valid.
+[eva] string_h.c:115: 
   function strtok_r: precondition 'valid_saveptr' got status valid.
-[eva:alarm] string_h.c:105: Warning: 
+[eva:alarm] string_h.c:115: Warning: 
   function strtok_r, behavior new_str: precondition 'valid_string_s_or_delim_not_found' got status invalid.
 [eva] Done for function strtok_r
 [eva] Recording results for test_strtok_r
 [eva] Done for function test_strtok_r
 [eva] computing for function strdup <- main.
-  Called from string_h.c:146.
+  Called from string_h.c:164.
 [eva] using specification for function strdup
-[eva:libc:unsupported-spec] string_h.c:146: Warning: 
+[eva:libc:unsupported-spec] string_h.c:164: Warning: 
   The specification of function 'strdup' is currently not supported by Eva.
   Consider adding 'FRAMAC_SHARE/libc/string.c' to the analyzed source files.
-[eva] string_h.c:146: Warning: ignoring unsupported allocates clause
-[eva] string_h.c:146: 
+[eva] string_h.c:164: Warning: ignoring unsupported allocates clause
+[eva] string_h.c:164: 
   function strdup: precondition 'valid_string_s' got status valid.
 [eva] Done for function strdup
 [eva] computing for function strndup <- main.
-  Called from string_h.c:147.
+  Called from string_h.c:165.
 [eva] using specification for function strndup
-[eva:libc:unsupported-spec] string_h.c:147: Warning: 
+[eva:libc:unsupported-spec] string_h.c:165: Warning: 
   The specification of function 'strndup' is currently not supported by Eva.
   Consider adding 'FRAMAC_SHARE/libc/string.c' to the analyzed source files.
-[eva] string_h.c:147: Warning: ignoring unsupported allocates clause
-[eva] string_h.c:147: 
+[eva] string_h.c:165: Warning: ignoring unsupported allocates clause
+[eva] string_h.c:165: 
   function strndup: precondition 'valid_string_s' got status valid.
 [eva] Done for function strndup
 [eva] computing for function strsignal <- main.
-  Called from string_h.c:148.
+  Called from string_h.c:166.
 [eva] using specification for function strsignal
 [eva] Done for function strsignal
-[eva] string_h.c:149: assertion got status valid.
+[eva] string_h.c:167: check got status valid.
 [eva] computing for function test_strncpy <- main.
-  Called from string_h.c:150.
+  Called from string_h.c:168.
 [eva] computing for function strncpy <- test_strncpy <- main.
-  Called from string_h.c:113.
+  Called from string_h.c:123.
 [eva] using specification for function strncpy
-[eva] string_h.c:113: 
+[eva] string_h.c:123: 
   function strncpy: precondition 'valid_nstring_src' got status valid.
-[eva] string_h.c:113: 
+[eva] string_h.c:123: 
   function strncpy: precondition 'room_nstring' got status valid.
-[eva] string_h.c:113: 
+[eva] string_h.c:123: 
   function strncpy: precondition 'separation' got status valid.
 [eva] Done for function strncpy
 [eva] computing for function strncpy <- test_strncpy <- main.
-  Called from string_h.c:118.
-[eva:alarm] string_h.c:118: Warning: 
+  Called from string_h.c:128.
+[eva:alarm] string_h.c:128: Warning: 
   function strncpy: precondition 'valid_nstring_src' got status invalid.
-[eva] string_h.c:118: 
+[eva] string_h.c:128: 
   function strncpy: no state left, precondition 'room_nstring' got status valid.
-[eva] string_h.c:118: 
+[eva] string_h.c:128: 
   function strncpy: no state left, precondition 'separation' got status valid.
 [eva] Done for function strncpy
 [eva] Recording results for test_strncpy
 [eva] Done for function test_strncpy
 [eva] computing for function test_strlcpy <- main.
-  Called from string_h.c:151.
+  Called from string_h.c:169.
 [eva] computing for function strlcpy <- test_strlcpy <- main.
-  Called from string_h.c:126.
+  Called from string_h.c:136.
 [eva] using specification for function strlcpy
-[eva] string_h.c:126: 
+[eva] string_h.c:136: 
   function strlcpy: precondition 'valid_string_src' got status valid.
-[eva] string_h.c:126: 
+[eva] string_h.c:136: 
   function strlcpy: precondition 'room_nstring' got status valid.
-[eva] string_h.c:126: 
+[eva] string_h.c:136: 
   function strlcpy: precondition 'separation' got status valid.
 [eva] Done for function strlcpy
 [eva] computing for function strlcpy <- test_strlcpy <- main.
-  Called from string_h.c:127.
-[eva] string_h.c:127: 
+  Called from string_h.c:137.
+[eva] string_h.c:137: 
   function strlcpy: precondition 'valid_string_src' got status valid.
-[eva] string_h.c:127: 
+[eva] string_h.c:137: 
   function strlcpy: precondition 'room_nstring' got status valid.
-[eva] string_h.c:127: 
+[eva] string_h.c:137: 
   function strlcpy: precondition 'separation' got status valid.
 [eva] Done for function strlcpy
 [eva] computing for function strlcat <- test_strlcpy <- main.
-  Called from string_h.c:128.
+  Called from string_h.c:138.
 [eva] using specification for function strlcat
-[eva:alarm] string_h.c:128: Warning: 
+[eva:alarm] string_h.c:138: Warning: 
   function strlcat: precondition 'valid_string_src' got status unknown.
-[eva:alarm] string_h.c:128: Warning: 
+[eva:alarm] string_h.c:138: Warning: 
   function strlcat: precondition 'valid_string_dest' got status unknown.
-[eva] string_h.c:128: 
+[eva] string_h.c:138: 
   function strlcat: precondition 'room_nstring' got status valid.
+[eva] string_h.c:138: 
+  function strlcat: precondition 'separation' got status valid.
 [eva] Done for function strlcat
 [eva] computing for function strlcpy <- test_strlcpy <- main.
-  Called from string_h.c:132.
-[eva:alarm] string_h.c:132: Warning: 
+  Called from string_h.c:142.
+[eva:alarm] string_h.c:142: Warning: 
   function strlcpy: precondition 'valid_string_src' got status invalid.
-[eva] string_h.c:132: 
+[eva] string_h.c:142: 
   function strlcpy: no state left, precondition 'room_nstring' got status valid.
-[eva] string_h.c:132: 
+[eva] string_h.c:142: 
   function strlcpy: no state left, precondition 'separation' got status valid.
 [eva] Done for function strlcpy
 [eva] Recording results for test_strlcpy
 [eva] Done for function test_strlcpy
-[eva] string_h.c:154: Call to builtin strchr
-[eva] string_h.c:154: 
+[eva] computing for function test_strrchr <- main.
+  Called from string_h.c:170.
+[eva] computing for function strrchr <- test_strrchr <- main.
+  Called from string_h.c:149.
+[eva] using specification for function strrchr
+[eva] string_h.c:149: 
+  function strrchr: precondition 'valid_string_s' got status valid.
+[eva] Done for function strrchr
+[eva:alarm] string_h.c:150: Warning: check got status unknown.
+[eva] computing for function strrchr <- test_strrchr <- main.
+  Called from string_h.c:151.
+[eva] string_h.c:151: 
+  function strrchr: precondition 'valid_string_s' got status valid.
+[eva] Done for function strrchr
+[eva:alarm] string_h.c:152: Warning: check got status unknown.
+[eva] Recording results for test_strrchr
+[eva] Done for function test_strrchr
+[eva] string_h.c:173: Call to builtin strchr
+[eva] string_h.c:173: 
   function strchr: precondition 'valid_string_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:181: 
+[eva] FRAMAC_SHARE/libc/string.h:202: 
   cannot evaluate ACSL term, unsupported logic var p
+[eva:alarm] string_h.c:173: Warning: check got status unknown.
 [eva] computing for function strchrnul <- main.
-  Called from string_h.c:155.
+  Called from string_h.c:174.
 [eva] using specification for function strchrnul
-[eva] string_h.c:155: 
+[eva] string_h.c:174: 
   function strchrnul: precondition 'valid_string_s' got status valid.
 [eva] Done for function strchrnul
-[eva] string_h.c:157: Call to builtin strchr
-[eva] string_h.c:157: 
+[eva] string_h.c:176: Call to builtin strchr
+[eva] string_h.c:176: 
   function strchr: precondition 'valid_string_s' got status valid.
 [eva] computing for function strchrnul <- main.
-  Called from string_h.c:158.
-[eva] string_h.c:158: 
+  Called from string_h.c:177.
+[eva] string_h.c:177: 
   function strchrnul: precondition 'valid_string_s' got status valid.
 [eva] Done for function strchrnul
 [eva] computing for function mempcpy <- main.
-  Called from string_h.c:160.
+  Called from string_h.c:179.
 [eva] using specification for function mempcpy
-[eva] string_h.c:160: 
+[eva] string_h.c:179: 
   function mempcpy: precondition 'valid_dest' got status valid.
-[eva] string_h.c:160: 
+[eva] string_h.c:179: 
   function mempcpy: precondition 'valid_src' got status valid.
-[eva] string_h.c:160: 
+[eva] string_h.c:179: 
   function mempcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:114: 
+[eva] FRAMAC_SHARE/libc/string.h:131: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
-[kernel] string_h.c:160: Warning: using size of 'void'
+[kernel] string_h.c:179: Warning: using size of 'void'
 [eva] Done for function mempcpy
-[eva:alarm] string_h.c:161: Warning: assertion 'imprecise' got status unknown.
+[eva:alarm] string_h.c:180: Warning: check 'imprecise' got status unknown.
+[eva] string_h.c:182: Call to builtin strlen
+[eva] string_h.c:182: 
+  function strlen: precondition 'valid_string_s' got status valid.
+[eva] computing for function memrchr <- main.
+  Called from string_h.c:182.
+[eva] using specification for function memrchr
+[eva] string_h.c:182: function memrchr: precondition 'valid' got status valid.
+[eva] string_h.c:182: 
+  function memrchr: precondition 'initialization' got status valid.
+[eva] string_h.c:182: 
+  function memrchr: precondition 'danglingness' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:99: 
+  cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
+[eva] FRAMAC_SHARE/libc/string.h:103: 
+  cannot evaluate ACSL term, unsupported ACSL construct: logic function memchr
+[eva] Done for function memrchr
+[eva:alarm] string_h.c:183: Warning: check 'imprecise' got status unknown.
+[eva] string_h.c:184: Call to builtin strlen
+[eva] string_h.c:184: 
+  function strlen: precondition 'valid_string_s' got status valid.
+[eva] computing for function memrchr <- main.
+  Called from string_h.c:184.
+[eva] string_h.c:184: function memrchr: precondition 'valid' got status valid.
+[eva] string_h.c:184: 
+  function memrchr: precondition 'initialization' got status valid.
+[eva] string_h.c:184: 
+  function memrchr: precondition 'danglingness' got status valid.
+[eva] Done for function memrchr
+[eva:alarm] string_h.c:185: Warning: check 'imprecise' got status unknown.
+[eva] computing for function memmem <- main.
+  Called from string_h.c:190.
+[eva] using specification for function memmem
+[eva] string_h.c:190: 
+  function memmem: precondition 'valid_haystack' got status valid.
+[eva] string_h.c:190: 
+  function memmem: precondition 'valid_needle' got status valid.
+[eva] Done for function memmem
+[eva:alarm] string_h.c:191: Warning: check 'imprecise' got status unknown.
+[eva] computing for function memmem <- main.
+  Called from string_h.c:194.
+[eva] string_h.c:194: 
+  function memmem: precondition 'valid_haystack' got status valid.
+[eva] string_h.c:194: 
+  function memmem: precondition 'valid_needle' got status valid.
+[eva] Done for function memmem
+[eva:alarm] string_h.c:195: Warning: check 'imprecise' got status unknown.
+[eva] computing for function strsep <- main.
+  Called from string_h.c:199.
+[eva] using specification for function strsep
+[eva] string_h.c:199: 
+  function strsep: precondition 'valid_stringp' got status valid.
+[eva] string_h.c:199: 
+  function strsep, behavior valid_stringp: precondition 'valid_string_stringp' got status valid.
+[eva] Done for function strsep
+[eva] string_h.c:200: check got status valid.
+[eva] computing for function strsep <- main.
+  Called from string_h.c:201.
+[eva] string_h.c:201: 
+  function strsep: precondition 'valid_stringp' got status valid.
+[eva] string_h.c:201: 
+  function strsep, behavior valid_stringp: precondition 'valid_string_stringp' got status valid.
+[eva] Done for function strsep
+[eva] string_h.c:202: check got status valid.
+[eva] computing for function strsep <- main.
+  Called from string_h.c:204.
+[eva] string_h.c:204: 
+  function strsep: precondition 'valid_stringp' got status valid.
+[eva:invalid-assigns] string_h.c:204: 
+  Completely invalid destination for assigns clause *(*(stringp + (0 ..))).
+  Ignoring.
+[eva] Done for function strsep
+[eva] string_h.c:205: check got status valid.
+[eva] computing for function stpncpy <- main.
+  Called from string_h.c:209.
+[eva] using specification for function stpncpy
+[eva] string_h.c:209: 
+  function stpncpy: precondition 'valid_string_src' got status valid.
+[eva] string_h.c:209: 
+  function stpncpy: precondition 'valid_dest' got status valid.
+[eva] string_h.c:209: 
+  function stpncpy: precondition 'separation' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:627: 
+  cannot evaluate ACSL term, unsupported ACSL construct: logic function strncmp
+[eva] Done for function stpncpy
+[eva] string_h.c:210: check got status valid.
+[eva:alarm] string_h.c:211: Warning: check got status unknown.
+[eva] computing for function stpncpy <- main.
+  Called from string_h.c:213.
+[eva] string_h.c:213: 
+  function stpncpy: precondition 'valid_string_src' got status valid.
+[eva] string_h.c:213: 
+  function stpncpy: precondition 'valid_dest' got status valid.
+[eva] string_h.c:213: 
+  function stpncpy: precondition 'separation' got status valid.
+[eva] FRAMAC_SHARE/libc/string.h:621: 
+  cannot evaluate ACSL term, unsupported ACSL construct: logic function strcmp
+[eva] Done for function stpncpy
+[eva:alarm] string_h.c:214: Warning: check got status unknown.
+[eva:alarm] string_h.c:215: Warning: check got status unknown.
+[eva] string_h.c:216: check got status valid.
+[eva] computing for function strlcat <- main.
+  Called from string_h.c:220.
+[eva] string_h.c:220: 
+  function strlcat: precondition 'valid_string_src' got status valid.
+[eva] string_h.c:220: 
+  function strlcat: precondition 'valid_string_dest' got status valid.
+[eva] string_h.c:220: 
+  function strlcat: precondition 'room_nstring' got status valid.
+[eva] string_h.c:220: 
+  function strlcat: precondition 'separation' got status valid.
+[eva] Done for function strlcat
+[eva:alarm] string_h.c:221: Warning: check 'imprecise' got status unknown.
+[eva] computing for function strlcat <- main.
+  Called from string_h.c:222.
+[eva:alarm] string_h.c:222: Warning: 
+  function strlcat: precondition 'valid_string_src' got status unknown.
+[eva:alarm] string_h.c:222: Warning: 
+  function strlcat: precondition 'valid_string_dest' got status unknown.
+[eva] string_h.c:222: 
+  function strlcat: precondition 'room_nstring' got status valid.
+[eva] string_h.c:222: 
+  function strlcat: precondition 'separation' got status valid.
+[eva] Done for function strlcat
+[eva] computing for function strlcat <- main.
+  Called from string_h.c:227.
+[eva] string_h.c:227: 
+  function strlcat: precondition 'valid_string_src' got status valid.
+[eva] string_h.c:227: 
+  function strlcat: precondition 'valid_string_dest' got status valid.
+[eva] string_h.c:227: 
+  function strlcat: precondition 'room_nstring' got status valid.
+[eva:alarm] string_h.c:227: Warning: 
+  function strlcat: precondition 'separation' got status invalid.
+[eva] Done for function strlcat
+[eva] computing for function strlcat <- main.
+  Called from string_h.c:231.
+[eva] string_h.c:231: 
+  function strlcat: precondition 'valid_string_src' got status valid.
+[eva] string_h.c:231: 
+  function strlcat: precondition 'valid_string_dest' got status valid.
+[eva] string_h.c:231: 
+  function strlcat: precondition 'room_nstring' got status valid.
+[eva] string_h.c:231: 
+  function strlcat: precondition 'separation' got status valid.
+[eva] Done for function strlcat
+[eva] computing for function strlcat <- main.
+  Called from string_h.c:235.
+[eva] string_h.c:235: 
+  function strlcat: precondition 'valid_string_src' got status valid.
+[eva] string_h.c:235: 
+  function strlcat: precondition 'valid_string_dest' got status valid.
+[eva] string_h.c:235: 
+  function strlcat: precondition 'room_nstring' got status valid.
+[eva] string_h.c:235: 
+  function strlcat: precondition 'separation' got status valid.
+[eva] Done for function strlcat
+[eva] computing for function strxfrm <- main.
+  Called from string_h.c:240.
+[eva] using specification for function strxfrm
+[eva] string_h.c:240: 
+  function strxfrm: precondition 'valid_dest' got status valid.
+[eva] string_h.c:240: 
+  function strxfrm: precondition 'valid_string_src' got status valid.
+[eva] string_h.c:240: 
+  function strxfrm: precondition 'separation' got status valid.
+[eva] Done for function strxfrm
+[eva] computing for function strxfrm <- main.
+  Called from string_h.c:242.
+[eva] string_h.c:242: 
+  function strxfrm: precondition 'valid_dest' got status valid.
+[eva] string_h.c:242: 
+  function strxfrm: precondition 'valid_string_src' got status valid.
+[eva] string_h.c:242: 
+  function strxfrm: precondition 'separation' got status valid.
+[eva] Done for function strxfrm
 [eva] Recording results for main
 [eva] Done for function main
 [eva] ====== VALUES COMPUTED ======
@@ -368,7 +621,7 @@
          [1..5] ∈ [--..--] or UNINITIALIZED
          [6..9] ∈ UNINITIALIZED
 [eva:final-states] Values at end of function test_strcmp:
-  res ∈ {0}
+  res ∈ [--..--]
 [eva:final-states] Values at end of function test_strlcpy:
   buf[0..15] ∈ [--..--]
   buf2[0..5] ∈ [--..--]
@@ -385,6 +638,12 @@
       [1..99] ∈ [--..--] or UNINITIALIZED
   source[0..98] ∈ {90}
         [99] ∈ {0}
+  buf1[0] ∈ {97}
+      [1] ∈ {98}
+      [2] ∈ {0}
+      [3] ∈ {99}
+      [4] ∈ {100}
+      [5..7] ∈ [--..--]
 [eva:final-states] Values at end of function test_strncpy:
   src[0] ∈ {97}
      [1] ∈ {98}
@@ -393,30 +652,33 @@
   src2[0] ∈ {97}
       [1] ∈ {98}
       [2] ∈ UNINITIALIZED
+[eva:final-states] Values at end of function test_strrchr:
+  s1 ∈ {{ "not a palyndrome" }}
+  p ∈ {{ NULL ; "not a palyndrome" + [0..16] }}
 [eva:final-states] Values at end of function test_strstr:
   s ∈ {{ "aba" ; "bab" }}
   needle ∈ {{ "a" ; "b" }}
-  res ∈ {{ "aba" + {0; 1; 2; 3} ; "bab" + {0; 1; 2; 3} }}
+  res ∈ {{ NULL ; "aba" + {0; 1; 2; 3} ; "bab" + {0; 1; 2; 3} }}
 [eva:final-states] Values at end of function test_strtok:
-  __fc_strtok_ptr ∈ {{ "constant!" + [0..--] }}
+  __fc_strtok_ptr ∈ {{ "constant!" + [0..9] }}
   buf[0..1] ∈ [--..--]
   a ∈ {{ NULL ; &buf{[0], [1]} }}
   b ∈ {{ NULL ; &buf{[0], [1]} }}
   buf2[0..3] ∈ [--..--]
   p ∈ {{ NULL ; &buf2{[0], [1], [2], [3]} }}
-  q ∈ {{ NULL ; &buf2 + [0..--] }}
-  r ∈ {0}
+  q ∈ {{ NULL ; &buf2{[0], [1], [2], [3]} }}
+  r ∈ {{ NULL ; "constant!" + [0..9] }}
 [eva:final-states] Values at end of function test_strtok_r:
-  saveptr ∈ {{ "constant!" + [0..--] }}
+  saveptr ∈ {{ "constant!" + [0..9] }}
   buf[0..1] ∈ [--..--]
   a ∈ {{ NULL ; &buf{[0], [1]} }}
   b ∈ {{ NULL ; &buf{[0], [1]} }}
   buf2[0..3] ∈ [--..--]
   p ∈ {{ NULL ; &buf2{[0], [1], [2], [3]} }}
-  q ∈ {{ NULL ; &buf2 + [0..--] }}
-  r ∈ {0}
+  q ∈ {{ NULL ; &buf2{[0], [1], [2], [3]} }}
+  r ∈ {{ NULL ; "constant!" + [0..9] }}
 [eva:final-states] Values at end of function main:
-  __fc_strtok_ptr ∈ {{ "constant!" + [0..--] }}
+  __fc_strtok_ptr ∈ {{ "constant!" + [0..9] }}
   a ∈ [--..--]
   b ∈ [--..--]
   strsig ∈ {{ &__fc_strsignal[0] }}
@@ -428,5 +690,58 @@
   nul2 ∈ {{ "haystack" + [0..8] }}
   pdest[0..8] ∈ [--..--] or UNINITIALIZED
        [9] ∈ UNINITIALIZED
-  pend ∈ {{ &pdest[9] }}
+  pend ∈ {{ &pdest + [--..--] }}
+  rchr ∈ {{ NULL ; "haystack" + [0..8] }}
+  mm_haystack[0] ∈ {73}
+             [1] ∈ {104}
+             [2] ∈ {97}
+             [3] ∈ {118}
+             [4] ∈ {101}
+             [5] ∈ {0}
+             [6] ∈ {122}
+             [7] ∈ {101}
+             [8] ∈ {114}
+             [9] ∈ {111}
+  mm_needle[0] ∈ {122}
+           [1] ∈ {101}
+           [2] ∈ {114}
+           [3] ∈ {111}
+  memm ∈ {{ NULL ; &mm_haystack + [0..9] }}
+  mm_needle2[0] ∈ {48}
+  strsep_buf[0] ∈ [--..--]
+            [1] ∈ {44}
+            [2] ∈ {98}
+            [3..4] ∈ {44}
+            [5..6] ∈ {99}
+            [7] ∈ {0}
+  strsep_p1 ∈ {{ &strsep_buf[0] }}
+  strsep_needle[0] ∈ {44}
+               [1] ∈ {46}
+               [2] ∈ {47}
+               [3] ∈ {0}
+  strsep_p2 ∈ {0}
+  strsep_null ∈ {0}
+  stpncpy_src ∈ {{ "12345678" }}
+  stpncpy_dest[0..4] ∈ [--..--]
+  stpncpy_res ∈ {{ &stpncpy_dest[2] }}
+  stpncpy_src2 ∈ {{ "12" }}
+  strlcat_src ∈ {{ "cat" }}
+  strlcat_buf[0] ∈ [--..--]
+             [1] ∈ {111}
+             [2] ∈ {103}
+             [3..9] ∈ [--..--]
+  strlcat_res ∈ [--..--]
+  strlcat_buf2[0] ∈ {100}
+              [1] ∈ {111}
+              [2] ∈ {103}
+              [3..4] ∈ [--..--]
+              [5] ∈ {116}
+              [6..9] ∈ {0}
+  strlcat_buf3[0] ∈ {100}
+              [1] ∈ {111}
+              [2] ∈ {103}
+              [3..9] ∈ [--..--]
+  strxfrm_src ∈ {{ "harr" }}
+  strxfrm_res ∈ [--..--]
+  strxfrm_dest[0..9] ∈ [--..--] or UNINITIALIZED
   __retres ∈ {0}
diff --git a/tests/libc/oracle/sys_select.res.oracle b/tests/libc/oracle/sys_select.res.oracle
index 15b98d5c57aeee45bf8162ce370897108e020a57..99b776af8457627f82eda3ca5fcd93eb5bdee8b7 100644
--- a/tests/libc/oracle/sys_select.res.oracle
+++ b/tests/libc/oracle/sys_select.res.oracle
@@ -14,7 +14,7 @@
 [eva] Done for function exit
 [eva] sys_select.c:16: Call to builtin memset
 [eva] sys_select.c:16: function memset: precondition 'valid_s' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:134: 
+[eva] FRAMAC_SHARE/libc/string.h:151: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memset
 [eva] computing for function htonl <- main.
   Called from sys_select.c:18.
@@ -56,7 +56,7 @@
   function memcpy: precondition 'valid_src' got status valid.
 [eva] sys_select.c:30: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] computing for function select <- main.
   Called from sys_select.c:31.
diff --git a/tests/libc/oracle/wchar_h.res.oracle b/tests/libc/oracle/wchar_h.res.oracle
index 57c7ffada801b0c69bad2cf9b86f6757a672241e..8abb7517100080b86d59d184223110565f997c34 100644
--- a/tests/libc/oracle/wchar_h.res.oracle
+++ b/tests/libc/oracle/wchar_h.res.oracle
@@ -192,10 +192,24 @@
 [eva] wchar_h.c:71: 
   function wcscasecmp: precondition 'valid_wstring_ws2' got status valid.
 [eva] Done for function wcscasecmp
+[eva] computing for function wcsdup <- main.
+  Called from wchar_h.c:73.
+[eva] using specification for function wcsdup
+[eva:libc:unsupported-spec] wchar_h.c:73: Warning: 
+  The specification of function 'wcsdup' is currently not supported by Eva.
+  Consider adding 'FRAMAC_SHARE/libc/wchar.c' to the analyzed source files.
+[eva] wchar_h.c:73: Warning: ignoring unsupported allocates clause
+[eva] wchar_h.c:73: 
+  function wcsdup: precondition 'valid_wstring' got status valid.
+[eva] Done for function wcsdup
+[eva] wchar_h.c:74: 
+  cannot evaluate ACSL term, unsupported ACSL construct: wide constant strings
+[eva:alarm] wchar_h.c:74: Warning: check got status unknown.
 [eva] Recording results for main
 [eva] Done for function main
 [eva] ====== VALUES COMPUTED ======
 [eva:final-states] Values at end of function main:
+  __fc_heap_status ∈ [--..--]
   fd ∈ {{ NULL ; &__fc_fopen + [0..120],0%8 }}
   buf[0..28] ∈ [--..--] or UNINITIALIZED
      [29] ∈ UNINITIALIZED
@@ -209,4 +223,5 @@
        [10] ∈ {0} or UNINITIALIZED
        [11..19] ∈ [--..--] or UNINITIALIZED
   ir ∈ [--..--] or UNINITIALIZED
+  ws ∈ [--..--] or UNINITIALIZED
   __retres ∈ {0; 1}
diff --git a/tests/libc/pthread_h.c b/tests/libc/pthread_h.c
index 5b875173489763f5c7042f319717774a15c2fd83..e0e2534b30ba6bf0405271d262b9d08773934b9f 100644
--- a/tests/libc/pthread_h.c
+++ b/tests/libc/pthread_h.c
@@ -1,8 +1,5 @@
-/*run.config
-  STDOPT:
-  STDOPT: -cpp-extra-args="-D__FC_PTHREAD_T_IS_SCALAR -DNON_PORTABLE"
-  EXIT: 1
-  STDOPT: -cpp-extra-args="-DNON_PORTABLE"
+/* run.config
+   STDOPT: #"-eva-slevel 4"
  */
 #define _GNU_SOURCE // if you want to compile with GCC
 #include <pthread.h>
@@ -43,13 +40,5 @@ int main() {
     return 1;
   }
   printf("pthread_join succeeded, retval = %d\n", *retv);
-
-  // Test non-portable usage of pthread_t
-#ifdef NON_PORTABLE
-  if (thread == 0) {
-    return 2;
-  }
-#endif
-
   return 0;
 }
diff --git a/tests/libc/setjmp_h.c b/tests/libc/setjmp_h.c
new file mode 100644
index 0000000000000000000000000000000000000000..c3defe30616a8b510cc8ca37199554c4183192ba
--- /dev/null
+++ b/tests/libc/setjmp_h.c
@@ -0,0 +1,33 @@
+/* run.config
+ */
+
+/* NOTE: this header is NOT semantically supported by Frama-C; but to ensure
+   we can at least parse code using it, this test should help avoid
+   regressions.
+*/
+
+#include <setjmp.h>
+
+volatile int nondet;
+extern jmp_buf jbuf;
+
+void jump() {
+  longjmp(jbuf, 1);
+  //@ assert unreachable: \false;
+}
+
+int come_from() {
+  int res1 = setjmp(jbuf);
+  // The code below only works if jmp_buf and sigjmp_buf are the same type;
+  // POSIX does not require it, but glibc/musl do it, so we must ensure
+  // such code will parse.
+  int res2 = sigsetjmp(jbuf, 1);
+  return res1 + res2;
+}
+
+int main() {
+  if (come_from() > 1) {
+    return 0;
+  }
+  jump();
+}
diff --git a/tests/libc/stdio_c.c b/tests/libc/stdio_c.c
index 889fc1f9c1f211cd880e558cd6df4218a29d12ec..c52eb395c76fed115442e625179f9e3154d77f3b 100644
--- a/tests/libc/stdio_c.c
+++ b/tests/libc/stdio_c.c
@@ -2,7 +2,11 @@
 #include <string.h>
 #include "stdio.c"
 #include "__fc_builtin.h"
+
 volatile int nondet;
+
+int caller_stub_for_vscanf(const char * restrict format, ...);
+
 int main() {
   FILE *stream;
   char *line = NULL;
@@ -21,9 +25,8 @@ int main() {
   fclose(stream);
 
   if (nondet) {
-    // Test asprintf without a C stub; the specification
-    // uses an unsupported 'allocates' clause, so 's' will
-    // point to invalid memory.
+    // asprintf's stub calls vasprintf's stub, so this test
+    // also works for vasprintf.
     char *s;
     int r = asprintf(&s, "bla %s", 42);
     if (r == -1) return 1;
@@ -53,5 +56,27 @@ int main() {
     //@ assert at_least_one_char: \initialized(&buf[0]);
   }
 
+  int vscanf_d;
+  char vscanf_c;
+  long double vscanf_Ld;
+  char vscanf_s[30];
+  ptrdiff_t vscanf_t;
+  intmax_t vscanf_j;
+  size_t vscanf_z;
+  int vscanf_res = caller_stub_for_vscanf("%+d %-2c % 41.999Lf %s %ti %jx %zu", &vscanf_d, &vscanf_c, &vscanf_Ld, vscanf_s, &vscanf_t, &vscanf_j, &vscanf_z);
+  if (vscanf_res == 4) {
+    //@ check \initialized(&vscanf_d);
+    //@ check \initialized(&vscanf_s);
+    Frama_C_show_each_must_be_reachable(vscanf_d, &vscanf_c, &vscanf_Ld, vscanf_s, vscanf_t, vscanf_j, vscanf_z);
+  }
+
   return 0;
 }
+
+int caller_stub_for_vscanf(const char * restrict format, ...) {
+  va_list args;
+  va_start(args, format);
+  int res = vscanf(format, args);
+  va_end(args);
+  return res;
+}
diff --git a/tests/libc/stdio_h.c b/tests/libc/stdio_h.c
index 89dd82b01145b08658cb5d77349a9258f8a2b988..d3b7ff77bfa95800504542d701dbf02fac9e9667 100644
--- a/tests/libc/stdio_h.c
+++ b/tests/libc/stdio_h.c
@@ -2,6 +2,9 @@
 #include <stdlib.h>
 #include "__fc_builtin.h"
 volatile int nondet;
+int caller_stub_for_vasprintf(char **strp, const char *fmt, ...);
+int caller_stub_for_vscanf(const char * restrict format, ...);
+
 int main() {
   FILE *f = fopen("/dev/urandom", "r");
   if (!f) return 1;
@@ -48,6 +51,9 @@ int main() {
   int res_fclose = fclose(f);
 
   if (nondet) {
+    // Test asprintf without a C stub; the specification
+    // uses an unsupported 'allocates' clause, so 's' will
+    // point to invalid memory.
     char *s;
     r = asprintf(&s, "bla %s", 42);
     if (r == -1) return 1;
@@ -55,7 +61,42 @@ int main() {
     free(s);
   }
 
+  if (nondet) {
+    // Test vasprintf without a C stub; the specification
+    // uses an unsupported 'allocates' clause, so 's' will
+    // point to invalid memory.
+    char *s;
+    r = caller_stub_for_vasprintf(&s, "bla %s", 42);
+    if (r == -1) return 1;
+    printf("%s", s);
+    free(s);
+  }
+
   fmemopen(0, 1, "w+"); // test to check that Eva emits warning about stdio.c
 
+  char vscanf_s[10];
+  char vscanf_d;
+  r = caller_stub_for_vscanf("%d %s", &vscanf_d, vscanf_s);
+  if (r) {
+    //@ assert \initialized(&vscanf_d);
+    Frama_C_show_each_must_be_reachable(vscanf_d);
+  }
   return 0;
 }
+
+int caller_stub_for_vasprintf(char **strp, const char *fmt, ...) {
+  // Fun fact: the code is the same as asprintf's stub in stdio.c
+  va_list args;
+  va_start(args, fmt);
+  int res = vasprintf(strp, fmt, args);
+  va_end(args);
+  return res;
+}
+
+int caller_stub_for_vscanf(const char * restrict format, ...) {
+  va_list args;
+  va_start(args, format);
+  int res = vscanf(format, args);
+  va_end(args);
+  return res;
+}
diff --git a/tests/libc/stdlib_c_env.c b/tests/libc/stdlib_c_env.c
index 65fc13a16ccf0e741437451791c875091df5638f..12bce8dbf2c29fd748e81b177ccab810367cc25a 100644
--- a/tests/libc/stdlib_c_env.c
+++ b/tests/libc/stdlib_c_env.c
@@ -23,5 +23,9 @@ int main() {
   //@ assert i7 == -1; // contains '='
   int i8 = unsetenv(r2);
   char *r3 = getenv(r2);
+  int i9 = setenv("BLA=", "val", 0);
+  //@ check i9 == -1; // contains '='
+  int i10 = setenv("", "val", 0);
+  //@ check i10 == -1; // empty name
   return 0;
 }
diff --git a/tests/libc/stdlib_h.c b/tests/libc/stdlib_h.c
index 7c9aa731e60f07cd68cfb1872e6fd477f7a0a868..a29dc6257022040de761699297e9eadfd9aa10a3 100644
--- a/tests/libc/stdlib_h.c
+++ b/tests/libc/stdlib_h.c
@@ -12,6 +12,8 @@ int compare_int(const void *a, const void *b) {
   return (*(int*)a < *(int*)b) ? -1 : (*(int*)a > *(int*)b);
 }
 
+char putenv_buf[30] = "PATH3=/:/foo:/bar:";
+
 volatile int nondet;
 int main() {
   int base = nondet ? 0 : nondet ? 2 : 36;
@@ -122,5 +124,26 @@ int main() {
   l = lrand48();
   //@ assert 0 <= l < 2147483648;
 
+  char *path = getenv("PATH");
+  if (path) {
+    //@ check imprecise: valid_read_string(path);
+  }
+  int setenv_res = setenv("PATH2", "/", 0);
+  //@ check setenv_res == -1 || setenv_res == 0;
+  int putenv_res = putenv(putenv_buf);
+
+  div_t div_res;
+  if (nondet) {
+    div_res = div(1, 0);
+    //@ check unreachable: \false;
+  }
+  if (nondet) {
+    div_res = div(INT_MIN, -1);
+    //@ check unreachable: \false;
+  }
+  div_res = div(INT_MAX, -1);
+
+  ldiv_t ldiv_res = ldiv(LONG_MAX, -1);
+  lldiv_t lldiv_res = lldiv(LLONG_MAX, -1);
   return 0;
 }
diff --git a/tests/libc/string_c.c b/tests/libc/string_c.c
index 3fb1d5a8056383639fbbbb61bcb5777f06f8393d..56b7a8ad1332c366ffeb1f1985f38d6234e3c33f 100644
--- a/tests/libc/string_c.c
+++ b/tests/libc/string_c.c
@@ -125,15 +125,14 @@ void test_strcat(void)
   //@assert p == s;
   //@assert s[0] == 'h' && s[4] == 'o' && s[5] == 0;
   s[4] = 0;
-  s[5] = 'h';
-  s[6] = 'e';
   s[7] = 'l';
-  s[8] = 0;
-  strcat(s, s+5);
-  //@assert s[3] == 'l' && s[4] == 'h' && s[6] == 'l' && s[7] == 0;
+  s[8] = 'o';
+  s[9] = 0;
+  strcat(s, s+7);
+  //@assert s[3] == 'l' && s[4] == 'l' && s[5] == 'o' && s[6] == 0;
   strcat(s, "");
   strcat(s, "x");
-  //@assert s[7] == 'x' && s[8] == 0;
+  //@assert s[6] == 'x' && s[7] == 0;
 }
 
 void test_strcpy(void)
diff --git a/tests/libc/string_h.c b/tests/libc/string_h.c
index 1cdf89a28bc5488ca46442dc38b95b78b6843fac..471e6e3a08bb9c801634b24069e24c910663b87a 100644
--- a/tests/libc/string_h.c
+++ b/tests/libc/string_h.c
@@ -3,7 +3,7 @@
 void test_strcmp(void)
 {
   int res = strcmp("hello", "world");
-  //@ assert res == 0;
+  //@ check res == 0;
 }
 
 void test_strcat(void)
@@ -22,7 +22,7 @@ void test_strstr(void)
   char *s = nondet ? "aba" : "bab";
   char *needle = nondet ? "a" : "b";
   char *res = strstr(s, needle);
-  //@ assert res != 0;
+  //@ check res != 0;
 }
 
 void test_strncat(void)
@@ -34,6 +34,16 @@ void test_strncat(void)
   for (int i = 0; i < 99; i++) source[i] = 'Z';
   source[99] = '\0';
   strncat(data, source, 100);
+
+  //     index:    0    1   2   3    4   5   6    7
+  char buf1[] = { 'a', 'b', 0, 'c', 'd', 0, 'f', 'g' };
+  strncat(buf1+3, buf1, 2); // valid: 'ab\0cdab\0'
+
+  if (nondet) {
+    char buf1[] = { 'a', 'b', 0, 'c', 'd', 0, 'f' };
+    strncat(buf1+3, buf1, 2); // invalid: strncat will add a final '\0'
+    //@ assert unreachable: \false;
+  }
 }
 
 struct s {
@@ -60,17 +70,17 @@ void test_strtok() {
   }
   char buf[2] = {0};
   char *a = strtok(buf, " ");
-  //@ assert a == \null || \subset(a, buf+(0..));
+  //@ check a == \null || \subset(a, buf+(0..));
   char *b = strtok(NULL, " ");
-  //@ assert b == \null || \subset(b, buf+(0..));
+  //@ check b == \null || \subset(b, buf+(0..));
   char buf2[4] = "abc";
   char *p = strtok(buf2, "b");
-  //@ assert p == \null || \subset(p, buf2+(0..));
+  //@ check p == \null || \subset(p, buf2+(0..));
   char *q = strtok(NULL, "c");
-  //@ assert q == \null || \subset(p, buf2+(0..));
+  //@ check q == \null || \subset(p, buf2+(0..));
   // test with non-writable string, but delimiter not found
   char *r = strtok((char*)"constant!", "NONE_TO_BE_FOUND");
-  //@ assert r == \null;
+  //@ check r == \null;
   if (nondet) {
     strtok((char*)"constant!", "!");
     //@ assert unreachable_if_precise: \false;
@@ -89,18 +99,18 @@ void test_strtok_r() {
     strtok_r(buf, " ", NULL); // must fail
     //@ assert unreachable: \false;
   }
-  //@ assert a == \null || \subset(a, buf+(0..));
+  //@ check a == \null || \subset(a, buf+(0..));
   char *b = strtok_r(NULL, " ", &saveptr);
   Frama_C_show_each_saveptr(saveptr);
-  //@ assert b == \null || \subset(b, buf+(0..));
+  //@ check b == \null || \subset(b, buf+(0..));
   char buf2[4] = "abc";
   char *p = strtok_r(buf2, "b", &saveptr);
-  //@ assert p == \null || \subset(p, buf2+(0..));
+  //@ check p == \null || \subset(p, buf2+(0..));
   char *q = strtok_r(NULL, "c", &saveptr);
-  //@ assert q == \null || \subset(p, buf2+(0..));
+  //@ check q == \null || \subset(p, buf2+(0..));
   // test with non-writable string, but delimiter not found
   char *r = strtok_r((char*)"constant!", "NONE_TO_BE_FOUND", &saveptr);
-  //@ assert r == \null;
+  //@ check r == \null;
   if (nondet) {
     strtok_r((char*)"constant!", "!", &saveptr);
     //@ assert unreachable_if_precise: \false;
@@ -134,6 +144,14 @@ void test_strlcpy() {
   }
 }
 
+void test_strrchr() {
+  const char *s1 = "not a palyndrome";
+  const char *p = strrchr(s1, 'o');
+  //@ check p == s1 + strlen(s1) - 2;
+  p = strrchr(s1, 'Z');
+  //@ check p == \null;
+}
+
 int main(int argc, char **argv)
 {
   test_strcmp();
@@ -146,18 +164,82 @@ int main(int argc, char **argv)
   char *a = strdup("bla"); // unsound; specification currently unsupported
   char *b = strndup("bla", 2); // unsound; specification currently unsupported
   char *strsig = strsignal(1);
-  //@ assert valid_read_string(strsig);
+  //@ check valid_read_string(strsig);
   test_strncpy();
   test_strlcpy();
+  test_strrchr();
   char *c = "haystack";
   char d = nondet ? 'y' : 'k';
-  char *chr1 = strchr(c, d);
+  char *chr1 = strchr(c, d); //@ check *chr1 == d;
   char *nul1 = strchrnul(c, d);
   d = nondet ? 'a' : 'n';
   char *chr2 = strchr(c, d);
   char *nul2 = strchrnul(c, d);
   char pdest[10];
   char *pend = mempcpy(pdest, "gnu-only function", 9);
-  //@ assert imprecise: pend == pdest + 9 && *pend == '\0';
+  //@ check imprecise: pend == pdest + 9 && *pend == '\0';
+
+  char *rchr = memrchr(c, 'a', strlen(c));
+  //@ check imprecise: rchr == c + strlen("haysta");
+  rchr = memrchr(c, 'n', strlen(c));
+  //@ check imprecise: rchr == \null;
+
+  char mm_haystack[] = { 'I', 'h', 'a', 'v', 'e', '\0', 'z', 'e', 'r', 'o' };
+  char mm_needle[] = { 'z', 'e', 'r', 'o' };
+  char *memm =
+    memmem(mm_haystack, sizeof(mm_haystack), mm_needle, sizeof(mm_needle));
+  //@ check imprecise: memm == mm_haystack + 6;
+  char mm_needle2[] = { '0' };
+  memm =
+    memmem(mm_haystack, sizeof(mm_haystack), mm_needle2, sizeof(mm_needle2));
+  //@ check imprecise: memm == \null;
+
+  char strsep_buf[8] = "a,b,,cc", *strsep_p1 = &strsep_buf[0];
+  char strsep_needle[] = ",./";
+  char *strsep_p2 = strsep(&strsep_p1, strsep_needle);
+  //@ check \base_addr(strsep_p1) == \base_addr(strsep_p2);
+  strsep_p2 = strsep(&strsep_p1, strsep_needle);
+  //@ check \base_addr(strsep_p1) == \base_addr(strsep_p2);
+  char *strsep_null = NULL;
+  strsep_p2 = strsep(&strsep_null, strsep_needle);
+  //@ check strsep_p2 == \null;
+
+  char *stpncpy_src = "12345678";
+  char stpncpy_dest[5];
+  char *stpncpy_res = stpncpy(stpncpy_dest, stpncpy_src, 5);
+  //@ check stpncpy_res == stpncpy_dest + 5;
+  //@ check \forall integer i; 0 <= i < 5 ==> stpncpy_dest[i] != 0;
+  char *stpncpy_src2 = "12";
+  stpncpy_res = stpncpy(stpncpy_dest, stpncpy_src2, 5);
+  //@ check stpncpy_dest[0] == '1' && stpncpy_dest[1] == '1';
+  //@ check stpncpy_dest[2..4] == 0;
+  //@ check stpncpy_res == stpncpy_dest + 2;
+
+  char *strlcat_src = "cat";
+  char strlcat_buf[10] = "dog";
+  size_t strlcat_res = strlcat(strlcat_buf, strlcat_src, 10); // "dogcat"
+  //@ check imprecise: strlcat_res == 6;
+  strlcat_res = strlcat(strlcat_buf, strlcat_buf, 0); // no overlap: n too small
+  char strlcat_buf2[10] = "dogcat";
+  strlcat_buf2[3] = 0; // "dog\0at"
+  if (nondet) {
+    // must fail: overlap between 'future string' "dogat" and source "at"
+    strlcat_res = strlcat(strlcat_buf2, strlcat_buf2 + 4, 10); // overlap
+    //@ assert unreachable: \false;
+  }
+  // no overlap: n too small; no changes to buffer
+  strlcat_res = strlcat(strlcat_buf2, strlcat_buf2 + 4, 4);
+  char strlcat_buf3[10] = "dogcat";
+  strlcat_buf3[3] = 0; // "dog\0at"
+  // no overlap: "dogt\0" and "t"
+  strlcat_res = strlcat(strlcat_buf3, strlcat_buf3 + 5, 10);
+  // check imprecise: strlcat_res == 5;
+
+  char *strxfrm_src = "harr";
+  // dest can be NULL if length is zero
+  size_t strxfrm_res = strxfrm(0, strxfrm_src, 0);
+  char strxfrm_dest[10];
+  strxfrm_res = strxfrm(strxfrm_dest, strxfrm_src, 10);
+
   return 0;
 }
diff --git a/tests/libc/wchar_h.c b/tests/libc/wchar_h.c
index c0780e750592fb13d44b882251214dd8d1a7a096..20c963ecb30d8d627980e7188515bcc730ec4f3f 100644
--- a/tests/libc/wchar_h.c
+++ b/tests/libc/wchar_h.c
@@ -69,5 +69,8 @@ int main() {
 
   int ir = wcscasecmp(L"\0", L"\0");
   ir = wcscasecmp(wsrc, L"\0");
+
+  wchar_t *ws = wcsdup(L"Wide thing"); // imprecise: allocates unsupported
+  //@ check wcslen(ws) == wcslen(L"Wide thing");
   return 0;
 }
diff --git a/tests/metrics/oracle/libc.json b/tests/metrics/oracle/libc.json
index 912a2a97651516f781c7c5ec2cd1328614c060f7..ffe85949926260ec3ba8fc1da99a529b21720cb8 100644
--- a/tests/metrics/oracle/libc.json
+++ b/tests/metrics/oracle/libc.json
@@ -63,6 +63,7 @@
     { "geteuid": { "calls": 0, "address_taken": false } },
     { "getgid": { "calls": 0, "address_taken": false } },
     { "gethostname": { "calls": 0, "address_taken": false } },
+    { "getline": { "calls": 0, "address_taken": false } },
     { "getopt_long": { "calls": 0, "address_taken": false } },
     { "getopt_long_only": { "calls": 0, "address_taken": false } },
     { "getpgid": { "calls": 0, "address_taken": false } },
@@ -129,6 +130,7 @@
     { "ungetc": { "calls": 0, "address_taken": false } },
     { "unlink": { "calls": 0, "address_taken": false } },
     { "usleep": { "calls": 0, "address_taken": false } },
+    { "vasprintf": { "calls": 0, "address_taken": false } },
     { "vfprintf": { "calls": 0, "address_taken": false } },
     { "vfscanf": { "calls": 0, "address_taken": false } },
     { "vprintf": { "calls": 0, "address_taken": false } },
diff --git a/tests/misc/oracle/audit-out.json b/tests/misc/oracle/audit-out.json
index ae58cd00a3b50374e3af74c1d047f56f40b67d21..da80b2ca65374be357e44b1ca62fea739281239a 100644
--- a/tests/misc/oracle/audit-out.json
+++ b/tests/misc/oracle/audit-out.json
@@ -63,7 +63,7 @@
         "parser:conditional-feature", "parser:unnamed-typedef",
         "parser:unsupported", "parser:unsupported:attributes",
         "plugin-not-loaded", "pp", "pp:compilation-db", "pp:line-directive",
-        "typing", "typing:implicit-conv-void-ptr",
+        "too-large-array", "typing", "typing:implicit-conv-void-ptr",
         "typing:implicit-function-declaration",
         "typing:incompatible-pointer-types",
         "typing:incompatible-types-call", "typing:inconsistent-specifier",
diff --git a/tests/misc/oracle/widen_hints_float.res.oracle b/tests/misc/oracle/widen_hints_float.res.oracle
index 33c8638ff516aadecf80d98b897bb2e93a4285a5..f32842ede0057dd78941208b597363a31007bc88 100644
--- a/tests/misc/oracle/widen_hints_float.res.oracle
+++ b/tests/misc/oracle/widen_hints_float.res.oracle
@@ -13,25 +13,19 @@
   Called from widen_hints_float.c:17.
 [eva] using specification for function Frama_C_double_interval
 [eva] widen_hints_float.c:17: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] widen_hints_float.c:17: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] widen_hints_float.c:20: starting to merge loop iterations
 [eva] computing for function Frama_C_double_interval <- parabola <- main.
   Called from widen_hints_float.c:24.
 [eva] widen_hints_float.c:24: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] widen_hints_float.c:24: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] widen_hints_float.c:27: starting to merge loop iterations
 [eva] computing for function Frama_C_double_interval <- parabola <- main.
   Called from widen_hints_float.c:31.
 [eva] widen_hints_float.c:31: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] widen_hints_float.c:31: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] widen_hints_float.c:33: starting to merge loop iterations
 [eva:alarm] widen_hints_float.c:34: Warning: 
@@ -46,9 +40,7 @@
 [eva] computing for function Frama_C_double_interval <- trigo <- main.
   Called from widen_hints_float.c:42.
 [eva] widen_hints_float.c:42: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] widen_hints_float.c:42: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] widen_hints_float.c:42: Call to builtin sin
 [eva] widen_hints_float.c:42: 
@@ -81,9 +73,7 @@
 [eva] computing for function Frama_C_double_interval <- first_order_filter <- main.
   Called from widen_hints_float.c:49.
 [eva] widen_hints_float.c:49: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] widen_hints_float.c:49: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] widen_hints_float.c:48: starting to merge loop iterations
 [eva] computing for function Frama_C_double_interval <- first_order_filter <- main.
@@ -104,9 +94,7 @@
 [eva] computing for function Frama_C_double_interval <- first_order_filter <- main.
   Called from widen_hints_float.c:54.
 [eva] widen_hints_float.c:54: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] widen_hints_float.c:54: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] widen_hints_float.c:53: starting to merge loop iterations
 [eva] computing for function Frama_C_double_interval <- first_order_filter <- main.
diff --git a/tests/pretty_printing/issue-1373-ranges.i b/tests/pretty_printing/issue-1373-ranges.i
new file mode 100644
index 0000000000000000000000000000000000000000..5968215077321150c9835ff8665d85275097d12e
--- /dev/null
+++ b/tests/pretty_printing/issue-1373-ranges.i
@@ -0,0 +1,20 @@
+/* run.config
+   STDOPT:
+*/
+
+struct foo { char bar[4]; };
+
+// Long names to check Format indentation
+int const aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = 0;
+int const bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = 3;
+
+/*@ assigns x->bar[name_range1:(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)]
+      \from x->bar[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa..bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb];
+*/
+int f(struct foo* x);
+
+void main() {
+  int a = 0;
+  //@ assert \subset(a, (0..1));
+  //@ assert \subset(a, (name_range2:(0..2)));
+}
diff --git a/tests/pretty_printing/oracle/issue-1373-ranges.res.oracle b/tests/pretty_printing/oracle/issue-1373-ranges.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..b5403f2183884c6101e576123335f5f26b329855
--- /dev/null
+++ b/tests/pretty_printing/oracle/issue-1373-ranges.res.oracle
@@ -0,0 +1,59 @@
+[kernel] Parsing issue-1373-ranges.i (no preprocessing)
+/* Generated by Frama-C */
+struct foo {
+   char bar[4] ;
+};
+int const aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = 0;
+int const bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = 3;
+/*@ assigns x->bar[name_range1:
+                     (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..
+                      bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)];
+    assigns
+    x->bar[name_range1:
+             (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..
+              bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)]
+      \from x->bar[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..
+                   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb];
+ */
+int f(struct foo *x);
+
+void main(void)
+{
+  int a = 0;
+  /*@ assert \subset(a, (0 .. 1)); */ ;
+  /*@ assert \subset(a, (name_range2: (0 .. 2))); */ ;
+  return;
+}
+
+
+[kernel] Parsing ocode_issue-1373-ranges.c (with preprocessing)
+[kernel] Parsing issue-1373-ranges.i (no preprocessing)
+[kernel] issue-1373-ranges.i:16: Warning: 
+  def'n of func main at issue-1373-ranges.i:16 (sum 2855) conflicts with the one at ocode_issue-1373-ranges.c:19 (sum 4629); keeping the one at ocode_issue-1373-ranges.c:19.
+/* Generated by Frama-C */
+struct foo {
+   char bar[4] ;
+};
+int const aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = 0;
+int const bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = 3;
+/*@ assigns x->bar[name_range1:
+                     (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..
+                      bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)];
+    assigns
+    x->bar[name_range1:
+             (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..
+              bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)]
+      \from x->bar[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ..
+                   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb];
+ */
+int f(struct foo *x);
+
+void main(void)
+{
+  int a = 0;
+  /*@ assert \subset(a, (0 .. 1)); */ ;
+  /*@ assert \subset(a, (name_range2: (0 .. 2))); */ ;
+  return;
+}
+
+
diff --git a/tests/rte/oracle/value_rte.res.oracle b/tests/rte/oracle/value_rte.res.oracle
index 457155617c9ff6cdc993b062dc7668cd2218b4e6..ff65907c9966bee5710af7dda4c74629c56bccfd 100644
--- a/tests/rte/oracle/value_rte.res.oracle
+++ b/tests/rte/oracle/value_rte.res.oracle
@@ -900,6 +900,23 @@
 [  Valid  ] Default behavior
             by Frama-C kernel.
 
+--------------------------------------------------------------------------------
+--- Properties of Function 'getline'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 584)
+            Unverifiable but considered Valid.
+[  Valid  ] Default behavior
+            by Frama-C kernel.
+
 --------------------------------------------------------------------------------
 --- Properties of Function 'fmemopen'
 --------------------------------------------------------------------------------
@@ -908,34 +925,53 @@
             Unverifiable but considered Valid.
 [ Extern  ] Post-condition 'errno_set'
             Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 592)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 593)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 592)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 593)
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 594)
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 595)
             Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
-[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 601) 
+[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 592) 
             Unverifiable but considered Valid.
 
 --------------------------------------------------------------------------------
 --- Properties of Function 'asprintf'
 --------------------------------------------------------------------------------
 
-[ Extern  ] Post-condition 'result_error_or_written_byes'
-            Unverifiable but considered Valid.
-[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 613)
+[ Extern  ] Post-condition 'result_error_or_written_bytes'
             Unverifiable but considered Valid.
-[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 613)
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 614)
             Unverifiable but considered Valid.
 [ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 614)
             Unverifiable but considered Valid.
 [ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 615)
             Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 616)
+            Unverifiable but considered Valid.
+[  Valid  ] Default behavior
+            by Frama-C kernel.
+[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 613) 
+            Unverifiable but considered Valid.
+
+--------------------------------------------------------------------------------
+--- Properties of Function 'vasprintf'
+--------------------------------------------------------------------------------
+
+[ Extern  ] Post-condition 'result_error_or_written_bytes'
+            Unverifiable but considered Valid.
+[ Extern  ] Assigns (file FRAMAC_SHARE/libc/stdio.h, line 627)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 627)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 629)
+            Unverifiable but considered Valid.
+[ Extern  ] Froms (file FRAMAC_SHARE/libc/stdio.h, line 630)
+            Unverifiable but considered Valid.
 [  Valid  ] Default behavior
             by Frama-C kernel.
-[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 618) 
+[ Extern  ] Frees/Allocates nothing/(file FRAMAC_SHARE/libc/stdio.h, line 626) 
             Unverifiable but considered Valid.
 
 --------------------------------------------------------------------------------
@@ -952,8 +988,8 @@
 --------------------------------------------------------------------------------
 --- Status Report Summary
 --------------------------------------------------------------------------------
-    77 Completely validated
-   228 Considered valid
+    79 Completely validated
+   239 Considered valid
      1 To be validated
-   306 Total
+   319 Total
 --------------------------------------------------------------------------------
diff --git a/tests/spec/Extend_preprocess.ml b/tests/spec/Extend_preprocess.ml
index 1d3fb6d9502a66099f3af8b65f0cdc9412788445..d0e24ef0871e79125face9bae322ff3667c47a55 100644
--- a/tests/spec/Extend_preprocess.ml
+++ b/tests/spec/Extend_preprocess.ml
@@ -36,14 +36,14 @@ let preprocess_foo_ptree_element kind = function
 
 let preprocess_foo_ptree kind = List.map (preprocess_foo_ptree_element kind)
 
-let register registration ?visitor ?printer ?short_printer kind =
+let register registration ?visitor ?printer ?short_printer ?is_same_ext kind =
   let registration ?preprocessor typer =
     registration
-      (kind ^ "_foo") ?preprocessor typer ?visitor ?printer ?short_printer false
+      (kind ^ "_foo")
+      ?preprocessor typer ?visitor ?printer ?short_printer ?is_same_ext false
   in
   registration ~preprocessor:(preprocess_foo_ptree kind) (ext_typing kind)
 
-
 let () =
   let open Acsl_extension in
   register (register_behavior ~plugin:"test" ) "bhv";
diff --git a/tests/spec/oracle/clash_double_file_bts1598.res.oracle b/tests/spec/oracle/clash_double_file_bts1598.res.oracle
index 19ba21bf7c8a1977344f466ea3618ae2de4535a1..882966aa87df5308c70e324f5c7c962f57b9c7ac 100644
--- a/tests/spec/oracle/clash_double_file_bts1598.res.oracle
+++ b/tests/spec/oracle/clash_double_file_bts1598.res.oracle
@@ -10,6 +10,7 @@
 #include "setjmp.h"
 #include "signal.h"
 #include "stdarg.h"
+#include "stddef.h"
 #include "stdint.h"
 #include "stdio.h"
 #include "stdlib.h"
@@ -31,6 +32,7 @@
 #include "setjmp.h"
 #include "signal.h"
 #include "stdarg.h"
+#include "stddef.h"
 #include "stdint.h"
 #include "stdio.h"
 #include "stdlib.h"
diff --git a/tests/spec/oracle/type_of_term.res.oracle b/tests/spec/oracle/type_of_term.res.oracle
index 0ca2b607b5bb9d81e67b79bb6743063a2ecaa531..9d000cdef2428a0a4a5fad1c37ec18f074862985 100644
--- a/tests/spec/oracle/type_of_term.res.oracle
+++ b/tests/spec/oracle/type_of_term.res.oracle
@@ -8,12 +8,12 @@
 [type_of_term] Host: p, type is int *
 [type_of_term] Offset: , type is int *
 [type_of_term] Lval: p, type is int *
-[type_of_term] Term: .., type is set<ℤ>
+[type_of_term] Term: (..), type is set<ℤ>
 [type_of_term] Term: t[..], type is set<int>
 [type_of_term] Host: t, type is int [42]
 [type_of_term] Offset: [..], type is set<int>
 [type_of_term] Lval: t[..], type is set<int>
-[type_of_term] Term: .., type is set<ℤ>
+[type_of_term] Term: (..), type is set<ℤ>
 [type_of_term] Term: (s + (..))->x, type is set<int>
 [type_of_term] Host: *(s + (..)), type is set<struct S>
 [type_of_term] Offset: .x, type is set<int>
@@ -23,7 +23,7 @@
 [type_of_term] Host: s, type is struct S *
 [type_of_term] Offset: , type is struct S *
 [type_of_term] Lval: s, type is struct S *
-[type_of_term] Term: .., type is set<ℤ>
+[type_of_term] Term: (..), type is set<ℤ>
 [type_of_term] Term: (s + (..))->y[..], type is set<int>
 [type_of_term] Host: *(s + (..)), type is set<struct S>
 [type_of_term] Offset: .y[..], type is set<int>
@@ -33,8 +33,8 @@
 [type_of_term] Host: s, type is struct S *
 [type_of_term] Offset: , type is struct S *
 [type_of_term] Lval: s, type is struct S *
-[type_of_term] Term: .., type is set<ℤ>
-[type_of_term] Term: .., type is set<ℤ>
+[type_of_term] Term: (..), type is set<ℤ>
+[type_of_term] Term: (..), type is set<ℤ>
 /* Generated by Frama-C */
 struct S {
    int x ;
diff --git a/tests/syntax/ast_diff_1.i b/tests/syntax/ast_diff_1.i
index 7afc3a0e3b37b57df5eb2bfe9d78d281e6e14d44..86b0c7606e68395abec4be4f0e5f217d056450c7 100644
--- a/tests/syntax/ast_diff_1.i
+++ b/tests/syntax/ast_diff_1.i
@@ -1,4 +1,6 @@
 /* run.config
+   COMMENT: we need Eva for the loop unroll ACSL extension
+   PLUGIN: eva
    MODULE: @PTEST_NAME@
      OPT: -then -ast-diff %{dep:ast_diff_2.c}
      OPT: -then -ast-diff %{dep:ast_diff_2.c} -cpp-extra-args="-DADD_ENUM_TAG"
@@ -107,3 +109,13 @@ void se() {
   struct s S;
   S.c[0] = 1;
 }
+
+void with_loop_unroll_same() {
+  //@ loop unroll 5;
+  for (int i = 0; i < 5; i++);
+}
+
+void with_loop_unroll_diff() {
+  //@ loop unroll 4;
+  for (int i = 0; i < 5; i++);
+}
diff --git a/tests/syntax/ast_diff_1.ml b/tests/syntax/ast_diff_1.ml
index 1a85f02e29488f26c4e06a1b0359cbc4a2307f6c..3bab5ff951056eb106b8cb9eec3f9739b8e1baf6 100644
--- a/tests/syntax/ast_diff_1.ml
+++ b/tests/syntax/ast_diff_1.ml
@@ -1,3 +1,5 @@
+open Cil_types
+
 include Plugin.Register(
   struct
     let name = "AST diff test"
@@ -15,13 +17,36 @@ let show_fun kf c =
     Kernel_function.pretty kf
     Ast_diff.Kernel_function.pretty_data c
 
+let cmp_fun kf1 kf2 =
+  Datatype.String.compare
+    (Kernel_function.get_vi kf1).vname (Kernel_function.get_vi kf2).vname
+
+let cmp_var v1 v2 =
+  let res = Datatype.String.compare v1.vname v2.vname in
+  if res <> 0 then res
+  else if v1.vglob && v2.vglob then 0
+  else if v1.vglob then -1
+  else if v2.vglob then 1
+  else if v1.vstorage = Static && v2.vstorage = Static then 0
+  else if v1.vstorage = Static then -1
+  else if v2.vstorage = Static then 1
+  else begin
+    let prj = Ast_diff.Orig_project.get() in
+    let kf1 = Project.on prj Kernel_function.find_defining_kf v1 in
+    let kf2 = Project.on prj Kernel_function.find_defining_kf v2 in
+    if Option.is_none kf1 || Option.is_none kf2 then
+      fatal "Variable %a(%a) is not global but has no associated function"
+        Cil_datatype.Varinfo.pretty v1 Cil_datatype.Location.pretty v1.vdecl;
+    cmp_fun (Option.get kf1) (Option.get kf2)
+  end
+
 let show_correspondances () =
   if Kernel.AstDiff.get () then begin
     result "Showing correspondances between %s and %s"
       (Project.get_name (Ast_diff.Orig_project.get()))
       (Project.get_name (Project.current()));
-    Ast_diff.Varinfo.iter show_var;
-    Ast_diff.Kernel_function.iter show_fun;
+    Ast_diff.Varinfo.iter_sorted ~cmp:cmp_var show_var;
+    Ast_diff.Kernel_function.iter_sorted ~cmp:cmp_fun show_fun;
   end
 
 let () = Boot.Main.extend show_correspondances
diff --git a/tests/syntax/ast_diff_2.c b/tests/syntax/ast_diff_2.c
index c0bd72914c114fde906e283bda7ba599497e621a..f0009e13c1827c06787605dae812ac2ed3d60cd3 100644
--- a/tests/syntax/ast_diff_2.c
+++ b/tests/syntax/ast_diff_2.c
@@ -102,3 +102,13 @@ void se() {
   struct s S;
   S.c[0] = 1;
 }
+
+void with_loop_unroll_same() {
+  //@ loop unroll 5;
+  for (int i = 0; i < 5; i++);
+}
+
+void with_loop_unroll_diff() {
+  //@ loop unroll 5;
+  for (int i = 0; i < 5; i++);
+}
diff --git a/tests/syntax/gnu-asm-aesni.c b/tests/syntax/gnu-asm-aesni.c
index 1e2b0f7f4526aa2e71a85d9f31114959b086f0dc..bf5be7b69c64c05aba22209e7db27c9eafdf92c7 100644
--- a/tests/syntax/gnu-asm-aesni.c
+++ b/tests/syntax/gnu-asm-aesni.c
@@ -11,7 +11,7 @@
    -------------------------
 */
 #ifdef __FRAMAC__
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 #else
 volatile int nondet;
 #define Frama_C_make_unknown(a, n) do {                 \
diff --git a/tests/syntax/issue-641-implicit-calls.c b/tests/syntax/issue-641-implicit-calls.c
new file mode 100644
index 0000000000000000000000000000000000000000..249b7d6e5bc74216556f66bae097ad738bf9884d
--- /dev/null
+++ b/tests/syntax/issue-641-implicit-calls.c
@@ -0,0 +1,38 @@
+/* run.config
+    EXIT: 1
+    STDOPT: #"-cpp-extra-args=-DINCOMP1"
+    STDOPT: #"-cpp-extra-args=-DINCOMP2"
+    STDOPT: #"-cpp-extra-args=-DINCOMP3"
+    STDOPT: #"-cpp-extra-args=-DINCOMP4"
+    STDOPT: #"-cpp-extra-args=-DINCOMP5"
+    STDOPT: #"-cpp-extra-args=-DINCOMP6"
+    STDOPT: #"-cpp-extra-args=-DINCOMP7"
+*/
+
+#ifdef INCOMP1
+    void foo(unsigned x) { bar(bar(0, 12), x); }
+#endif
+
+#ifdef INCOMP2
+    void foo(int x) { bar(bar(0), x); }
+#endif
+
+#ifdef INCOMP3
+    void foo(int x) { bar(bar); }
+#endif
+
+#ifdef INCOMP4
+    void foo(unsigned x) { bar((&bar)(0,12),x); }
+#endif
+
+#ifdef INCOMP5
+    void foo(unsigned x) { bar((&bar)(0),x); }
+#endif
+
+#ifdef INCOMP6
+    void foo(unsigned x) { bar(&bar); }
+#endif
+
+#ifdef INCOMP7
+    void foo(unsigned x) { bar(x,bar(0, 12)); }
+#endif
diff --git a/tests/syntax/oracle/ast_diff_1.0.res.oracle b/tests/syntax/oracle/ast_diff_1.0.res.oracle
index 040eb7eac6a64962c2abd84ec40b54ea065123b1..fbb86f340f5f9bfe962414c2d0da05c5cd549ea2 100644
--- a/tests/syntax/oracle/ast_diff_1.0.res.oracle
+++ b/tests/syntax/oracle/ast_diff_1.0.res.oracle
@@ -1,45 +1,50 @@
 [kernel] Parsing ast_diff_1.i (no preprocessing)
 [kernel] Parsing ast_diff_2.c (with preprocessing)
 [AST diff test] Showing correspondances between orig_default and default
-[AST diff test] Variable i:  => i
-[AST diff test] Variable local_var_use:  => local_var_use
-[AST diff test] Variable v:  => w
-[AST diff test] Variable a:  => q
-[AST diff test] Variable x:  => z
-[AST diff test] Variable y:  => t
-[AST diff test] Variable s:  => s
-[AST diff test] Variable use_s:  => use_s
-[AST diff test] Variable x:  => x
-[AST diff test] Variable with_goto_changed:  => with_goto_changed
+[AST diff test] Variable S:  => S
 [AST diff test] Variable X:  => X
 [AST diff test] Variable Y: N/A
+[AST diff test] Variable __retres:  => __retres
+[AST diff test] Variable a:  => q
 [AST diff test] Variable c:  => c
-[AST diff test] Variable f:  => f
-[AST diff test] Variable with_goto_unchanged:  => with_goto_unchanged
-[AST diff test] Variable x:  => x
 [AST diff test] Variable c:  => c
+[AST diff test] Variable decl:  => decl
+[AST diff test] Variable f:  => f
 [AST diff test] Variable g:  => g
-[AST diff test] Variable se:  => se
-[AST diff test] Variable S:  => S
-[AST diff test] Variable has_static_local_x:  => has_static_local_y
 [AST diff test] Variable h:  => h
-[AST diff test] Variable __retres:  => __retres
+[AST diff test] Variable has_static_local:  => has_static_local
+[AST diff test] Variable has_static_local_x:  => has_static_local_y
+[AST diff test] Variable i:  => i
+[AST diff test] Variable i_0:  => i_0
+[AST diff test] Variable local_var_use:  => local_var_use
+[AST diff test] Variable ptr_func:  => ptr_func
+[AST diff test] Variable s:  => s
+[AST diff test] Variable se:  => se
 [AST diff test] Variable use_logic_builtin:  => use_logic_builtin
+[AST diff test] Variable use_s:  => use_s
+[AST diff test] Variable used_in_decl:  => used_in_decl
+[AST diff test] Variable v:  => w
+[AST diff test] Variable with_goto_changed:  => with_goto_changed
+[AST diff test] Variable with_goto_unchanged:  => with_goto_unchanged
+[AST diff test] Variable with_loop_unroll_diff:  => with_loop_unroll_diff
+[AST diff test] Variable with_loop_unroll_same:  => with_loop_unroll_same
+[AST diff test] Variable x:  => x
+[AST diff test] Variable x:  => z
+[AST diff test] Variable x:  => x
 [AST diff test] Variable x:  => x
+[AST diff test] Variable y:  => t
 [AST diff test] Variable y:  => y
-[AST diff test] Variable has_static_local:  => has_static_local
-[AST diff test] Variable decl:  => decl
-[AST diff test] Variable used_in_decl:  => used_in_decl
-[AST diff test] Variable ptr_func:  => ptr_func
+[AST diff test] Function decl:  => decl
+[AST diff test] Function f:  => f
+[AST diff test] Function g: N/A
+[AST diff test] Function h: -> h (body changed)
+[AST diff test] Function has_static_local:  => has_static_local
 [AST diff test] Function i:  => i
 [AST diff test] Function local_var_use:  => local_var_use
+[AST diff test] Function se:  => se
+[AST diff test] Function use_logic_builtin:  => use_logic_builtin
 [AST diff test] Function use_s:  => use_s
 [AST diff test] Function with_goto_changed: -> with_goto_changed (body changed)
-[AST diff test] Function f:  => f
 [AST diff test] Function with_goto_unchanged:  => with_goto_unchanged
-[AST diff test] Function g: N/A
-[AST diff test] Function se:  => se
-[AST diff test] Function h: -> h (body changed)
-[AST diff test] Function use_logic_builtin:  => use_logic_builtin
-[AST diff test] Function has_static_local:  => has_static_local
-[AST diff test] Function decl:  => decl
+[AST diff test] Function with_loop_unroll_diff: -> with_loop_unroll_diff (body changed)
+[AST diff test] Function with_loop_unroll_same:  => with_loop_unroll_same
diff --git a/tests/syntax/oracle/ast_diff_1.1.res.oracle b/tests/syntax/oracle/ast_diff_1.1.res.oracle
index 1fe85b83738a956efe119cd4c29b473fbeea6ede..30191fcff0a2c7db4e5c570acdb5667a0d137caf 100644
--- a/tests/syntax/oracle/ast_diff_1.1.res.oracle
+++ b/tests/syntax/oracle/ast_diff_1.1.res.oracle
@@ -2,42 +2,47 @@
 [kernel] Parsing ast_diff_2.c (with preprocessing)
 [kernel] Parsing ast_diff_1.i (no preprocessing)
 [AST diff test] Showing correspondances between orig_default and default
-[AST diff test] Variable use_logic_builtin:  => use_logic_builtin
-[AST diff test] Variable x:  => x
-[AST diff test] Variable y:  => y
-[AST diff test] Variable has_static_local:  => has_static_local
+[AST diff test] Variable X:  => X
+[AST diff test] Variable Y: N/A
+[AST diff test] Variable a:  => q
+[AST diff test] Variable c:  => c
+[AST diff test] Variable c:  => c
 [AST diff test] Variable decl:  => decl
-[AST diff test] Variable used_in_decl:  => used_in_decl
-[AST diff test] Variable ptr_func:  => ptr_func
+[AST diff test] Variable f:  => f
+[AST diff test] Variable g:  => g
+[AST diff test] Variable h:  => h
+[AST diff test] Variable has_static_local:  => has_static_local
+[AST diff test] Variable has_static_local_x:  => has_static_local_y
 [AST diff test] Variable i:  => i
+[AST diff test] Variable i_0:  => i_0
 [AST diff test] Variable local_var_use:  => local_var_use
-[AST diff test] Variable v:  => w
-[AST diff test] Variable a:  => q
-[AST diff test] Variable x:  => z
-[AST diff test] Variable y:  => t
+[AST diff test] Variable ptr_func:  => ptr_func
 [AST diff test] Variable s: N/A
+[AST diff test] Variable se:  => se
+[AST diff test] Variable use_logic_builtin:  => use_logic_builtin
 [AST diff test] Variable use_s: N/A
+[AST diff test] Variable used_in_decl:  => used_in_decl
+[AST diff test] Variable v:  => w
 [AST diff test] Variable with_goto_changed:  => with_goto_changed
-[AST diff test] Variable X:  => X
-[AST diff test] Variable Y: N/A
-[AST diff test] Variable c:  => c
-[AST diff test] Variable f:  => f
 [AST diff test] Variable with_goto_unchanged:  => with_goto_unchanged
+[AST diff test] Variable with_loop_unroll_diff:  => with_loop_unroll_diff
+[AST diff test] Variable with_loop_unroll_same:  => with_loop_unroll_same
 [AST diff test] Variable x:  => x
-[AST diff test] Variable c:  => c
-[AST diff test] Variable g:  => g
-[AST diff test] Variable se:  => se
-[AST diff test] Variable has_static_local_x:  => has_static_local_y
-[AST diff test] Variable h:  => h
-[AST diff test] Function use_logic_builtin:  => use_logic_builtin
-[AST diff test] Function has_static_local:  => has_static_local
+[AST diff test] Variable x:  => z
+[AST diff test] Variable x:  => x
+[AST diff test] Variable y:  => t
+[AST diff test] Variable y:  => y
 [AST diff test] Function decl:  => decl
+[AST diff test] Function f:  => f
+[AST diff test] Function g: N/A
+[AST diff test] Function h: -> h (body changed)
+[AST diff test] Function has_static_local:  => has_static_local
 [AST diff test] Function i:  => i
 [AST diff test] Function local_var_use:  => local_var_use
+[AST diff test] Function se: -> se (body changed)
+[AST diff test] Function use_logic_builtin:  => use_logic_builtin
 [AST diff test] Function use_s: N/A
 [AST diff test] Function with_goto_changed: -> with_goto_changed (body changed)
-[AST diff test] Function f:  => f
 [AST diff test] Function with_goto_unchanged:  => with_goto_unchanged
-[AST diff test] Function g: N/A
-[AST diff test] Function se: -> se (body changed)
-[AST diff test] Function h: -> h (body changed)
+[AST diff test] Function with_loop_unroll_diff: -> with_loop_unroll_diff (body changed)
+[AST diff test] Function with_loop_unroll_same:  => with_loop_unroll_same
diff --git a/tests/syntax/oracle/gnu-asm-aesni.res.oracle b/tests/syntax/oracle/gnu-asm-aesni.res.oracle
index 39af3eecb9821373ffafd60a810bac91b22964ea..b376a0b1bd9b560ac50964f905e5ad283eda775a 100644
--- a/tests/syntax/oracle/gnu-asm-aesni.res.oracle
+++ b/tests/syntax/oracle/gnu-asm-aesni.res.oracle
@@ -3,6 +3,8 @@
   Clobber list contains "memory" argument. Assuming no side effects beyond those mentioned in operands.
 /* Generated by Frama-C */
 #include "__fc_builtin.h"
+#include "stddef.h"
+#include "stdint.h"
 #include "string.h"
 #include "strings.h"
 typedef unsigned short byte;
diff --git a/tests/syntax/oracle/issue-641-implicit-calls.0.res.oracle b/tests/syntax/oracle/issue-641-implicit-calls.0.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..28116601a8107c920e70976ed46f9fe7d04075f6
--- /dev/null
+++ b/tests/syntax/oracle/issue-641-implicit-calls.0.res.oracle
@@ -0,0 +1,13 @@
+[kernel] Parsing issue-641-implicit-calls.c (with preprocessing)
+[kernel:typing:implicit-function-declaration] issue-641-implicit-calls.c:13: Warning: 
+  Calling undeclared function bar. Old style K&R code?
+[kernel] issue-641-implicit-calls.c:13: User Error: 
+  nested calls of bar without a prototype and incompatible arguments : different integer types:
+  'int' and 'unsigned int'
+  11    
+  12    #ifdef INCOMP1
+  13        void foo(unsigned x) { bar(bar(0, 12), x); }
+                                   ^^^^^^^^^^^^^^^^^^
+  14    #endif
+  15
+[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/syntax/oracle/issue-641-implicit-calls.1.res.oracle b/tests/syntax/oracle/issue-641-implicit-calls.1.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..7ce2ca01e4d9e2ea98091d7f58c4c9642d44fe74
--- /dev/null
+++ b/tests/syntax/oracle/issue-641-implicit-calls.1.res.oracle
@@ -0,0 +1,12 @@
+[kernel] Parsing issue-641-implicit-calls.c (with preprocessing)
+[kernel:typing:implicit-function-declaration] issue-641-implicit-calls.c:17: Warning: 
+  Calling undeclared function bar. Old style K&R code?
+[kernel] issue-641-implicit-calls.c:17: User Error: 
+  nested calls of bar without a prototype and incompatible arguments : different number of arguments
+  15    
+  16    #ifdef INCOMP2
+  17        void foo(int x) { bar(bar(0), x); }
+                              ^^^^^^^^^^^^^^
+  18    #endif
+  19
+[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/syntax/oracle/issue-641-implicit-calls.2.res.oracle b/tests/syntax/oracle/issue-641-implicit-calls.2.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..486206f9fe499853fe0ddcb288ee9674618d5f6b
--- /dev/null
+++ b/tests/syntax/oracle/issue-641-implicit-calls.2.res.oracle
@@ -0,0 +1,12 @@
+[kernel] Parsing issue-641-implicit-calls.c (with preprocessing)
+[kernel:typing:implicit-function-declaration] issue-641-implicit-calls.c:21: Warning: 
+  Calling undeclared function bar. Old style K&R code?
+[kernel] issue-641-implicit-calls.c:21: User Error: 
+  call to bar with a reference to itself in its own parameters
+  19    
+  20    #ifdef INCOMP3
+  21        void foo(int x) { bar(bar); }
+                              ^^^^^^^^
+  22    #endif
+  23
+[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/syntax/oracle/issue-641-implicit-calls.3.res.oracle b/tests/syntax/oracle/issue-641-implicit-calls.3.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..f5d613b3e47a8cb97bfae987da0135b7e9794842
--- /dev/null
+++ b/tests/syntax/oracle/issue-641-implicit-calls.3.res.oracle
@@ -0,0 +1,16 @@
+[kernel] Parsing issue-641-implicit-calls.c (with preprocessing)
+[kernel:typing:implicit-function-declaration] issue-641-implicit-calls.c:25: Warning: 
+  Calling undeclared function bar. Old style K&R code?
+[kernel:typing:no-proto] issue-641-implicit-calls.c:25: Warning: 
+  Calling function bar that is declared without prototype.
+  Its formals will be inferred from actual arguments
+[kernel] issue-641-implicit-calls.c:25: User Error: 
+  nested calls of bar without a prototype and incompatible arguments : different integer types:
+  'int' and 'unsigned int'
+  23    
+  24    #ifdef INCOMP4
+  25        void foo(unsigned x) { bar((&bar)(0,12),x); }
+                                   ^^^^^^^^^^^^^^^^^^^
+  26    #endif
+  27
+[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/syntax/oracle/issue-641-implicit-calls.4.res.oracle b/tests/syntax/oracle/issue-641-implicit-calls.4.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..adb955475ba6edea8481a2ec2964bd8e88010934
--- /dev/null
+++ b/tests/syntax/oracle/issue-641-implicit-calls.4.res.oracle
@@ -0,0 +1,15 @@
+[kernel] Parsing issue-641-implicit-calls.c (with preprocessing)
+[kernel:typing:implicit-function-declaration] issue-641-implicit-calls.c:29: Warning: 
+  Calling undeclared function bar. Old style K&R code?
+[kernel:typing:no-proto] issue-641-implicit-calls.c:29: Warning: 
+  Calling function bar that is declared without prototype.
+  Its formals will be inferred from actual arguments
+[kernel] issue-641-implicit-calls.c:29: User Error: 
+  nested calls of bar without a prototype and incompatible arguments : different number of arguments
+  27    
+  28    #ifdef INCOMP5
+  29        void foo(unsigned x) { bar((&bar)(0),x); }
+                                   ^^^^^^^^^^^^^^^^
+  30    #endif
+  31
+[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/syntax/oracle/issue-641-implicit-calls.5.res.oracle b/tests/syntax/oracle/issue-641-implicit-calls.5.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..531a565d6024004f1d316350e847ea4b4df996f4
--- /dev/null
+++ b/tests/syntax/oracle/issue-641-implicit-calls.5.res.oracle
@@ -0,0 +1,12 @@
+[kernel] Parsing issue-641-implicit-calls.c (with preprocessing)
+[kernel:typing:implicit-function-declaration] issue-641-implicit-calls.c:33: Warning: 
+  Calling undeclared function bar. Old style K&R code?
+[kernel] issue-641-implicit-calls.c:33: User Error: 
+  call to bar with a reference to itself in its own parameters
+  31    
+  32    #ifdef INCOMP6
+  33        void foo(unsigned x) { bar(&bar); }
+                                   ^^^^^^^^^
+  34    #endif
+  35
+[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/syntax/oracle/issue-641-implicit-calls.6.res.oracle b/tests/syntax/oracle/issue-641-implicit-calls.6.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..b02506e63e5bb2b427a127185ae4ed6e55e1fc1a
--- /dev/null
+++ b/tests/syntax/oracle/issue-641-implicit-calls.6.res.oracle
@@ -0,0 +1,12 @@
+[kernel] Parsing issue-641-implicit-calls.c (with preprocessing)
+[kernel:typing:implicit-function-declaration] issue-641-implicit-calls.c:37: Warning: 
+  Calling undeclared function bar. Old style K&R code?
+[kernel] issue-641-implicit-calls.c:37: User Error: 
+  nested calls of bar without a prototype and incompatible arguments : different integer types:
+  'int' and 'unsigned int'
+  35    
+  36    #ifdef INCOMP7
+  37        void foo(unsigned x) { bar(x,bar(0, 12)); }
+                                   ^^^^^^^^^^^^^^^^^
+  38    #endif
+[kernel] Frama-C aborted: invalid user input.
diff --git a/tests/syntax/oracle/too_large_array.res.oracle b/tests/syntax/oracle/too_large_array.res.oracle
index 1db88ceff98a128c833f34e29b0639593793b8a8..c5df2b706f22b915013c35ed485c5bfbcc44301b 100644
--- a/tests/syntax/oracle/too_large_array.res.oracle
+++ b/tests/syntax/oracle/too_large_array.res.oracle
@@ -1,6 +1,7 @@
 [kernel] Parsing too_large_array.i (no preprocessing)
-[kernel] too_large_array.i:12: User Error: Array length is too large.
+[kernel:too-large-array] too_large_array.i:12: Warning: 
+  Array length is too large.
 [kernel] too_large_array.i:12: Warning: 
   Cannot represent length of array as an attribute
-[kernel] User Error: stopping on file "too_large_array.i" that has errors.
+[kernel] Warning: warning too-large-array treated as deferred error. See above messages for more information.
 [kernel] Frama-C aborted: invalid user input.
diff --git a/tests/syntax/oracle/very_large_integers.1.res.oracle b/tests/syntax/oracle/very_large_integers.1.res.oracle
index 2a1bce76081fd479209be6cb1e51193270f0fce5..4e44ad885e4bd997af03b0e734d21cbbadbc594a 100644
--- a/tests/syntax/oracle/very_large_integers.1.res.oracle
+++ b/tests/syntax/oracle/very_large_integers.1.res.oracle
@@ -1,5 +1,6 @@
 [kernel] Parsing very_large_integers.c (with preprocessing)
-[kernel] very_large_integers.c:41: User Error: Array length is too large.
+[kernel:too-large-array] very_large_integers.c:41: Warning: 
+  Array length is too large.
 [kernel] very_large_integers.c:42: User Error: 
   Cannot represent the integer 99999999999999999999U
 [kernel] very_large_integers.c:42: User Error: 
diff --git a/tests/syntax/oracle/very_large_integers.14.res.oracle b/tests/syntax/oracle/very_large_integers.14.res.oracle
index acee0c62d23cdcd3a31efe64314cb577c50d4c19..66a2c5ad36e0111b7b8f36217dee37aa6418d678 100644
--- a/tests/syntax/oracle/very_large_integers.14.res.oracle
+++ b/tests/syntax/oracle/very_large_integers.14.res.oracle
@@ -4,7 +4,8 @@
 [kernel] very_large_integers.c:87: Warning: 
   ignoring invalid aligned attribute: __aligned__((9223372036854775808)+
                                                    (9223372036854775808) )
-[kernel] very_large_integers.c:107: User Error: Array length is too large.
+[kernel:too-large-array] very_large_integers.c:107: Warning: 
+  Array length is too large.
 [kernel] very_large_integers.c:114: User Error: 
   array length too large: 7205759403792794
   112   // Previously caused Out of memory
diff --git a/tests/syntax/oracle/very_large_integers.4.res.oracle b/tests/syntax/oracle/very_large_integers.4.res.oracle
index f30af367582a82c726be86d33ea3487afffee4a2..3ea7e8c28035e0af5790ae6fb0bd7ebaac144733 100644
--- a/tests/syntax/oracle/very_large_integers.4.res.oracle
+++ b/tests/syntax/oracle/very_large_integers.4.res.oracle
@@ -1,5 +1,6 @@
 [kernel] Parsing very_large_integers.c (with preprocessing)
-[kernel] very_large_integers.c:62: User Error: Array length is too large.
+[kernel:too-large-array] very_large_integers.c:62: Warning: 
+  Array length is too large.
 [kernel] very_large_integers.c:62: User Error: 
   Array length 9999999999999999999U is too big: no explicit initializer allowed.
   60    
diff --git a/tests/value/auto_loop_unroll.c b/tests/value/auto_loop_unroll.c
index 81e4f54353158d275b6387b5a97dd8447577d736..b0166be9300edadb5f633fdffae78fba012a9da1 100644
--- a/tests/value/auto_loop_unroll.c
+++ b/tests/value/auto_loop_unroll.c
@@ -5,7 +5,7 @@
 
 /* Tests the automatic loop unrolling heuristic. */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 
 volatile int undet;
 
diff --git a/tests/value/domains_function.c b/tests/value/domains_function.c
index 7102ea22c396e3eab8ecc61fdf1734ef3ba19fad..114ae28c94ce4c2e17443087fe04e5aa84ab0233 100644
--- a/tests/value/domains_function.c
+++ b/tests/value/domains_function.c
@@ -3,7 +3,7 @@
    STDOPT: #"-eva @EVA_CONFIG@ -main test_successive_runs -eva-domains-function octagon:need_symbolic_locations,symbolic-locations:need_octagon -then -eva-domains-function symbolic-locations:need_symbolic_locations,octagon:need_octagon"
 */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 
 /* Tests the -eva-domains-function option that enables a domain for the given
    functions. This test uses the symbolic locations domain to store the value
diff --git a/tests/value/equality.c b/tests/value/equality.c
index b99293993538efdda60a17d3ec9802622a6f12d2..c32f17115fd9e64019f7aeec6d32482e47c6d859 100644
--- a/tests/value/equality.c
+++ b/tests/value/equality.c
@@ -4,7 +4,7 @@
 
 /* Tests for the equality domain. */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 #include <math.h>
 
 volatile int rand;
diff --git a/tests/value/invalid_pointer.c b/tests/value/invalid_pointer.c
index ba139caabda56485661900e92b37a4fba1f03155..6d6c1885470cefe356a6a8148fc147db0ae3dc73 100644
--- a/tests/value/invalid_pointer.c
+++ b/tests/value/invalid_pointer.c
@@ -3,7 +3,7 @@
   STDOPT: +"-no-warn-invalid-pointer -absolute-valid-range=10-30"
 */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 #include <stdint.h>
 #include <signal.h>
 
diff --git a/tests/value/logic.c b/tests/value/logic.c
index 36cb4c1061f9c54003134771099154a1dbf7b611..d8de93ab774f70888507f918447b42ee953ef630 100644
--- a/tests/value/logic.c
+++ b/tests/value/logic.c
@@ -1,4 +1,4 @@
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 int t[10], u[11];
 struct ts { int f1; int f2; } s1, s2, s3[10];
 unsigned int x; volatile v;
diff --git a/tests/value/multidim-relations.c b/tests/value/multidim-relations.c
index 02aac67c783f64970e206dac8ffb63d3b61c13bd..3d0f661e9cf7e947478a98fcc25a60d5480fd5b0 100644
--- a/tests/value/multidim-relations.c
+++ b/tests/value/multidim-relations.c
@@ -1,7 +1,7 @@
 /* run.config*
    STDOPT: #"-eva-msg-key d-multidim -eva-domains multidim -eva-plevel 1 -eva-multidim-disjunctive-invariants"
 */
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 
 typedef struct {
   char kind;
diff --git a/tests/value/numerors/numerors.c b/tests/value/numerors/numerors.c
index d62d96d1e7f231a38eee40fe6a1061dfabe7013e..89f8b55a56b7de33d40b03693885affb9036548f 100644
--- a/tests/value/numerors/numerors.c
+++ b/tests/value/numerors/numerors.c
@@ -5,7 +5,7 @@
 /* Tests for the numerors domain, that computes absolute and relative errors
    of floating-point computations. */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 #include <math.h>
 
 #define TRUE 1
diff --git a/tests/value/octagons.c b/tests/value/octagons.c
index a9428a90e4e6f4b052e9cde3e4514584a8e6b2f4..4371206cf875b429c8e251928de2da1bc56ae379 100644
--- a/tests/value/octagons.c
+++ b/tests/value/octagons.c
@@ -2,7 +2,7 @@
    STDOPT: +"-deterministic -eva-domains octagon -eva-octagon-through-calls -eva-msg-key=d-octagon,-d-cvalue"
 */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 
 volatile int undet;
 
diff --git a/tests/value/oracle/empty_struct2.res.oracle b/tests/value/oracle/empty_struct2.res.oracle
index cdce1d966fc0b6765aab5589c86e74749cad7965..a2215f48611a46a72f4fd4864db1ff92cc664cd7 100644
--- a/tests/value/oracle/empty_struct2.res.oracle
+++ b/tests/value/oracle/empty_struct2.res.oracle
@@ -15,7 +15,7 @@
   function memcpy: precondition 'valid_src' got status valid.
 [eva] empty_struct2.c:52: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] empty_struct2.c:57: Call to builtin memcpy
 [eva] empty_struct2.c:57: 
diff --git a/tests/value/oracle/empty_union.res.oracle b/tests/value/oracle/empty_union.res.oracle
index 506cb4a62ddbce0ad78bcf556dfa6829daa1fc0f..81933e68034eb72c8d3cee4b04550b832dcbeb8b 100644
--- a/tests/value/oracle/empty_union.res.oracle
+++ b/tests/value/oracle/empty_union.res.oracle
@@ -22,7 +22,7 @@
   function memcpy: precondition 'valid_src' got status valid.
 [eva] empty_union.c:72: 
   function memcpy: precondition 'separation' got status valid.
-[eva] FRAMAC_SHARE/libc/string.h:101: 
+[eva] FRAMAC_SHARE/libc/string.h:118: 
   cannot evaluate ACSL term, unsupported ACSL construct: logic function memcmp
 [eva] empty_union.c:77: Call to builtin memcpy
 [eva] empty_union.c:77: 
diff --git a/tests/value/oracle/equality.res.oracle b/tests/value/oracle/equality.res.oracle
index a581650e2a9b4a68643a2aabc31c2ea26a79bd26..f8517e976f2f7d7959e54502ae43bd7644d4dd18 100644
--- a/tests/value/oracle/equality.res.oracle
+++ b/tests/value/oracle/equality.res.oracle
@@ -26,16 +26,12 @@
   Called from equality.c:52.
 [eva] using specification for function Frama_C_float_interval
 [eva] equality.c:52: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] equality.c:52: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] computing for function Frama_C_float_interval <- symbolic <- main.
   Called from equality.c:53.
 [eva] equality.c:53: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] equality.c:53: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] equality.c:57: Call to builtin sqrtf
 [eva] equality.c:57: function sqrtf: precondition 'finite_arg' got status valid.
diff --git a/tests/value/oracle/for_loops.2.res.oracle b/tests/value/oracle/for_loops.2.res.oracle
index 48442a3db265d996a49a6bd572b4c1d301d4ae5b..dee160a2e94509502fd7b9dd35fd3458a2153489 100644
--- a/tests/value/oracle/for_loops.2.res.oracle
+++ b/tests/value/oracle/for_loops.2.res.oracle
@@ -13,6 +13,7 @@
 [eva] for_loops.c:39: 
   Frama_C_dump_each:
   # cvalue:
+  __fc_heap_status ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
   x ∈ {0}
   j ∈ UNINITIALIZED
@@ -24,6 +25,7 @@
 [eva] for_loops.c:41: 
   Frama_C_dump_each:
   # cvalue:
+  __fc_heap_status ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
   x ∈ {0}
   j ∈ [0..1000]
diff --git a/tests/value/oracle/gauges.res.oracle b/tests/value/oracle/gauges.res.oracle
index d95843418224f140e4cdbaa4cac2e80ba3d80fcc..77cb1d73a4c0194c288f83d91772e9dc4b0d9a06 100644
--- a/tests/value/oracle/gauges.res.oracle
+++ b/tests/value/oracle/gauges.res.oracle
@@ -350,6 +350,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   v ∈ [--..--]
   t[0..4] ∈ {0}
    [5] ∈ [0..48],0%3
@@ -411,6 +412,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   v ∈ [--..--]
   t[0..4] ∈ {0}
    [5] ∈ [0..48],0%3
@@ -471,6 +473,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   v ∈ [--..--]
   t[0..4] ∈ {0}
    [5] ∈ [0..48],0%3
@@ -531,6 +534,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   v ∈ [--..--]
   t[0..4] ∈ {0}
    [5] ∈ [0..48],0%3
@@ -597,6 +601,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   v ∈ [--..--]
   t[0..4] ∈ {0}
    [5] ∈ [0..48],0%3
@@ -659,6 +664,7 @@
   __fc_mblen_state ∈ [--..--]
   __fc_mbtowc_state ∈ [--..--]
   __fc_wctomb_state ∈ [--..--]
+  Frama_C_entropy_source ∈ [--..--]
   v ∈ [--..--]
   t[0..4] ∈ {0}
    [5] ∈ [0..48],0%3
diff --git a/tests/value/oracle/initialized.res.oracle b/tests/value/oracle/initialized.res.oracle
index 6834f774e5734624b7a988ea43353c3c49baf858..36b383499c8174f9e2171064ccf362c7f46e6982 100644
--- a/tests/value/oracle/initialized.res.oracle
+++ b/tests/value/oracle/initialized.res.oracle
@@ -78,6 +78,7 @@
 [eva] initialized.c:63: 
   Frama_C_dump_each:
   # cvalue:
+  __fc_heap_status ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
   b1 ∈ [--..--]
   b2 ∈ [--..--]
@@ -109,6 +110,7 @@
 [eva] initialized.c:68: 
   Frama_C_dump_each:
   # cvalue:
+  __fc_heap_status ∈ [--..--]
   Frama_C_entropy_source ∈ [--..--]
   b1 ∈ [--..--]
   b2 ∈ [--..--]
diff --git a/tests/value/oracle/logic.res.oracle b/tests/value/oracle/logic.res.oracle
index c39c421b1ea9a8f94d4226c8fafd0e3846dece7b..b0a14baac33a998107dcc3a3a2f471f058be4484 100644
--- a/tests/value/oracle/logic.res.oracle
+++ b/tests/value/oracle/logic.res.oracle
@@ -440,9 +440,7 @@
   Called from logic.c:426.
 [eva] using specification for function Frama_C_double_interval
 [eva] logic.c:426: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] logic.c:426: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] computing for function fabs <- float_abs <- main.
   Called from logic.c:427.
@@ -451,9 +449,7 @@
 [eva] computing for function Frama_C_double_interval <- float_abs <- main.
   Called from logic.c:429.
 [eva] logic.c:429: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] logic.c:429: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] computing for function fabs <- float_abs <- main.
   Called from logic.c:430.
@@ -462,9 +458,7 @@
 [eva] computing for function Frama_C_double_interval <- float_abs <- main.
   Called from logic.c:432.
 [eva] logic.c:432: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] logic.c:432: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] computing for function fabs <- float_abs <- main.
   Called from logic.c:433.
@@ -473,9 +467,7 @@
 [eva] computing for function Frama_C_double_interval <- float_abs <- main.
   Called from logic.c:435.
 [eva] logic.c:435: 
-  function Frama_C_double_interval: precondition 'finite' got status valid.
-[eva] logic.c:435: 
-  function Frama_C_double_interval: precondition 'order' got status valid.
+  function Frama_C_double_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_double_interval
 [eva] computing for function fabs <- float_abs <- main.
   Called from logic.c:436.
diff --git a/tests/value/oracle/nonlin.res.oracle b/tests/value/oracle/nonlin.res.oracle
index bbfbde4a81a72bf95b4ea0c74134183e73bf1b08..ea7094541b99d9a1c031590e304585d26a4faf6f 100644
--- a/tests/value/oracle/nonlin.res.oracle
+++ b/tests/value/oracle/nonlin.res.oracle
@@ -33,11 +33,11 @@
 [eva:alarm] nonlin.c:38: Warning: 
   signed overflow.
   assert (int)((int)z + 17817) * (int)((int)z + 17817) ≤ 2147483647;
+[eva:nonlin] nonlin.c:45: non-linear 'i1 * i1', lv 'i1'
 [eva:nonlin] nonlin.c:45: 
   non-linear '(i2 + (long long)3) * (i2 + (long long)3)', lv 'i2'
-[eva:nonlin] nonlin.c:45: non-linear 'i1 * i1', lv 'i1'
-[eva:nonlin] nonlin.c:45: subdividing on i2
 [eva:nonlin] nonlin.c:45: subdividing on i1
+[eva:nonlin] nonlin.c:45: subdividing on i2
 [eva:alarm] nonlin.c:49: Warning: assertion got status unknown.
 [eva:nonlin] nonlin.c:50: non-linear '(int)idx * (int)idx', lv 'idx'
 [eva:nonlin] nonlin.c:50: subdividing on idx
diff --git a/tests/value/oracle/octagons.res.oracle b/tests/value/oracle/octagons.res.oracle
index 47d0cd15db8b4b0ea7ec7dd90c0ea8f55b1005da..4c101ae36a022f921e24cf3e5e2f4c26256a2772 100644
--- a/tests/value/oracle/octagons.res.oracle
+++ b/tests/value/oracle/octagons.res.oracle
@@ -303,9 +303,7 @@
   Called from octagons.c:265.
 [eva] using specification for function Frama_C_float_interval
 [eva] octagons.c:265: 
-  function Frama_C_float_interval: precondition 'finite' got status valid.
-[eva] octagons.c:265: 
-  function Frama_C_float_interval: precondition 'order' got status valid.
+  function Frama_C_float_interval, behavior finite: precondition 'order' got status valid.
 [eva] Done for function Frama_C_float_interval
 [eva] octagons.c:267: starting to merge loop iterations
 [eva] Recording results for arrays
diff --git a/tests/value/oracle/red_alarms.csv b/tests/value/oracle/red_alarms.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9be0520457a4fad73c6d13ce197e9dd075deeb4e
--- /dev/null
+++ b/tests/value/oracle/red_alarms.csv
@@ -0,0 +1,10 @@
+directory	file	line	function	kind	name	#contexts	status	property
+.	red_alarms.i	90	user_assertions	Property	user check	1	Invalid or unreachable	x < 0
+.	red_alarms.i	67	partitioning	Alarm	division_by_zero	1	Unknown	(int)(i - 15) ≢ 0
+.	red_alarms.i	45	partitioning	Alarm	index_bound	1	Invalid or unreachable	i < 32
+.	red_alarms.i	57	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	13	maybe_swap	Alarm	mem_access	1	Unknown	\valid_read(q)
+.	red_alarms.i	12	maybe_swap	Alarm	initialization	2	Unknown	\initialized(p)
+.	red_alarms.i	61	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	10	maybe_swap	Property	user check	1	Unknown	*p ≢ *q
+.	red_alarms.i	70	in_bound	Property	precondition	1	Invalid or unreachable	positive: x ≥ 0
diff --git a/tests/value/oracle/red_alarms.res.oracle b/tests/value/oracle/red_alarms.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..01af779f31d48018f83d623336724334b696bbfd
--- /dev/null
+++ b/tests/value/oracle/red_alarms.res.oracle
@@ -0,0 +1,200 @@
+[kernel] Parsing red_alarms.i (no preprocessing)
+[eva] Analyzing a complete application starting at main
+[eva] Computing initial state
+[eva] Initial state computed
+[eva:initial-state] Values of globals at initialization
+  nondet ∈ [--..--]
+[eva] computing for function callstack <- main.
+  Called from red_alarms.i:96.
+[eva] computing for function maybe_swap <- callstack <- main.
+  Called from red_alarms.i:24.
+[eva] red_alarms.i:9: check got status valid.
+[eva] red_alarms.i:10: check got status valid.
+[eva] Recording results for maybe_swap
+[eva] Done for function maybe_swap
+[eva] computing for function maybe_swap <- callstack <- main.
+  Called from red_alarms.i:25.
+[eva:alarm] red_alarms.i:10: Warning: check got status unknown.
+[eva] Recording results for maybe_swap
+[eva] Done for function maybe_swap
+[eva] computing for function maybe_swap <- callstack <- main.
+  Called from red_alarms.i:26.
+[eva:alarm] red_alarms.i:10: Warning: check got status invalid.
+[eva] Recording results for maybe_swap
+[eva] Done for function maybe_swap
+[eva] computing for function maybe_swap <- callstack <- main.
+  Called from red_alarms.i:27.
+[eva:alarm] red_alarms.i:12: Warning: 
+  accessing uninitialized left-value. assert \initialized(p);
+[eva] Recording results for maybe_swap
+[eva] Done for function maybe_swap
+[eva] computing for function maybe_swap <- callstack <- main.
+  Called from red_alarms.i:28.
+[eva] Recording results for maybe_swap
+[eva] Done for function maybe_swap
+[eva] computing for function maybe_swap <- callstack <- main.
+  Called from red_alarms.i:29.
+[eva:alarm] red_alarms.i:13: Warning: out of bounds read. assert \valid_read(q);
+[eva] Recording results for maybe_swap
+[eva] Done for function maybe_swap
+[eva] computing for function maybe_swap <- callstack <- main.
+  Called from red_alarms.i:32.
+[eva:alarm] red_alarms.i:9: Warning: check got status unknown.
+[eva:alarm] red_alarms.i:12: Warning: out of bounds read. assert \valid_read(p);
+[eva:alarm] red_alarms.i:13: Warning: 
+  accessing uninitialized left-value. assert \initialized(q);
+[eva] Recording results for maybe_swap
+[eva] Done for function maybe_swap
+[eva] Recording results for callstack
+[eva] Done for function callstack
+[eva] computing for function partitioning <- main.
+  Called from red_alarms.i:97.
+[eva:alarm] red_alarms.i:45: Warning: 
+  accessing out of bounds index. assert i < 32;
+[eva] red_alarms.i:47: starting to merge loop iterations
+[eva:alarm] red_alarms.i:48: Warning: out of bounds write. assert \valid(p);
+[eva] red_alarms.i:52: starting to merge loop iterations
+[eva:alarm] red_alarms.i:53: Warning: 
+  accessing out of bounds index. assert i < 32;
+[eva:alarm] red_alarms.i:57: Warning: 
+  accessing out of bounds index. assert i < 32;
+[kernel] red_alarms.i:57: Warning: 
+  all target addresses were invalid. This path is assumed to be dead.
+[eva] red_alarms.i:60: starting to merge loop iterations
+[eva:alarm] red_alarms.i:61: Warning: 
+  accessing out of bounds index. assert i < 32;
+[kernel] red_alarms.i:61: Warning: 
+  all target addresses were invalid. This path is assumed to be dead.
+[eva:alarm] red_alarms.i:64: Warning: 
+  division by zero. assert (int)(i - 5) ≢ 0;
+[eva:alarm] red_alarms.i:65: Warning: 
+  division by zero. assert (int)(i - 10) ≢ 0;
+[eva:alarm] red_alarms.i:67: Warning: 
+  division by zero. assert (int)(i - 15) ≢ 0;
+[eva] Recording results for partitioning
+[eva] Done for function partitioning
+[eva] computing for function preconditions <- main.
+  Called from red_alarms.i:98.
+[eva] computing for function in_bound <- preconditions <- main.
+  Called from red_alarms.i:79.
+[eva] red_alarms.i:79: 
+  function in_bound: precondition 'positive' got status valid.
+[eva] red_alarms.i:79: 
+  function in_bound: precondition 'bounded' got status valid.
+[eva] Recording results for in_bound
+[eva] Done for function in_bound
+[eva] computing for function in_bound <- preconditions <- main.
+  Called from red_alarms.i:80.
+[eva:alarm] red_alarms.i:80: Warning: 
+  function in_bound: precondition 'positive' got status unknown.
+[eva:alarm] red_alarms.i:80: Warning: 
+  function in_bound: precondition 'bounded' got status unknown.
+[eva] Recording results for in_bound
+[eva] Done for function in_bound
+[eva] computing for function in_bound <- preconditions <- main.
+  Called from red_alarms.i:82.
+[eva:alarm] red_alarms.i:82: Warning: 
+  function in_bound: precondition 'positive' got status invalid.
+[eva] red_alarms.i:82: 
+  function in_bound: no state left, precondition 'bounded' got status valid.
+[eva] Recording results for in_bound
+[eva] Done for function in_bound
+[eva] Recording results for preconditions
+[eva] Done for function preconditions
+[eva] computing for function user_assertions <- main.
+  Called from red_alarms.i:99.
+[eva:alarm] red_alarms.i:87: Warning: check 'indeterminate' got status unknown.
+[eva] red_alarms.i:89: check 'true' got status valid.
+[eva:alarm] red_alarms.i:90: Warning: check 'false' got status invalid.
+[eva:alarm] red_alarms.i:92: Warning: check 'maybe' got status unknown.
+[eva] Recording results for user_assertions
+[eva] Done for function user_assertions
+[eva] Recording results for main
+[eva] Done for function main
+[eva] red_alarms.i:45: assertion 'Eva,index_bound' got final status invalid.
+[eva] Listing red statuses in file red_alarms.csv
+[eva] ====== VALUES COMPUTED ======
+[eva:final-states] Values at end of function in_bound:
+  y ∈ [0..99]
+[eva:final-states] Values at end of function maybe_swap:
+  a ∈ {1; 42}
+  b ∈ {42}
+  c ∈ {42}
+[eva:final-states] Values at end of function callstack:
+  a ∈ {1; 42}
+  b ∈ {42}
+  c ∈ {42}
+  p ∈ {{ NULL ; &a ; &uninit }}
+  q ∈ {{ NULL ; &b ; &uninit }}
+[eva:final-states] Values at end of function partitioning:
+  t[0..31] ∈ [0..31]
+  p ∈ {{ &t + [0..128],0%4 }}
+  i ∈ [0..32]
+  r ∈ [-100..100]
+[eva:final-states] Values at end of function preconditions:
+  
+[eva:final-states] Values at end of function user_assertions:
+  x ∈ [--..--]
+[eva:final-states] Values at end of function main:
+  
+[from] Computing for function in_bound
+[from] Done for function in_bound
+[from] Computing for function maybe_swap
+[from] Done for function maybe_swap
+[from] Computing for function callstack
+[from] Done for function callstack
+[from] Computing for function partitioning
+[from] Done for function partitioning
+[from] Computing for function preconditions
+[from] Done for function preconditions
+[from] Computing for function user_assertions
+[from] Done for function user_assertions
+[from] Computing for function main
+[from] Done for function main
+[from] ====== DEPENDENCIES COMPUTED ======
+  These dependencies hold at termination for the executions that terminate:
+[from] Function in_bound:
+  NO EFFECTS
+[from] Function maybe_swap:
+  a FROM nondet; p; q; b; c; uninit (and SELF)
+  b FROM nondet; p; q; a; b; c; uninit (and SELF)
+  c FROM nondet; p; q; a; b; c; uninit (and SELF)
+[from] Function callstack:
+  NO EFFECTS
+[from] Function partitioning:
+  NO EFFECTS
+[from] Function preconditions:
+  NO EFFECTS
+[from] Function user_assertions:
+  NO EFFECTS
+[from] Function main:
+  NO EFFECTS
+[from] ====== END OF DEPENDENCIES ======
+[inout] Out (internal) for function in_bound:
+    y
+[inout] Inputs for function in_bound:
+    \nothing
+[inout] Out (internal) for function maybe_swap:
+    v; a; b; c
+[inout] Inputs for function maybe_swap:
+    nondet; a; b; c; uninit
+[inout] Out (internal) for function callstack:
+    a; b; c; p; tmp; tmp_0; q; tmp_1; tmp_2
+[inout] Inputs for function callstack:
+    nondet
+[inout] Out (internal) for function partitioning:
+    t[0..31]; p; i; r
+[inout] Inputs for function partitioning:
+    nondet
+[inout] Out (internal) for function preconditions:
+    \nothing
+[inout] Inputs for function preconditions:
+    nondet
+[inout] Out (internal) for function user_assertions:
+    x
+[inout] Inputs for function user_assertions:
+    nondet
+[inout] Out (internal) for function main:
+    \nothing
+[inout] Inputs for function main:
+    nondet
diff --git a/tests/value/oracle_apron/for_loops.2.res.oracle b/tests/value/oracle_apron/for_loops.2.res.oracle
index fb7fb2445acb062e4d01ef1a4849b39cbb1067fe..500d30a498a7e434bc5e7b30b493097910c5101d 100644
--- a/tests/value/oracle_apron/for_loops.2.res.oracle
+++ b/tests/value/oracle_apron/for_loops.2.res.oracle
@@ -1,4 +1,4 @@
-37,39c37
+39,41c39
 < [eva:alarm] for_loops.c:42: Warning: 
 <   signed overflow. assert w + T[j] ≤ 2147483647;
 < [eva] for_loops.c:43: Frama_C_show_each: [0..2147483647]
diff --git a/tests/value/oracle_apron/gauges.res.oracle b/tests/value/oracle_apron/gauges.res.oracle
index 269040aa1abf3c62135d5285883779f7cc3cb198..cee2294fb6b3f7c581c4e591260f69b070d40444 100644
--- a/tests/value/oracle_apron/gauges.res.oracle
+++ b/tests/value/oracle_apron/gauges.res.oracle
@@ -50,15 +50,15 @@
 <   Frama_C_show_each: {-593; -592; -591; -590; -589; -588}, [0..2147483647]
 ---
 >   Frama_C_show_each: {-593; -592; -591; -590; -589; -588}, [0..598]
-785c772
+791c778
 <   n ∈ [-2147483648..99]
 ---
 >   n ∈ [-2147483547..99]
-788c775
+794c781
 <   i ∈ [0..2147483647]
 ---
 >   i ∈ [10..2147483647]
-824c811
+830c817
 <   i ∈ [0..2147483647]
 ---
 >   i ∈ [0..21]
diff --git a/tests/value/oracle_apron/octagons.res.oracle b/tests/value/oracle_apron/octagons.res.oracle
index 1c3d249968164cc4519adfbf3661a2bbabe3a944..d71f51af91c0ff5b22c5a835a04b77b0ab73c822 100644
--- a/tests/value/oracle_apron/octagons.res.oracle
+++ b/tests/value/oracle_apron/octagons.res.oracle
@@ -1,4 +1,4 @@
-371,374c371,374
+369,372c369,372
 <   a ∈ [-1024..2147483647]
 <   b ∈ [-1023..2147483647]
 <   c ∈ [-1023..2147483647]
diff --git a/tests/value/oracle_apron/red_alarms.csv b/tests/value/oracle_apron/red_alarms.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9be0520457a4fad73c6d13ce197e9dd075deeb4e
--- /dev/null
+++ b/tests/value/oracle_apron/red_alarms.csv
@@ -0,0 +1,10 @@
+directory	file	line	function	kind	name	#contexts	status	property
+.	red_alarms.i	90	user_assertions	Property	user check	1	Invalid or unreachable	x < 0
+.	red_alarms.i	67	partitioning	Alarm	division_by_zero	1	Unknown	(int)(i - 15) ≢ 0
+.	red_alarms.i	45	partitioning	Alarm	index_bound	1	Invalid or unreachable	i < 32
+.	red_alarms.i	57	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	13	maybe_swap	Alarm	mem_access	1	Unknown	\valid_read(q)
+.	red_alarms.i	12	maybe_swap	Alarm	initialization	2	Unknown	\initialized(p)
+.	red_alarms.i	61	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	10	maybe_swap	Property	user check	1	Unknown	*p ≢ *q
+.	red_alarms.i	70	in_bound	Property	precondition	1	Invalid or unreachable	positive: x ≥ 0
diff --git a/tests/value/oracle_bitwise/red_alarms.csv b/tests/value/oracle_bitwise/red_alarms.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9be0520457a4fad73c6d13ce197e9dd075deeb4e
--- /dev/null
+++ b/tests/value/oracle_bitwise/red_alarms.csv
@@ -0,0 +1,10 @@
+directory	file	line	function	kind	name	#contexts	status	property
+.	red_alarms.i	90	user_assertions	Property	user check	1	Invalid or unreachable	x < 0
+.	red_alarms.i	67	partitioning	Alarm	division_by_zero	1	Unknown	(int)(i - 15) ≢ 0
+.	red_alarms.i	45	partitioning	Alarm	index_bound	1	Invalid or unreachable	i < 32
+.	red_alarms.i	57	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	13	maybe_swap	Alarm	mem_access	1	Unknown	\valid_read(q)
+.	red_alarms.i	12	maybe_swap	Alarm	initialization	2	Unknown	\initialized(p)
+.	red_alarms.i	61	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	10	maybe_swap	Property	user check	1	Unknown	*p ≢ *q
+.	red_alarms.i	70	in_bound	Property	precondition	1	Invalid or unreachable	positive: x ≥ 0
diff --git a/tests/value/oracle_equality/octagons.res.oracle b/tests/value/oracle_equality/octagons.res.oracle
index 3b1ca3ecba8569890b9c9fad8a1d7fe77e4b0226..54c83f9747f9abb7335660dbcd554f7d0bd14cb1 100644
--- a/tests/value/oracle_equality/octagons.res.oracle
+++ b/tests/value/oracle_equality/octagons.res.oracle
@@ -2,7 +2,7 @@
 < [eva] octagons.c:54: Frama_C_show_each_unreduced_char: [-128..127], [-128..127]
 ---
 > [eva] octagons.c:54: Frama_C_show_each_unreduced_char: [-118..114], [6..127]
-358c358
+356c356
 <   ct ∈ [--..--] or UNINITIALIZED
 ---
 >   ct ∈ [6..127] or UNINITIALIZED
diff --git a/tests/value/oracle_equality/red_alarms.csv b/tests/value/oracle_equality/red_alarms.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9be0520457a4fad73c6d13ce197e9dd075deeb4e
--- /dev/null
+++ b/tests/value/oracle_equality/red_alarms.csv
@@ -0,0 +1,10 @@
+directory	file	line	function	kind	name	#contexts	status	property
+.	red_alarms.i	90	user_assertions	Property	user check	1	Invalid or unreachable	x < 0
+.	red_alarms.i	67	partitioning	Alarm	division_by_zero	1	Unknown	(int)(i - 15) ≢ 0
+.	red_alarms.i	45	partitioning	Alarm	index_bound	1	Invalid or unreachable	i < 32
+.	red_alarms.i	57	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	13	maybe_swap	Alarm	mem_access	1	Unknown	\valid_read(q)
+.	red_alarms.i	12	maybe_swap	Alarm	initialization	2	Unknown	\initialized(p)
+.	red_alarms.i	61	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	10	maybe_swap	Property	user check	1	Unknown	*p ≢ *q
+.	red_alarms.i	70	in_bound	Property	precondition	1	Invalid or unreachable	positive: x ≥ 0
diff --git a/tests/value/oracle_gauges/for_loops.2.res.oracle b/tests/value/oracle_gauges/for_loops.2.res.oracle
index fb7fb2445acb062e4d01ef1a4849b39cbb1067fe..500d30a498a7e434bc5e7b30b493097910c5101d 100644
--- a/tests/value/oracle_gauges/for_loops.2.res.oracle
+++ b/tests/value/oracle_gauges/for_loops.2.res.oracle
@@ -1,4 +1,4 @@
-37,39c37
+39,41c39
 < [eva:alarm] for_loops.c:42: Warning: 
 <   signed overflow. assert w + T[j] ≤ 2147483647;
 < [eva] for_loops.c:43: Frama_C_show_each: [0..2147483647]
diff --git a/tests/value/oracle_gauges/gauges.res.oracle b/tests/value/oracle_gauges/gauges.res.oracle
index 0b8798617c76f22cfd19fe7d5427e6a2613da3f0..1a30ffd6c36eeaffe060d094cd3662bc12662f2f 100644
--- a/tests/value/oracle_gauges/gauges.res.oracle
+++ b/tests/value/oracle_gauges/gauges.res.oracle
@@ -97,39 +97,39 @@
 <   Frama_C_show_each: {-593; -592; -591; -590; -589; -588}, [0..2147483647]
 ---
 >   Frama_C_show_each: {-593; -592; -591; -590; -589; -588}, [99..119]
-395a360,363
+396a361,364
 >   # gauges:
 >   V: [{[ p -> {{ &x }}
 >          i -> {1} ]}]
 >   s398: λ(0)
-456a425,428
+458a427,430
 >   # gauges:
 >   V: [{[ i -> {1} ]}]
 >   s398: λ([0 .. 1])
 >         {[ i -> {1} ]}
-516a489,492
+519a492,495
 >   # gauges:
 >   V: [{[ i -> {1} ]}]
 >   s398: λ([0 .. 2])
 >         {[ i -> {1} ]}
-576a553,556
+580a557,560
 >   # gauges:
 >   V: [{[ i -> {1} ]}]
 >   s398: λ([0 .. 10])
 >         {[ i -> {1} ]}
-642a623,627
+647a628,632
 >   # gauges:
 >   V: [{[ p -> {{ &a }}
 >          i -> {2} ]}]
 >   s412: λ(0)
 >   s411: λ(0)
-704a690,694
+710a696,700
 >   # gauges:
 >   V: [{[ i -> {2} ]}]
 >   s412: λ(0)
 >   s411: λ([0 .. 1])
 >         {[ i -> {0} ]}
-706a697,826
+712a703,834
 > [eva] gauges.c:325: 
 >   Frama_C_dump_each:
 >   # cvalue:
@@ -146,6 +146,7 @@
 >   __fc_mblen_state ∈ [--..--]
 >   __fc_mbtowc_state ∈ [--..--]
 >   __fc_wctomb_state ∈ [--..--]
+>   Frama_C_entropy_source ∈ [--..--]
 >   v ∈ [--..--]
 >   t[0..4] ∈ {0}
 >    [5] ∈ [0..48],0%3
@@ -211,6 +212,7 @@
 >   __fc_mblen_state ∈ [--..--]
 >   __fc_mbtowc_state ∈ [--..--]
 >   __fc_wctomb_state ∈ [--..--]
+>   Frama_C_entropy_source ∈ [--..--]
 >   v ∈ [--..--]
 >   t[0..4] ∈ {0}
 >    [5] ∈ [0..48],0%3
@@ -260,51 +262,51 @@
 >   s411: λ([0 .. +oo])
 >         {[ i -> {0} ]}
 >   ==END OF DUMP==
-714a835,836
+720a843,844
 > [eva] gauges.c:343: Call to builtin malloc
 > [eva] gauges.c:343: Call to builtin malloc
-772,773c894,895
+778,779c902,903
 <   A ∈ {{ &A + [0..--],0%4 }}
 <   B ∈ {{ &B + [0..--],0%4 }}
 ---
 >   A ∈ {{ &A + [0..36],0%4 }}
 >   B ∈ {{ &B + [0..36],0%4 }}
-785c907
+791c915
 <   n ∈ [-2147483648..99]
 ---
 >   n ∈ [-2147483547..99]
-791c913
+797c921
 <   i ∈ {45; 46; 47; 48; 49; 50; 51}
 ---
 >   i ∈ {45; 46; 47; 48}
-797c919
+803c927
 <   i ∈ {-59; -58; -57; -56; -55; -54; -53}
 ---
 >   i ∈ {-58; -57; -56; -55; -54; -53}
-817c939
+823c947
 <   p ∈ {{ &u + [0..--],0%4 }}
 ---
 >   p ∈ {{ &u + [0..400],0%4 }}
-819c941
+825c949
 <   k ∈ [0..2147483647]
 ---
 >   k ∈ [0..390]
-824c946
+830c954
 <   i ∈ [0..2147483647]
 ---
 >   i ∈ [0..21]
-835,836c957,959
+841,842c965,967
 <    [1..9] ∈ {4; 5; 6; 7; 8; 9} or UNINITIALIZED
 <   p ∈ {{ &y + [4..40],0%4 }}
 ---
 >    [1..6] ∈ {4; 5; 6; 7; 8; 9} or UNINITIALIZED
 >    [7..9] ∈ UNINITIALIZED
 >   p ∈ {{ &y[7] }}
-847c970
+853c978
 <   p ∈ {{ &T + [--..396],0%4 }}
 ---
 >   p ∈ {{ &T + [-4..396],0%4 }}
-852,856c975
+858,862c983
 <   n ∈ {0}
 <   arr[0] ∈ {0}
 <      [1] ∈ {-1}
@@ -312,19 +314,19 @@
 <   p ∈ {{ &arr + [12..--],0%4 }}
 ---
 >   NON TERMINATING FUNCTION
-959a1079
+965a1087
 > [from] Non-terminating function main8_aux (no dependencies)
-982,983c1102,1103
+988,989c1110,1111
 <   p FROM p; A; B; n; p; A[0..9]; B[0..9] (and SELF)
 <   \result FROM p; A; B; n; p; A[0..9]; B[0..9]
 ---
 >   p FROM p; A; B; n; p; A[0..8]; B[0..8] (and SELF)
 >   \result FROM p; A; B; n; p; A[0..8]; B[0..8]
-1027c1147
+1033c1155
 <   NO EFFECTS
 ---
 >   NON TERMINATING - NO EFFECTS
-1061c1181
+1067c1189
 <     p; A[0..9]; B[0..9]
 ---
 >     p; A[0..8]; B[0..8]
diff --git a/tests/value/oracle_gauges/octagons.res.oracle b/tests/value/oracle_gauges/octagons.res.oracle
index f07f5b7d9bc184727b1db9fd272ec66d12fae701..0789abe608fddb8cdbcbbd076f370c319f45db2c 100644
--- a/tests/value/oracle_gauges/octagons.res.oracle
+++ b/tests/value/oracle_gauges/octagons.res.oracle
@@ -11,7 +11,7 @@
 < [eva] octagons.c:143: Frama_C_show_each_imprecise: [-2147483648..1]
 ---
 > [eva] octagons.c:143: Frama_C_show_each_imprecise: [-2468..1]
-371,374c363,366
+369,372c361,364
 <   a ∈ [-1024..2147483647]
 <   b ∈ [-1023..2147483647]
 <   c ∈ [-1023..2147483647]
@@ -21,7 +21,7 @@
 >   b ∈ [-181..1867]
 >   c ∈ [-602..1446]
 >   d ∈ [-190..1874]
-376c368
+374c366
 <   d2 ∈ [-2147483648..1]
 ---
 >   d2 ∈ [-2468..1]
diff --git a/tests/value/oracle_gauges/red_alarms.csv b/tests/value/oracle_gauges/red_alarms.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9be0520457a4fad73c6d13ce197e9dd075deeb4e
--- /dev/null
+++ b/tests/value/oracle_gauges/red_alarms.csv
@@ -0,0 +1,10 @@
+directory	file	line	function	kind	name	#contexts	status	property
+.	red_alarms.i	90	user_assertions	Property	user check	1	Invalid or unreachable	x < 0
+.	red_alarms.i	67	partitioning	Alarm	division_by_zero	1	Unknown	(int)(i - 15) ≢ 0
+.	red_alarms.i	45	partitioning	Alarm	index_bound	1	Invalid or unreachable	i < 32
+.	red_alarms.i	57	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	13	maybe_swap	Alarm	mem_access	1	Unknown	\valid_read(q)
+.	red_alarms.i	12	maybe_swap	Alarm	initialization	2	Unknown	\initialized(p)
+.	red_alarms.i	61	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	10	maybe_swap	Property	user check	1	Unknown	*p ≢ *q
+.	red_alarms.i	70	in_bound	Property	precondition	1	Invalid or unreachable	positive: x ≥ 0
diff --git a/tests/value/oracle_gauges/red_alarms.res.oracle b/tests/value/oracle_gauges/red_alarms.res.oracle
new file mode 100644
index 0000000000000000000000000000000000000000..0cce8164d8e4ffaa9440cc72b2a78c61003ff4c1
--- /dev/null
+++ b/tests/value/oracle_gauges/red_alarms.res.oracle
@@ -0,0 +1,2 @@
+55d54
+< [eva:alarm] red_alarms.i:48: Warning: out of bounds write. assert \valid(p);
diff --git a/tests/value/oracle_multidim/red_alarms.csv b/tests/value/oracle_multidim/red_alarms.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9be0520457a4fad73c6d13ce197e9dd075deeb4e
--- /dev/null
+++ b/tests/value/oracle_multidim/red_alarms.csv
@@ -0,0 +1,10 @@
+directory	file	line	function	kind	name	#contexts	status	property
+.	red_alarms.i	90	user_assertions	Property	user check	1	Invalid or unreachable	x < 0
+.	red_alarms.i	67	partitioning	Alarm	division_by_zero	1	Unknown	(int)(i - 15) ≢ 0
+.	red_alarms.i	45	partitioning	Alarm	index_bound	1	Invalid or unreachable	i < 32
+.	red_alarms.i	57	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	13	maybe_swap	Alarm	mem_access	1	Unknown	\valid_read(q)
+.	red_alarms.i	12	maybe_swap	Alarm	initialization	2	Unknown	\initialized(p)
+.	red_alarms.i	61	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	10	maybe_swap	Property	user check	1	Unknown	*p ≢ *q
+.	red_alarms.i	70	in_bound	Property	precondition	1	Invalid or unreachable	positive: x ≥ 0
diff --git a/tests/value/oracle_octagon/equality.res.oracle b/tests/value/oracle_octagon/equality.res.oracle
index 24564fbdf1425ff856a02a0ec9fe194fbaa53932..6937d5f393ff899cbc695ba61276e91b7a899374 100644
--- a/tests/value/oracle_octagon/equality.res.oracle
+++ b/tests/value/oracle_octagon/equality.res.oracle
@@ -1,8 +1,8 @@
-60c60
+56c56
 < [eva] equality.c:99: Frama_C_show_each_10_19: [10..42]
 ---
 > [eva] equality.c:99: Frama_C_show_each_10_19: [10..19]
-75,76c75,76
+71,72c71,72
 <   y ∈ [0..42] or UNINITIALIZED
 <   w ∈ [0..42] or UNINITIALIZED
 ---
diff --git a/tests/value/oracle_octagon/gauges.res.oracle b/tests/value/oracle_octagon/gauges.res.oracle
index 70f56d52bf5421e510c5b536b8cd02aecb1f2cbd..09cb6c6c9f27732d3f51b671e2263ae14068f5ad 100644
--- a/tests/value/oracle_octagon/gauges.res.oracle
+++ b/tests/value/oracle_octagon/gauges.res.oracle
@@ -7,11 +7,11 @@
 < [eva] gauges.c:218: Frama_C_show_each:
 < [eva:alarm] gauges.c:220: Warning: 
 <   signed overflow. assert -2147483648 ≤ n - 1;
-774c767
+780c773
 <   numNonZero ∈ [-2147483648..8]
 ---
 >   numNonZero ∈ {-1}
-785c778
+791c784
 <   n ∈ [-2147483648..99]
 ---
 >   n ∈ {-1}
diff --git a/tests/value/oracle_octagon/red_alarms.csv b/tests/value/oracle_octagon/red_alarms.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9be0520457a4fad73c6d13ce197e9dd075deeb4e
--- /dev/null
+++ b/tests/value/oracle_octagon/red_alarms.csv
@@ -0,0 +1,10 @@
+directory	file	line	function	kind	name	#contexts	status	property
+.	red_alarms.i	90	user_assertions	Property	user check	1	Invalid or unreachable	x < 0
+.	red_alarms.i	67	partitioning	Alarm	division_by_zero	1	Unknown	(int)(i - 15) ≢ 0
+.	red_alarms.i	45	partitioning	Alarm	index_bound	1	Invalid or unreachable	i < 32
+.	red_alarms.i	57	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	13	maybe_swap	Alarm	mem_access	1	Unknown	\valid_read(q)
+.	red_alarms.i	12	maybe_swap	Alarm	initialization	2	Unknown	\initialized(p)
+.	red_alarms.i	61	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	10	maybe_swap	Property	user check	1	Unknown	*p ≢ *q
+.	red_alarms.i	70	in_bound	Property	precondition	1	Invalid or unreachable	positive: x ≥ 0
diff --git a/tests/value/oracle_symblocs/equality.res.oracle b/tests/value/oracle_symblocs/equality.res.oracle
index 88c68949a08259045c8739cc863aeda42c44d155..392e4201ed4eee2a6e8c18ffa0e37716ac1f8190 100644
--- a/tests/value/oracle_symblocs/equality.res.oracle
+++ b/tests/value/oracle_symblocs/equality.res.oracle
@@ -1,14 +1,14 @@
-42,43c42,43
+38,39c38,39
 < [eva:alarm] equality.c:57: Warning: 
 <   function sqrtf: precondition 'arg_positive' got status unknown.
 ---
 > [eva] equality.c:57: 
 >   function sqrtf: precondition 'arg_positive' got status valid.
-60c60
+56c56
 < [eva] equality.c:99: Frama_C_show_each_10_19: [10..42]
 ---
 > [eva] equality.c:99: Frama_C_show_each_10_19: [10..19]
-87c87
+83c83
 <   res ∈ [-0. .. 3.16227769852] or UNINITIALIZED
 ---
 >   res ∈ [3.74339206651e-23 .. 3.16227769852] or UNINITIALIZED
diff --git a/tests/value/oracle_symblocs/red_alarms.csv b/tests/value/oracle_symblocs/red_alarms.csv
new file mode 100644
index 0000000000000000000000000000000000000000..9be0520457a4fad73c6d13ce197e9dd075deeb4e
--- /dev/null
+++ b/tests/value/oracle_symblocs/red_alarms.csv
@@ -0,0 +1,10 @@
+directory	file	line	function	kind	name	#contexts	status	property
+.	red_alarms.i	90	user_assertions	Property	user check	1	Invalid or unreachable	x < 0
+.	red_alarms.i	67	partitioning	Alarm	division_by_zero	1	Unknown	(int)(i - 15) ≢ 0
+.	red_alarms.i	45	partitioning	Alarm	index_bound	1	Invalid or unreachable	i < 32
+.	red_alarms.i	57	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	13	maybe_swap	Alarm	mem_access	1	Unknown	\valid_read(q)
+.	red_alarms.i	12	maybe_swap	Alarm	initialization	2	Unknown	\initialized(p)
+.	red_alarms.i	61	partitioning	Alarm	index_bound	1	Unknown	i < 32
+.	red_alarms.i	10	maybe_swap	Property	user check	1	Unknown	*p ≢ *q
+.	red_alarms.i	70	in_bound	Property	precondition	1	Invalid or unreachable	positive: x ≥ 0
diff --git a/tests/value/recursion.c b/tests/value/recursion.c
index 3407462e9b2033ee11f224b4072bdec7e563c9a4..74a8f7d1dfb173b1930f19dca094b15c66e1679a 100644
--- a/tests/value/recursion.c
+++ b/tests/value/recursion.c
@@ -8,7 +8,7 @@
    STDOPT: +"-eva-no-show-progress -eva-unroll-recursive-calls 5 -main main_fail"
 */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 
 volatile int nondet;
 
diff --git a/tests/value/red_alarms.i b/tests/value/red_alarms.i
new file mode 100644
index 0000000000000000000000000000000000000000..021f9851d841c51fd813cdf2d187f6d935ddfdb5
--- /dev/null
+++ b/tests/value/red_alarms.i
@@ -0,0 +1,100 @@
+/* run.config*
+   LOG: @PTEST_NAME@.csv
+   STDOPT: +"-eva-report-red-statuses ./@PTEST_NAME@.csv"
+*/
+
+volatile int nondet;
+
+void maybe_swap (int *p, int *q) {
+  //@ check p != q;
+  //@ check *p != *q;
+  if (nondet) {
+    int v = *p;
+    *p = *q;
+    *q = *p;
+  }
+}
+
+/* Red statuses depending on call contexts. */
+void callstack (void) {
+  int a = 1;
+  int b = 42;
+  int c = 42;
+  int uninit;
+  maybe_swap(&a, &b);
+  maybe_swap(&a, &b);
+  maybe_swap(&b, &c); // In [swap], the second assertion should be red.
+  maybe_swap(&uninit, &a); // In [swap], alarm \initialized(*p) should be red.
+  maybe_swap(&uninit, &b);
+  maybe_swap(&a, 0); // In [swap], alarm \valid_read(q) should be red.
+  int *p = nondet ? &a : (nondet ? &uninit : 0);
+  int *q = nondet ? &b : (nondet ? &uninit : 0);
+  maybe_swap(p, q); // This should not create other red alarms.
+}
+
+/* Red statuses depending on partitioning. */
+void partitioning (void) {
+  int t[32];
+  int *p = &t[0];
+  int i, r;
+  //@ loop unroll 32;
+  for (i = 0; i < 32; i++) {
+    t[i] = i; // No alarm.
+  }
+  if (nondet)
+    r = t[i]; // Invalid alarm: red status.
+  p = &t[0];
+  for (i = 0; i < 32; i++) {
+    *p = i; // False alarm — so no red status.
+    p++;
+  }
+  //@ loop unroll 0;
+  for (i = 0; i <= 32 && nondet; i++) {
+    t[i] = i; // True alarm, but no red status without partitioning.
+  }
+  //@ loop unroll 32;
+  for (i = 0; i <= 32 && nondet; i++) {
+    t[i] = i; // Alarm with a red status thanks to the loop unrolling.
+  }
+  //@ dynamic_split i == 32;
+  for (i = 0; i <= 32 && nondet; i++) {
+    t[i] = i; // Alarm with a red status thanks to the dynamic split.
+  }
+  if (i != 5)
+    r = 100 / (i - 5); // False alarm — so no red status.
+  r = 100 / (i - 10); // True alarm with no red status.
+  //@ split i;
+  r = 100 / (i - 15); // Alarm with red status thanks to the split.
+}
+
+/*@ requires positive: x >= 0;
+    requires bounded: x < 100;
+    assigns \nothing; */
+void in_bound (int x) {
+  int y = x;
+  return;
+}
+
+void preconditions (void) {
+  in_bound(42);
+  in_bound(nondet);
+  if (nondet)
+    in_bound(-1); // First precondition has red status.
+}
+
+void user_assertions (void) {
+  int x;
+  //@ check indeterminate: x > 0;
+  x = 1;
+  //@ check true: x > 0;
+  //@ check false: x < 0;
+  x = nondet;
+  //@ check maybe: x > 0;
+}
+
+void main (void) {
+  callstack();
+  partitioning();
+  preconditions();
+  user_assertions();
+}
diff --git a/tests/value/shift_neg.c b/tests/value/shift_neg.c
index 520678af7f33ee4fbfc2329b49a0b3e9e0dab134..102696692b6b657781ef5206a3354d203c8082f7 100644
--- a/tests/value/shift_neg.c
+++ b/tests/value/shift_neg.c
@@ -6,7 +6,7 @@
 /* The first run emits alarms on left shifts on negative values;
    the second run emits alarms on right shifts on negative values. */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 
 volatile int rand;
 
diff --git a/tests/value/taint.c b/tests/value/taint.c
index 81d2c2bb67b264e0350ca63e6c3efc877a3336fc..c47c43d9b93c94ea3cdba2bbfd003fa6bd52112c 100644
--- a/tests/value/taint.c
+++ b/tests/value/taint.c
@@ -2,7 +2,7 @@
    STDOPT: +" -eva-domains taint -eva-msg-key=d-taint,-d-cvalue -eva-auto-loop-unroll 10"
 */
 
-#include <__fc_builtin.h>
+#include "__fc_builtin.h"
 
 volatile int undet;
 int tainted;
diff --git a/tools/dune b/tools/dune
index 67f188f0caf13d029cd12e3c921c29aa50622bab..6ebbb1485b9d2c8c4b369ea02a2b6184736f36fd 100644
--- a/tools/dune
+++ b/tools/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/tools/hdrck/Makefile b/tools/hdrck/Makefile
index 172cec81eadc93aaed47d14d3e1d25bada6a30fe..6950b725c45d08e533b4ea5009ebc1778410531a 100644
--- a/tools/hdrck/Makefile
+++ b/tools/hdrck/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/tools/hdrck/dune b/tools/hdrck/dune
index d57b034239c9734e0d198f75235d22d18f152070..51a7e4cd06504ab9581b20adc1f6c2f9e2d4d71c 100644
--- a/tools/hdrck/dune
+++ b/tools/hdrck/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/tools/hdrck/dune-project b/tools/hdrck/dune-project
index 2ebe0f9433f2bd86d6c4be4bd40b291c76adc51f..4b4644e72669c5ab02ef35b652161e0a7a3032cc 100644
--- a/tools/hdrck/dune-project
+++ b/tools/hdrck/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/tools/hdrck/frama-c-hdrck.opam b/tools/hdrck/frama-c-hdrck.opam
index 019afc381da04856c7be0502bda0b5bdbafd86f4..9ac4b153329252440f5f2bb8a33cd2073d061790 100644
--- a/tools/hdrck/frama-c-hdrck.opam
+++ b/tools/hdrck/frama-c-hdrck.opam
@@ -1,7 +1,7 @@
 opam-version: "2.0"
 name: "frama-c-hdrck"
 synopsis: "Frama-C header check tool"
-version: "28.1"
+version: "29.0+dev"
 description:"""
 Performs all checks related to file headers as required by the Frama-C
 continuous integration.
diff --git a/tools/hdrck/hdrck.ml b/tools/hdrck/hdrck.ml
index 3a093fa251800ff103c60ae1cdebfc0558890815..06877ee3c01483496cc12fe7060ad7839c995ba6 100644
--- a/tools/hdrck/hdrck.ml
+++ b/tools/hdrck/hdrck.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
@@ -422,7 +422,7 @@ let check_spec_discrepancies
     (specs: (string, string) Hashtbl.t)
     (headers: (string, string) Hashtbl.t) : unit =
   let eq_header orig_file template_hdr =
-    let cmd = Format.sprintf "headache -c %s -e %s | diff --strip-trailing-cr -q - %s > /dev/null"
+    let cmd = Format.sprintf "headache -c %s -e %s | diff -b -B -q - %s > /dev/null"
         config_file_opts orig_file template_hdr
     in
     let ret = Sys.command cmd in
diff --git a/tools/lint/Makefile b/tools/lint/Makefile
index be31b37197220675fcd188c6e4bd7cb2b70c2bb2..54783d003f9aaa16b0b50e2b2f5153a0f6370b87 100644
--- a/tools/lint/Makefile
+++ b/tools/lint/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/tools/lint/UTF8.ml b/tools/lint/UTF8.ml
index 92ec9c556fcf671e5c875429e3bbf413d6a6df4d..b91a0b05b2ca982adc67a94b3bb60b29d4d19e87 100644
--- a/tools/lint/UTF8.ml
+++ b/tools/lint/UTF8.ml
@@ -38,6 +38,7 @@
 (*                                                                         *)
 (*  File modified by CEA (Commissariat à l'énergie atomique et aux         *)
 (*                        énergies alternatives).                          *)
+(*                                                                         *)
 (***************************************************************************)
 
 (* Function extracted from Camomile library and modified by CEA to get the
diff --git a/tools/lint/UTF8.mli b/tools/lint/UTF8.mli
index a49cbd6166dc20c2a9bdadc1364e7658117a8041..a131de8106063bd59256ef2bc1d2e219baf50dba 100644
--- a/tools/lint/UTF8.mli
+++ b/tools/lint/UTF8.mli
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/tools/lint/dune b/tools/lint/dune
index 8e5852b25acd82545c769b2ffdce491b7f82e9c2..847faf8e8016741d338bf6f66315d7e7b04d33f1 100644
--- a/tools/lint/dune
+++ b/tools/lint/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/tools/lint/dune-project b/tools/lint/dune-project
index ac559732c13d511531406d19c2fd1c67261ef1d7..519217b0cbf1305c51d92cbfa955918dec3e47d1 100644
--- a/tools/lint/dune-project
+++ b/tools/lint/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/tools/lint/frama-c-lint.opam b/tools/lint/frama-c-lint.opam
index cd26b633ec0524104b67329f536e448bd87f661c..53ae18b3a27cc0de7b931a9f5ca9d2ea0282c725 100644
--- a/tools/lint/frama-c-lint.opam
+++ b/tools/lint/frama-c-lint.opam
@@ -1,7 +1,7 @@
 opam-version: "2.0"
 name: "frama-c-lint"
 synopsis: "Frama-C lint tool"
-version: "28.1"
+version: "29.0+dev"
 description:"""
 Performs all checks related to source code formatting as required by the Frama-C
 continuous integration. Namely: OCP-indent for ML files, clang-format for E-ACSL
diff --git a/tools/lint/lint.ml b/tools/lint/lint.ml
index cf0d18e5970e345f652c0aa4b13ec99c34e39f50..80de79e8b2da49df1ed88ab92561c01acbdbb642 100644
--- a/tools/lint/lint.ml
+++ b/tools/lint/lint.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/tools/ptests/Makefile b/tools/ptests/Makefile
index de9fc66fdbef6c063cee1d551683a65e754024f7..3215b70380f995d989f25b974181e505e7281a56 100644
--- a/tools/ptests/Makefile
+++ b/tools/ptests/Makefile
@@ -2,7 +2,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/tools/ptests/check_oracles.sh b/tools/ptests/check_oracles.sh
index b381a68c9fe1a8c88e84a7868cc14d09e7ab010a..aed2778fb7807e2fb944f6d46c7b615798230953 100755
--- a/tools/ptests/check_oracles.sh
+++ b/tools/ptests/check_oracles.sh
@@ -3,7 +3,7 @@
 #                                                                        #
 #  This file is part of Frama-C.                                         #
 #                                                                        #
-#  Copyright (C) 2007-2023                                               #
+#  Copyright (C) 2007-2024                                               #
 #    CEA (Commissariat à l'énergie atomique et aux énergies              #
 #         alternatives)                                                  #
 #                                                                        #
diff --git a/tools/ptests/dune b/tools/ptests/dune
index d88d57d8dd29b56e5e3a396eaf7e1a05faa8bd2d..e01c9af6ac50c8f12956713b20de8599edc40724 100644
--- a/tools/ptests/dune
+++ b/tools/ptests/dune
@@ -2,7 +2,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/tools/ptests/dune-project b/tools/ptests/dune-project
index d174389660e2d001566613f1a2d3f42f5e225a2c..a4073e6be5815b053e5404e8a18fede028b76c0c 100644
--- a/tools/ptests/dune-project
+++ b/tools/ptests/dune-project
@@ -3,7 +3,7 @@
 ;;                                                                        ;;
 ;;  This file is part of Frama-C.                                         ;;
 ;;                                                                        ;;
-;;  Copyright (C) 2007-2023                                               ;;
+;;  Copyright (C) 2007-2024                                               ;;
 ;;    CEA (Commissariat à l'énergie atomique et aux énergies              ;;
 ;;         alternatives)                                                  ;;
 ;;                                                                        ;;
diff --git a/tools/ptests/ptests.ml b/tools/ptests/ptests.ml
index 09da1de670727ed031afbcc89632eeb14909e42a..bb2b9c08726af3bf034be32066ed7a276101c9b7 100644
--- a/tools/ptests/ptests.ml
+++ b/tools/ptests/ptests.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)
diff --git a/tools/ptests/wtests.ml b/tools/ptests/wtests.ml
index 6c68edae0becccf09ef34ad4a4bcba4f69a66901..179065e155a306bd3124a876dd4b1cc5e3c7f314 100644
--- a/tools/ptests/wtests.ml
+++ b/tools/ptests/wtests.ml
@@ -2,7 +2,7 @@
 (*                                                                        *)
 (*  This file is part of Frama-C.                                         *)
 (*                                                                        *)
-(*  Copyright (C) 2007-2023                                               *)
+(*  Copyright (C) 2007-2024                                               *)
 (*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
 (*         alternatives)                                                  *)
 (*                                                                        *)