2
OPT: -sparecode-analysis -journal-disable
3
OPT: -slicing-level 2 -slice-return main -slice-print -journal-disable
4
OPT: -main main2 -sparecode-analysis -journal-disable
5
OPT: -main main2 -slice-return main2 -slice-print -journal-disable
6
OPT: -main main2 -slice-return main2 -slice-assert f10 -slice-print -journal-disable
9
/* Waiting for results such as:
10
* spare code analysis removes statements having variables with
13
* slicing analysis removes statement having variables with
14
* prefix "spare_" and "any_"
23
//@ assert w == 1 ; // w is not spare or else
24
// the assertion should be removed !
26
int spare_y = a+spare_z;
30
int param (int a, int spare_b) {
34
int spare_called_fct (int a) {
38
int two_outputs (int a, int b) {
43
int call_two_outputs (void) {
49
x = two_outputs (a, b);
50
G = 1; /* don't use b = any_b; */
53
spare_y = two_outputs (a, b);
54
/* don't use spare_y so don't use a = any_a */
58
void assign (int *p, int *q) {
62
int loop (int x, int y, int z) {
65
//@ loop invariant i < y ;
66
/* should keep y in sparecode analysis even if it is not used in the function */
73
void stop(void) __attribute__ ((noreturn)) ;
75
int main (int noreturn, int halt) {
78
int spare_param = 2 + spare_tmp;
82
res += param (2, spare_param);
85
res += call_two_outputs ();
86
res += loop (10, 15, 20);
87
assign (&x, &spare_ref) ; /* <- Here, best can be done for spare analysis */
94
//@ assert \false ; // What should be done with
95
// assertions related to dead code?
101
/*-------------------------------------*/
102
struct { struct { int x; int y; } a; int b; } X10;
105
//@ slice pragma expr X10;
106
//@ slice pragma expr X10.a;
107
//@ slice pragma expr X10.a.x;
108
//@ slice pragma expr Y10;
109
//@ assert X10.a.x >= 0;
116
return X10.a.x + X10.a.y;
118
/*-------------------------------------*/