Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
frama-c
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
pub
frama-c
Commits
23816fb2
Commit
23816fb2
authored
4 years ago
by
Loïc Correnson
Browse files
Options
Downloads
Patches
Plain Diff
[wp] new cfg dumper
parent
73113843
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/plugins/wp/Generator.ml
+3
-1
3 additions, 1 deletion
src/plugins/wp/Generator.ml
src/plugins/wp/cfgGenerator.ml
+73
-18
73 additions, 18 deletions
src/plugins/wp/cfgGenerator.ml
src/plugins/wp/cfgGenerator.mli
+1
-0
1 addition, 0 deletions
src/plugins/wp/cfgGenerator.mli
with
77 additions
and
19 deletions
src/plugins/wp/Generator.ml
+
3
−
1
View file @
23816fb2
...
...
@@ -80,6 +80,8 @@ let create
method
compute_main
=
WpGenerator
.
compute_selection
cc
end
else
CfgGenerator
.
generator
setup
driver
if
dump
then
CfgGenerator
.
dumper
setup
driver
else
CfgGenerator
.
generator
setup
driver
(* -------------------------------------------------------------------------- *)
This diff is collapsed.
Click to expand it.
src/plugins/wp/cfgGenerator.ml
+
73
−
18
View file @
23816fb2
...
...
@@ -49,9 +49,13 @@ let default kf =
(
Annotations
.
behaviors
kf
)
let
select
kf
bnames
=
List
.
filter
(
fun
b
->
List
.
mem
b
.
b_name
bnames
)
(
Annotations
.
behaviors
kf
)
let
bhvs
=
Annotations
.
behaviors
kf
in
if
bnames
=
[]
then
bhvs
else
List
.
filter
(
fun
b
->
List
.
mem
b
.
b_name
bnames
)
bhvs
let
lemma
task
l
=
task
.
lemmas
<-
l
::
task
.
lemmas
let
apply
task
~
kf
?
bhvs
?
prop
()
=
begin
...
...
@@ -68,14 +72,13 @@ let notyet prop =
Wp_parameters
.
warning
~
once
:
true
"Not yet implemented wp for '%a'"
Property
.
pretty
prop
let
rec
strategy
task
prop
=
let
rec
strategy
_ip
task
prop
=
let
open
Property
in
match
prop
with
|
IPLemma
{
il_name
}
->
let
l
=
LogicUsage
.
logic_lemma
il_name
in
task
.
lemmas
<-
l
::
task
.
lemmas
lemma
task
(
LogicUsage
.
logic_lemma
il_name
)
|
IPAxiomatic
{
iax_props
}
->
List
.
iter
(
strategy
task
)
iax_props
List
.
iter
(
strategy
_ip
task
)
iax_props
|
IPBehavior
{
ib_kf
=
kf
;
ib_bhv
=
bhv
}
->
apply
task
~
kf
~
bhvs
:
[
bhv
]
()
|
IPPredicate
{
ip_kf
=
kf
;
ip_kind
;
ip_kinstr
=
ki
}
->
...
...
@@ -123,6 +126,26 @@ let rec strategy task prop =
|
IPPropertyInstance
_
->
notyet
prop
(* ? *)
|
IPExtended
_
|
IPAxiom
_
|
IPOther
_
->
()
let
select_lemma_prop
l
=
function
|
None
->
true
|
Some
ns
->
WpPropId
.
select_by_name
ns
(
WpPropId
.
mk_lemma_id
l
)
let
strategy_main
task
?
(
fct
=
Fct_all
)
?
bhv
?
prop
()
=
begin
if
fct
=
Fct_all
&&
bhv
=
None
then
LogicUsage
.
iter_lemmas
(
fun
l
->
if
l
.
lem_kind
<>
`Axiom
&&
select_lemma_prop
l
prop
then
lemma
task
l
)
;
Wp_parameters
.
iter_fct
(
fun
kf
->
match
bhv
with
|
None
|
Some
[]
->
apply
task
~
kf
()
|
Some
bs
->
apply
task
~
kf
~
bhvs
:
(
select
kf
bs
)
()
)
fct
;
task
.
props
<-
(
match
prop
with
None
->
`All
|
Some
ps
->
`Names
ps
)
;
end
(* -------------------------------------------------------------------------- *)
(* --- Compute All Tasks --- *)
(* -------------------------------------------------------------------------- *)
...
...
@@ -143,17 +166,17 @@ struct
List
.
iter
(
fun
l
->
let
wpo
=
VCG
.
compile_lemma
l
in
collection
:=
Bag
.
add
wpo
!
collection
)
task
.
lemmas
;
)
(
List
.
rev
task
.
lemmas
)
;
end
()
;
List
.
iter
(
fun
(
mode
:
CfgCalculus
.
mode
)
->
WpContext
.
on_context
(
model
,
WpContext
.
Kf
mode
.
kf
)
begin
fun
()
->
let
wp
=
snd
@@
WP
.
compute
~
mode
~
props
:
task
.
props
in
let
bhv
=
if
Cil
.
is_default_behavior
mode
.
bhv
then
None
else
Some
mode
.
bhv
.
b_name
in
let
index
=
Wpo
.
Function
(
mode
.
kf
,
bhv
)
in
let
wp
=
snd
@@
WP
.
compute
~
mode
~
props
:
task
.
props
in
let
wcs
=
VCG
.
compile_wp
index
wp
in
collection
:=
Bag
.
concat
!
collection
wcs
end
()
...
...
@@ -163,7 +186,7 @@ struct
let
compute_ip
model
ip
=
let
task
=
empty
()
in
strategy
task
ip
;
strategy
_ip
task
ip
;
compute
model
task
let
compute_call
_model
_stmt
=
...
...
@@ -171,15 +194,9 @@ struct
~
once
:
true
"Not yet implemented call preconds"
;
Bag
.
empty
let
compute_main
model
?
(
fct
=
Fct_all
)
?
bhv
?
prop
()
=
let
compute_main
model
?
fct
?
bhv
?
prop
()
=
let
task
=
empty
()
in
Wp_parameters
.
iter_fct
(
fun
kf
->
match
bhv
with
|
None
->
apply
task
~
kf
()
|
Some
bs
->
apply
task
~
kf
~
bhvs
:
(
select
kf
bs
)
()
)
fct
;
task
.
props
<-
(
match
prop
with
None
->
`All
|
Some
ps
->
`Names
ps
)
;
strategy_main
task
?
fct
?
bhv
?
prop
()
;
compute
model
task
end
...
...
@@ -207,3 +224,41 @@ let generator setup driver =
generator
(* -------------------------------------------------------------------------- *)
(* --- Dumper --- *)
(* -------------------------------------------------------------------------- *)
let
dump
task
=
let
module
WP
=
CfgCalculus
.
Make
(
CfgDump
)
in
let
props
=
task
.
props
in
List
.
iter
(
fun
(
mode
:
CfgCalculus
.
mode
)
->
let
bhv
=
if
Cil
.
is_default_behavior
mode
.
bhv
then
None
else
Some
mode
.
bhv
.
b_name
in
try
CfgDump
.
fopen
mode
.
kf
bhv
;
ignore
(
WP
.
compute
~
mode
~
props
)
;
CfgDump
.
flush
()
;
with
err
->
CfgDump
.
flush
()
;
raise
err
)
task
.
modes
let
dumper
setup
driver
=
let
model
=
Factory
.
instance
setup
driver
in
let
generator
:
Wpo
.
generator
=
object
method
model
=
model
method
compute_ip
ip
=
let
task
=
empty
()
in
strategy_ip
task
ip
;
dump
task
;
Bag
.
empty
method
compute_call
_
=
Bag
.
empty
method
compute_main
?
fct
?
bhv
?
prop
()
=
let
task
=
empty
()
in
strategy_main
task
?
fct
?
bhv
?
prop
()
;
dump
task
;
Bag
.
empty
end
in
generator
(* -------------------------------------------------------------------------- *)
This diff is collapsed.
Click to expand it.
src/plugins/wp/cfgGenerator.mli
+
1
−
0
View file @
23816fb2
...
...
@@ -24,6 +24,7 @@
(* --- New WP Computer (main entry points) --- *)
(* -------------------------------------------------------------------------- *)
val
dumper
:
Factory
.
setup
->
Factory
.
driver
->
Wpo
.
generator
val
generator
:
Factory
.
setup
->
Factory
.
driver
->
Wpo
.
generator
(* -------------------------------------------------------------------------- *)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment