Skip to content

Commit 2968bec

Browse files
author
Daniel Kroening
authored
Merge pull request #317 from johnfxgalea/symex_va_arg
Support for va_args in path-symex
2 parents 2f6318c + a7c0673 commit 2968bec

File tree

23 files changed

+591
-13
lines changed

23 files changed

+591
-13
lines changed

regression/symex/va_args_1/main.c

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int max(int n, ...);
6+
7+
int main ()
8+
{
9+
int m;
10+
11+
int y = 7;
12+
int u = 2;
13+
m = max(3, y, u, 9);
14+
15+
assert(m == 9);
16+
17+
return 0;
18+
}
19+
20+
int max(int n, ...)
21+
{
22+
int i,val,largest;
23+
24+
va_list vl;
25+
26+
va_start(vl,n);
27+
largest=va_arg(vl,int);
28+
29+
for (i=1;i<n;i++)
30+
{
31+
val=va_arg(vl,int);
32+
largest=(largest>val)?largest:val;
33+
}
34+
35+
va_end(vl);
36+
return largest;
37+
}

regression/symex/va_args_1/test.desc

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$
7+
--
8+
^warning: ignoring

regression/symex/va_args_10/main.c

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int max(int n, ...);
6+
7+
int main ()
8+
{
9+
int m;
10+
int m2;
11+
int m3;
12+
13+
m = max(3, 2, 6, 9);
14+
15+
m2 = max(3, 4, 11, 1);
16+
17+
m3 = max(2, m, m2);
18+
19+
assert(m3 == 6);
20+
21+
return 0;
22+
}
23+
24+
int max(int n, ...)
25+
{
26+
int i,val,largest;
27+
28+
va_list vl;
29+
30+
va_start(vl,n);
31+
largest=va_arg(vl,int);
32+
33+
for (i=1;i<n;i++)
34+
{
35+
val=va_arg(vl,int);
36+
largest=(largest>val)?largest:val;
37+
}
38+
39+
va_end(vl);
40+
return largest;
41+
}

regression/symex/va_args_10/test.desc

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$
7+
--
8+
^warning: ignoring

regression/symex/va_args_2/main.c

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int max(int n, ...);
6+
7+
int main ()
8+
{
9+
int m;
10+
int y;
11+
m = max(2, y, 8);
12+
13+
assert(m == 8);
14+
15+
return 0;
16+
}
17+
18+
int max(int n, ...)
19+
{
20+
int i,val,largest;
21+
22+
va_list vl;
23+
24+
va_start(vl,n);
25+
largest=va_arg(vl,int);
26+
27+
for (i=1;i<n;i++)
28+
{
29+
val=va_arg(vl,int);
30+
largest=(largest>val)?largest:val;
31+
}
32+
33+
va_end(vl);
34+
return largest;
35+
}

regression/symex/va_args_2/test.desc

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$
7+
--
8+
^warning: ignoring

regression/symex/va_args_3/main.c

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int max(int n, ...);
6+
7+
int main ()
8+
{
9+
int m;
10+
m = max(2, 1, 8);
11+
12+
assert(m == 1);
13+
14+
return 0;
15+
}
16+
17+
int max(int n, ...)
18+
{
19+
int i,val,largest;
20+
21+
va_list vl;
22+
23+
va_start(vl,n);
24+
largest=va_arg(vl,int);
25+
26+
for (i=1;i<n;i++)
27+
{
28+
val=va_arg(vl,int);
29+
largest=(largest>val)?largest:val;
30+
}
31+
32+
va_end(vl);
33+
return largest;
34+
}

regression/symex/va_args_3/test.desc

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$
7+
--
8+
^warning: ignoring

regression/symex/va_args_4/main.c

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int max(int n, ...);
6+
7+
int main()
8+
{
9+
int m;
10+
m = max(2, 2, 8, 10);
11+
12+
assert(m == 10);
13+
14+
return 0;
15+
}
16+
17+
int max(int repeat,int n, ...)
18+
{
19+
int i,val,largest;
20+
21+
va_list vl;
22+
23+
va_start(vl,n);
24+
largest=va_arg(vl,int);
25+
26+
for (i=1;i<n;i++)
27+
{
28+
val=va_arg(vl,int);
29+
largest=(largest>val)?largest:val;
30+
}
31+
32+
for (i = 0; i < repeat; i++){
33+
printf("%d. Result is: %d", i, largest);
34+
}
35+
36+
va_end(vl);
37+
return largest;
38+
}

regression/symex/va_args_4/test.desc

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$
7+
--
8+
^warning: ignoring

regression/symex/va_args_5/main.c

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int max(int n, ...);
6+
7+
int main ()
8+
{
9+
int n;
10+
int m;
11+
m = max(7, 7, 8);
12+
13+
assert(m == 8);
14+
15+
return 0;
16+
}
17+
18+
int max(int n, ...)
19+
{
20+
int i,val,largest;
21+
22+
va_list vl;
23+
24+
va_start(vl,n);
25+
largest=va_arg(vl,int);
26+
27+
for (i=1;i<n;i++)
28+
{
29+
val=va_arg(vl,int);
30+
largest=(largest>val)?largest:val;
31+
}
32+
33+
va_end(vl);
34+
return largest;
35+
}

regression/symex/va_args_5/test.desc

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CORE
2+
main.c
3+
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$

regression/symex/va_args_6/main.c

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int max(int n, ...);
6+
7+
int main ()
8+
{
9+
int m;
10+
m = max(8, 2, 7, 8);
11+
12+
assert(m == 2);
13+
14+
return 0;
15+
}
16+
17+
int max (int j, int n, ...)
18+
{
19+
int i,val,largest;
20+
21+
va_list vl;
22+
23+
va_start(vl,n);
24+
largest=va_arg(vl,int);
25+
26+
for (i=1;i<j;i++)
27+
{
28+
val=va_arg(vl,int);
29+
largest=(largest>val)?largest:val;
30+
}
31+
32+
va_end(vl);
33+
return largest;
34+
}

regression/symex/va_args_6/test.desc

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CORE
2+
main.c
3+
--unwind 8
4+
^EXIT=10$
5+
^SIGNAL=0$
6+
^VERIFICATION FAILED$

regression/symex/va_args_7/main.c

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int main ()
6+
{
7+
8+
int eva_arguments;
9+
int n;
10+
11+
int init_eva = eva_arguments;
12+
13+
for (unsigned int i = 0; i < n; i++){
14+
15+
eva_arguments++;
16+
}
17+
18+
if (init_eva == 0){
19+
assert(eva_arguments == n);
20+
}
21+
22+
return 0;
23+
}

regression/symex/va_args_7/test.desc

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CORE
2+
main.c
3+
--unwind 8
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$

regression/symex/va_args_8/main.c

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <stdio.h>
2+
#include <stdarg.h>
3+
#include <assert.h>
4+
5+
int max(int n, ...);
6+
7+
int main ()
8+
{
9+
int m;
10+
11+
int y = 7;
12+
int u = 2;
13+
m = max(3, y, u, 9);
14+
15+
assert(m == 10);
16+
17+
return 0;
18+
}
19+
20+
int max(int n, ...)
21+
{
22+
int i,val,largest;
23+
24+
va_list vl;
25+
26+
va_start(vl,n);
27+
largest=va_arg(vl,int) + 1;
28+
29+
for (i=1;i<n;i++)
30+
{
31+
val=va_arg(vl,int) + 1;
32+
largest=(largest>val)?largest:val;
33+
}
34+
35+
va_end(vl);
36+
return largest;
37+
}

regression/symex/va_args_8/test.desc

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
main.c
3+
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
^VERIFICATION SUCCESSFUL$
7+
--
8+
^warning: ignoring

0 commit comments

Comments
 (0)