File tree Expand file tree Collapse file tree 12 files changed +163
-2
lines changed
cbmc-java/phi-merge_uninitialized_values
cbmc/phi-merge_uninitialized_values Expand file tree Collapse file tree 12 files changed +163
-2
lines changed Original file line number Diff line number Diff line change
1
+ public class PhiMergeUninitialized {
2
+
3
+ public int dynamicAllocationUninitialized (Boolean trigger ) {
4
+
5
+ Ephemeral obj ;
6
+ if (trigger ) {
7
+ obj = new Ephemeral (42 );
8
+ } else {
9
+ obj = new Aetherial (20 );
10
+ }
11
+
12
+ assert obj .val == 20 ;
13
+ return obj .val ;
14
+ }
15
+
16
+ private Ephemeral local ;
17
+
18
+ public int localUninitialized (Boolean trigger ) {
19
+ if (trigger ) {
20
+ local = new Ephemeral (42 );
21
+ } else {
22
+ local = new Aetherial (50 );
23
+ }
24
+
25
+ assert local .val == 42 ;
26
+ return local .val ;
27
+ }
28
+
29
+ private static Ephemeral staticLocal ;
30
+
31
+ public int staticLocalUninitialized (Boolean trigger ) {
32
+ if (trigger ) {
33
+ staticLocal = new Ephemeral (42 );
34
+ } else {
35
+ staticLocal = new Aetherial (76 );
36
+ }
37
+
38
+ assert staticLocal .val == 76 ;
39
+ return staticLocal .val ;
40
+ }
41
+
42
+ class Ephemeral {
43
+ Ephemeral (int value ) {
44
+ val = value ;
45
+ }
46
+
47
+ int val ;
48
+ }
49
+
50
+ class Aetherial extends Ephemeral {
51
+ Aetherial (int value ) {
52
+ super (value );
53
+ }
54
+ }
55
+ }
56
+
Original file line number Diff line number Diff line change
1
+ CORE
2
+ PhiMergeUninitialized.class
3
+ --function PhiMergeUninitialized.dynamicAllocationUninitialized --show-vcc
4
+ activate-multi-line-match
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^.*: (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0\)
9
+ ^.*\? (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0
Original file line number Diff line number Diff line change
1
+ CORE
2
+ PhiMergeUninitialized.class
3
+ --function PhiMergeUninitialized.localUninitialized --show-vcc
4
+ activate-multi-line-match
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^.*: (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0\)
9
+ ^.*\? (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0
Original file line number Diff line number Diff line change
1
+ CORE
2
+ PhiMergeUninitialized.class
3
+ --function PhiMergeUninitialized.staticLocalUninitialized --show-vcc
4
+ activate-multi-line-match
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^.*: (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0\)
9
+ ^.*\? (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0
Original file line number Diff line number Diff line change
1
+ CORE
2
+ test.c
3
+ --function dynamicAllocationUninitialized --show-vcc
4
+ activate-multi-line-match
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^.*: (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0\)
9
+ ^.*\? (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0
Original file line number Diff line number Diff line change
1
+ CORE
2
+ test.c
3
+ --function staticLocalUninitialized --show-vcc
4
+ activate-multi-line-match
5
+ ^EXIT=0$
6
+ ^SIGNAL=0$
7
+ --
8
+ ^.*: (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0\)
9
+ ^.*\? (dynamic_object|new_tmp[0-9]+(@[0-9]+)?)[0-9]+#0
Original file line number Diff line number Diff line change
1
+ #include <assert.h>
2
+ #include <stdlib.h>
3
+
4
+ void dynamicAllocationUninitialized (int trigger )
5
+ {
6
+ int * obj ;
7
+ obj = malloc (sizeof (int ));
8
+ if (trigger )
9
+ {
10
+ * obj = 42 ;
11
+ }
12
+ else
13
+ {
14
+ * obj = 20 ;
15
+ }
16
+
17
+ assert (* obj == 20 );
18
+ }
19
+
20
+ int * staticLocal ;
21
+ int staticLocalUninitialized (int trigger )
22
+ {
23
+ staticLocal = malloc (sizeof (int ));
24
+ if (trigger )
25
+ {
26
+ * staticLocal = 42 ;
27
+ }
28
+ else
29
+ {
30
+ * staticLocal = 76 ;
31
+ }
32
+
33
+ assert (* staticLocal == 76 );
34
+ }
Original file line number Diff line number Diff line change @@ -22,13 +22,19 @@ void goto_symext::do_simplify(exprt &expr)
22
22
simplify (expr, ns);
23
23
}
24
24
25
+ nondet_symbol_exprt goto_symext::build_symex_nondet (typet &type)
26
+ {
27
+ irep_idt identifier = " symex::nondet" + std::to_string (nondet_count++);
28
+ nondet_symbol_exprt new_expr (identifier, type);
29
+ return new_expr;
30
+ }
31
+
25
32
void goto_symext::replace_nondet (exprt &expr)
26
33
{
27
34
if (expr.id ()==ID_side_effect &&
28
35
expr.get (ID_statement)==ID_nondet)
29
36
{
30
- irep_idt identifier=" symex::nondet" +std::to_string (nondet_count++);
31
- nondet_symbol_exprt new_expr (identifier, expr.type ());
37
+ nondet_symbol_exprt new_expr = build_symex_nondet (expr.type ());
32
38
new_expr.add_source_location ()=expr.source_location ();
33
39
expr.swap (new_expr);
34
40
}
Original file line number Diff line number Diff line change @@ -376,6 +376,8 @@ class goto_symext
376
376
exprt &code,
377
377
const irep_idt &identifier);
378
378
379
+ nondet_symbol_exprt build_symex_nondet (typet &type);
380
+
379
381
// exceptions
380
382
void symex_throw (statet &);
381
383
void symex_catch (statet &);
You can’t perform that action at this time.
0 commit comments