Commit d95a4b35 authored by Loïc Correnson's avatar Loïc Correnson

[qed] merge typecheck in conditionals

parent a35d2118

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.
This diff is collapsed.
This file activates the compilation of Frama-C in developer mode
- enable warnings and warn-error
- create .merlin file
- create links in ./share to plugin share directory for
the bin/frama-c* script
Changelog merge=union
*.pdf binary
###########
# General #
###########
TAGS
*.cm*
*.o
*.a
*.annot
#ocamlyacc -v
*.output
*~
*_DEP
*.depend
\#*
.\#*
.DS_Store
*.tmp
*.s
#artifacts from execution
frama_c_journal.ml
/.frama-c/
/frama-c-*.tar.gz
/.merlin
/headers/hdrck
#build
configure
autom4te.cache
.log.autoconf
/.depend
/config.log
/config.status
/frama-c-*.tar.gz
/.log.autoconf
/.Makefile.user
/ocamlgraph/
*.check_mli_exists
.Makefile.plugin.generated
#tests
/tests/ptests_config
/tests/*/result/
/tests/*/*/result/
/tests/*/result_*/
/tests/journal/intra.byte
/tests/misc/my_visitor_plugin/my_visitor.opt
/tests/misc/my_visitor.sav
/tests/*/*.opt
/tests/pdg/*.dot
/tests/crowbar/output-*
/tests/crowbar/mutable
/devel_tools/fc-time
/devel_tools/fc-memuse
/bin/ocamldep_transitive_closure
#share
/share/Makefile.config
/share/Makefile.dynamic_config
/share/Makefile.kernel
/share/frama-c.rc
#created by create_share_link target
/share/.gitignore
/share/manuals/
#doc
/doc/manuals/
/doc/*/*.dot
/doc/*/*.aux
/doc/*/*.bbl
/doc/*/*.blg
/doc/*/*.cb*
/doc/*/*.ilg
/doc/*/*.ind
/doc/*/*.toc
/doc/*/*.lof
/doc/*/*.log
/doc/*/*.out
/doc/*/*.idx
/doc/*/*.fls
/doc/*/*.fdb_latexmk
/doc/*/*.synctex.gz
/doc/acsl/
/doc/aorai/frama-c-aorai-example.tgz
/doc/aorai/frama-c-aorai-example
/doc/aorai/main.pdf
/doc/aorai/basic_ya.tex
/doc/aorai/extended_ya.tex
/doc/code/print_api/*.html
/doc/code/print_api/*.dot
/doc/code/print_api/lexer.ml
/doc/code/print_api/grammar.mli
/doc/code/print_api/grammar.ml
/doc/code/print_api/dynamic_plugins.mli
/doc/code/print_api/_build/
/doc/code/studia
/doc/code/qed
/doc/code/wp
/doc/pdg/call-f.eps
/doc/pdg/call-f.fig
/doc/pdg/call-f.pdf
/doc/pdg/call-g.eps
/doc/pdg/call-g.fig
/doc/pdg/call-g.pdf
/doc/pdg/compil.ok
/doc/pdg/contents_motif.gif
/doc/pdg/ctrl-dpds.eps
/doc/pdg/ctrl-dpds.pdf
/doc/pdg/ex-goto.eps
/doc/pdg/ex-goto.pdf
/doc/pdg/exple-call.c
/doc/pdg/goto.eps
/doc/pdg/goto.pdf
/doc/pdg/index.html
/doc/pdg/logo-inria-sophia.eps
/doc/pdg/logo-inria-sophia.pdf
/doc/pdg/next_motif.gif
/doc/pdg/pdg-call.eps
/doc/pdg/pdg-call.pdf
/doc/pdg/pdg.css
/doc/pdg/pdg.dvi
/doc/pdg/pdg.haux
/doc/pdg/pdg.hind
/doc/pdg/pdg.html
/doc/pdg/pdg.htoc
/doc/pdg/pdg.image.tex
/doc/pdg/pdg.ps
/doc/pdg/pdg0*.html
/doc/pdg/pdg00*.png
/doc/pdg/previous_motif.gif
#lib
/lib/fc/
/lib/plugins/*.mli
/lib/plugins/*.ml
/lib/plugins/top/
/lib/plugins/gui/
/lib/plugins/top/
/lib/plugins/META.frama-c-*
/lib/plugins/.placeholders_ready
#plugins
/share/e-acsl/
/share/c2fc/
/src/plugins/*/configure
/src/plugins/*/.depend
/src/plugins/*/autom4te.cache/
/src/plugins/*/Makefile.plugin.generated
/src/plugins/*/doc/*/*.dot
/src/plugins/*/doc/*/*.aux
/src/plugins/*/doc/*/*.bbl
/src/plugins/*/doc/*/*.blg
/src/plugins/*/doc/*/*.cb*
/src/plugins/*/doc/*/*.ilg
/src/plugins/*/doc/*/*.ind
/src/plugins/*/doc/*/*.toc
/src/plugins/*/doc/*/*.lof
/src/plugins/*/doc/*/*.log
/src/plugins/*/doc/*/*.out
/src/plugins/*/doc/*/*.idx
Makefile.plugin.generated
# WP/Coq Generated file
.lia.cache
# generated ML files
/src/libraries/utils/json.ml
/src/kernel_internals/runtime/toplevel_boot.ml
/src/kernel_internals/runtime/config.ml
/src/kernel_internals/runtime/frama_c_config.ml
/src/kernel_internals/parsing/logic_lexer.ml
/src/kernel_internals/parsing/logic_parser.ml
/src/kernel_internals/parsing/logic_parser.mli
/src/kernel_internals/parsing/logic_preprocess.ml
/src/kernel_internals/parsing/clexer.ml
/src/kernel_internals/parsing/cparser.ml
/src/kernel_internals/parsing/cparser.mli
/src/plugins/value/domains/apron/apron_domain.ml
/src/plugins/value/domains/numerors/numerors_domain.ml
/src/kernel_services/ast_queries/json_compilation_database.ml
/src/libraries/stdlib/transitioning.ml
# generated tar.gz files
/doc/developer/hello.tar.gz
hello-*.tar.gz
#######################
# should remain empty #
#######################
stages:
- update_docker
- lint
- frama_c_and_plugins
- distrib_and_compatibility
variables:
OPAM_PACKAGES: ocamlfind zarith ocamlgraph ocp-indent
# update the cache
update_docker:
stage: update_docker
image: ocaml/opam:debian
variables:
GIT_STRATEGY: none
before_script:
- sudo apt-get install -y -qq rsync
- mkdir -p .gitlab_oci_cache/.opam/
- rsync -a .gitlab_oci_cache/.opam/ /home/opam/.opam/
- opam list
- opam depext -i $OPAM_PACKAGES
after_script:
- rsync -a --delete /home/opam/.opam/ .gitlab_oci_cache/.opam/
cache:
key: "frama-c"
paths:
- .gitlab_oci_cache/
script:
- exit 0
tags:
- docker
#lint uses the cache but doesn't modify it
lint:
stage: lint
image: ocaml/opam:debian
before_script:
- sudo apt-get install -y -qq rsync autoconf build-essential bc
- mkdir -p .gitlab_oci_cache/.opam/
- rsync -a .gitlab_oci_cache/.opam/ /home/opam/.opam/
- opam list
- opam depext -i $OPAM_PACKAGES
cache:
key: "frama-c"
paths:
- .gitlab_oci_cache/
script:
- autoconf
- ./configure
- make lint
- make stats-lint
# - make check-headers OPEN_SOURCE=yes STRICT_HEADERS=yes
coverage: '/lint coverage: \d+\.\d+/'
tags:
- docker
frama-c-external:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME frama-c-external --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
frama-c:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME frama-c --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
frama-c-ocaml-4.03:
stage: distrib_and_compatibility
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --ocaml 4.03 --camlp4 4.03 --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME frama-c --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
frama-c-ocaml-4.04:
stage: distrib_and_compatibility
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --ocaml 4.04 --camlp4 4.04 --lablgtk 4bbd5cf1990aa8b775cf247fbfe5be321e13cc61 --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME frama-c --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
frama-c-ocaml-4.05:
stage: distrib_and_compatibility
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --ocaml 4.05 --camlp4 4.05 --lablgtk 4bbd5cf1990aa8b775cf247fbfe5be321e13cc61 --camomile 3f4d657d50c17213f3338ca75efb30d728704df3 --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME frama-c --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
allow_failure: true
frama-c-internal:
stage: distrib_and_compatibility
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME frama-c-internal --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
only:
- master
- stable/silicium
except:
- tags
retry: 2
frama-c-distrib:
stage: distrib_and_compatibility
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME frama-c-distrib --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
Genassigns:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME Genassigns --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
Mthread:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME Mthread --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
a3export:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME a3export --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
PathCrawler:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME PathCrawler --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
Security:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME Security --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
E-ACSL:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME E-ACSL --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
allow_failure: true
retry: 2
context-from-precondition:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME context-from-precondition --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
open-source-case-studies:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --url open-source-case-studies,git@git.frama-c.com:frama-c/open-source-case-studies.git --commit open-source-case-studies,master open-source-case-studies --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
when: manual
retry: 2
ACSL-importer:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME ACSL-importer --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
Caveat-importer:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME Caveat-importer --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
Volatile:
stage: frama_c_and_plugins
script:
- ~oci/oci/bin/bf_client.native run --socket ~oci/data/oci-data/oci.socket --frama-c $CI_BUILD_REF --branch $CI_BUILD_REF_NAME Volatile --cppo 07d2bcee50670aecae7e094d92f68fd18314073a --ocamlgraph 9286b375c005d1d504a1def0c5986f54c7f12251 --url ocamlfind,git@git.frama-c.com:bobot/ocamlfind.git
tags:
except:
- tags
retry: 2
#
# Fix email or name in commits. Used during pretty printing by git shortlog, blame, ...
# It can be used also for git log, git show, git whatchanged with
# git config --global log.mailmap true
#
Virgile Prevosto <virgile.prevosto@cea.fr> <virgile.prevosto@m4x.org>
Virgile Prevosto <virgile.prevosto@cea.fr>
<pascal.cuoq@cea.fr> <Pascal.CUOQ@cea.fr>
Muriel Roger <muriel.roger@cea.fr>
<julien.signoles@cea.fr> <signoles@ns61143.ovh.net>
<julien.signoles@cea.fr> <jsignole@is005030.intra.cea.fr>
<loic.correnson@cea.fr> <lcorrenson@gmail.com>
<loic.correnson@cea.fr> <loïc.correnson@cea.fr>
Géraud Canet <geraud.canet@cea.fr>
<mounir.assaf@cea.fr> <mounir.assaf@cea.Fr>
\ No newline at end of file
Version number Date of release Notes
============== =============== =====
Chlorine-20180502 2018, July 06 Bug fixed
Chlorine-20180501 2018, June 01
Sulfur-20171101 2017, November 28
Phosphorus-20170501 2017, May 29
Silicon-20161101 2016, December 2
Aluminium-20160502 2016, May 31
Aluminium-20160501 2016, May 30 Removed
Aluminium-rc1 2016, May 13 Not publicly released
Magnesium-20151002 2016, January 15
Magnesium-20151001 2015, October 27 Not publicly released
Sodium-20150201 2015, March 9
Neon-20140301 2014, May 7
Fluorine-20130601 2013, June 11 Bug fixed
Fluorine-20130501 2013, May 23 Bug fixed
Fluorine-20130401 2013, April 17
Oxygen-20120901 2012, September 19
Nitrogen-20111001 2011, October 10
Carbon-20110201 2011, February 7
Carbon-20101202-beta2 2010, December 17 Source only
Carbon-20101201-beta1 2010, December 14 Source only
Boron-20100401 2010, April 12
Beryllium-20090902 2009, September 23
Beryllium-20090901 2009, September 01
Beryllium-20090601-beta1 2009, June 23 Source only
Lithium-20081201 2008, Decembre 16
Lithium-20081002+beta1 2008, October 28
Lithium-20081001+alpha0 2008, October 03 Source only
Helium-20080701 2008, July 11
Hydrogen-20080502 2008, May 26 No cvs tag
Hydrogen-20080501 2008, May 05 Source only, No cvs tag
Hydrogen-20080302 2008, March 27 Binary only
Hydrogen-20080301 (Hydrogen) 2008, March 03 Source only
This source diff could not be displayed because it is too large. You can view the blob instead.
This file provides a detailed description of the main changes in the API
of Frama-C. It is intended for developers only. For a summary of all changes,
please refer to Changelog.
* Changes between Sodium and Magnesium
** Use of Value-based plug-ins:
In case your plug-in programmatically uses one of the following plug-ins
(even through Db):
Value, Metrics, Occurrence, From, Users, Constant_Propagation, Inout,
Impact, Pdg, Scope, Sparecode, Slicing
You must add the following line in your plug-in Makefile:
PLUGIN_DEPENDENCIES:=<plug-ins list>
For instance, if you depend on Value, Pdg and Slicing, you must write:
PLUGIN_DEPENDENCIES:=Value Pdg Slicing
** Callgraph Access
In Sodium, there were three different callgraph implementations:
- module Callgraph
- plug-in Syntactic_callgraph (based on Callgraph)
- plug-in Semantic_callgraph (based on Value to solve function pointers)
The first one was almost an internal Frama-C module and directly exposed its
internal datastructure based on Hashtbl, while the second and the third one
exported a few functions through module Db.
In Magnesium, these three modules and plug-ins are replaced by a single
plug-in: Callgraph. This plug-in exports an API for plug-in developers through
its interface Callgraph.mli (which is nowadays the recommended way, see
Plug-in Development Guide, Section 3.4). The script sodium2magnesium.sh
automatically converts the uses of Db.Syntactic_callgraph and
Db.Semantic_callgraph to the new API, but you have to add the following line
to your plug-in Makefile to get an access to the API:
PLUGIN_DEPENDENCIES:=Callgraph <possibly other dependencies>
* Changes between Oxygen and Fluorine
** Removal of rooted_code_annotation
The datatype Cil_types.rooted_code_annotation has been removed. It was used to
distinguish between annotations present in the original sources and
annotations generated by the plug-ins, and has never been really used.
All functions that were using Cil_types.rooted_code_annotation now use
directly Cil_types.code_annotation.
*** Removed identifiers
- Constructors Cil_types.User and Cil_types.AI
- Function Ast_info.is_trivial_rooted_assertion
(replaced by Ast_info.is_trivial_annotation)
- Function Ast_info.lift_annot_func (useless)
- Function Ast_info.lift_annot_list_func (useless)
- Function Ast_info.d_rooted_code_annotation (useless)
- Function Annotation.code_annotation_of_rooted (useless)
- Module Cil_datatype.Rooted_code_annotation (useless)
- Method vrooted_code_annotation in Visitor.frama_c_visitor (useless)
*** Distinction between user annotations and generated annotations
The origin of an annotation is now given by its emitter, which can be retrieved
via Annotations.fold_code_annot and Annotations.iter_code_annot. For instance,
the following Oxygen code
#+BEGIN_SRC ocaml
Annotations.iter_code_annot
(fun _ annot ->
match annot with
| User a -> f a
| AI(_,a) -> g a)
stmt
#+END_SRC
will be translated that way for Fluorine:
#+BEGIN_SRC ocaml
Annotations.iter_code_annot
(fun e annot ->
if Emitter.equal e Emitter.end_user then
f annot
else
g annot)
stmt
#+END_SRC
*** Visitor
vrooted_code_annotation could return a list of annotations,
while vcode_annotation must return a single annotation (however, if it is
trivial, i.e. assert \true, it will be discarded). Code visiting
vrooted_code_annotation and returning several annotations at once must thus
be rewritten (e.g. by taking care of registering the additional annotations
directly).
** Message categories
Debug keys is a feature added in Nitrogen to allow showing only specific debug
messages of a plug-in or the kernel. Related interface has changed in Fluorine.
See src/kernel/log.mli for more details.
*** Keys for feedback and result
keys are not restricted to debug, but can be used for feedback and result.
*** New datatype
Keys were plain strings. There is now a category type, which is a private
alias for string: each key must be registered before being used.
*** Sub-categories
There are subcategories, which are implicitly defined by using columns (':')
in the category name. For instance a:b:c denotes a sub-category c of b, itself
a subcategory of a. a and a:b do not need to be already registered before
registration of a:b:c. Enabling display of messages of a will also enable
a:b and a:b:c
*** New command line options
The option for enforcing a category of message was -plugin-debug-category.
It is now -plugin-msg-key. -plugin-msg-key-unset allows to remove some
previously enabled category (either directly or as a subcategory of an enabled
category), and its subcategory. For instance
-plugin-msg-key a -plugin-msg-unset a:b -plugin-msg-set a:b:c will enable
messages for a and a:b:c