~ubuntu-branches/debian/sid/frama-c/sid

« back to all changes in this revision

Viewing changes to tests/slicing/sizeof.c

  • Committer: Bazaar Package Importer
  • Author(s): Mehdi Dogguy
  • Date: 2009-06-03 08:19:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090603081925-kihvxvt0wy3zc4ar
Tags: upstream-20081201.dfsg
ImportĀ upstreamĀ versionĀ 20081201.dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* run.config
 
2
  OPT: -deps -slice-print -slice-return main -journal-disable
 
3
  OPT: -deps -slice-print -slice-return SizeOf_1 -slicing-debug -no-slice-callers -journal-disable
 
4
  OPT: -deps -slice-print -slice-return SizeOf_2 -slicing-debug -no-slice-callers -journal-disable
 
5
  OPT: -deps -slice-print -slice-return SizeOfE_pt1 -slicing-debug -no-slice-callers -journal-disable
 
6
  OPT: -deps -slice-print -slice-return SizeOfE_pt2 -slicing-debug -no-slice-callers -journal-disable
 
7
  OPT: -deps -slice-print -slice-return SizeOfE_pt3 -slicing-debug -no-slice-callers -journal-disable
 
8
  OPT: -deps -slice-print -slice-return SizeOfE_pt_deref_1 -slicing-debug -no-slice-callers -journal-disable
 
9
  OPT: -deps -slice-print -slice-return SizeOfE_tab_1 -slicing-debug -no-slice-callers -journal-disable
 
10
  OPT: -deps -slice-print -slice-return SizeOfE_pt_tab_1 -slicing-debug -no-slice-callers -journal-disable
 
11
  OPT: -deps -slice-print -slice-return SizeOfE_pt_tab_2 -slicing-debug -no-slice-callers -journal-disable
 
12
  OPT: -deps -slice-print -slice-return SizeOfE_tab_acces_1 -slicing-debug -no-slice-callers -journal-disable
 
13
  OPT: -deps -slice-print -slice-pragma main -journal-disable
 
14
  OPT: -deps -slice-print -slice-assert main -journal-disable
 
15
*/
 
16
struct St { int i, *p, tab[5] ; } st ;
 
17
 
 
18
unsigned int SizeOf_1 (void) {
 
19
  int x = 1;
 
20
  int i = 2;
 
21
  int *p = &x;
 
22
  int tab[5] = {0,1,2,3,4};
 
23
  return sizeof(int *) ;
 
24
}
 
25
unsigned int SizeOf_2 (void) {
 
26
  int x = 1;
 
27
  int i = 2;
 
28
  int *p = &x;
 
29
  int tab[5] = {0,1,2,3,4};
 
30
  return sizeof(struct St) ;
 
31
}
 
32
unsigned int SizeOfE_pt1 (void) {
 
33
  int x = 1;
 
34
  int i = 2;
 
35
  int *p = &x;
 
36
  int tab[5] = {0,1,2,3,4};
 
37
  return sizeof(&x) ;
 
38
}
 
39
unsigned int SizeOfE_pt2 (void) {
 
40
  int x = 1;
 
41
  int i = 2;
 
42
  int *p = &x;
 
43
  int tab[5] = {0,1,2,3,4};
 
44
  return sizeof(p) ;
 
45
}
 
46
unsigned int SizeOfE_pt3 (void) {
 
47
  int x = 1;
 
48
  int i = 2;
 
49
  int *p = &x;
 
50
  int tab[5] = {0,1,2,3,4};
 
51
  return sizeof(p+i) ;
 
52
}
 
53
unsigned int SizeOfE_pt_deref_1 (void) {
 
54
  int x = 1;
 
55
  int i = 2;
 
56
  int *p = &x;
 
57
  int tab[5] = {0,1,2,3,4};
 
58
  return sizeof(*(p+i)) ;
 
59
}
 
60
unsigned int SizeOfE_tab_1 (void) {
 
61
  int x = 1;
 
62
  int i = 2;
 
63
  int *p = &x;
 
64
  int tab[5] = {0,1,2,3,4};
 
65
  return sizeof(tab) ;
 
66
}
 
67
unsigned int SizeOfE_pt_tab_1 (void) {
 
68
  int x = 1;
 
69
  int i = 2;
 
70
  int *p = &x;
 
71
  int tab[5] = {0,1,2,3,4};
 
72
  return sizeof(tab+i) ;
 
73
}
 
74
unsigned int SizeOfE_pt_tab_2 (void) {
 
75
  int x = 1;
 
76
  int i = 2;
 
77
  int *p = &x;
 
78
  int tab[5] = {0,1,2,3,4};
 
79
  return sizeof(&(tab[i])) ;
 
80
}
 
81
unsigned int SizeOfE_tab_acces_1 (void) {
 
82
  int x = 1;
 
83
  int i = 2;
 
84
  int *p = &x;
 
85
  int tab[5] = {0,1,2,3,4};
 
86
  return sizeof(tab[i]) ;
 
87
}
 
88
 
 
89
int main (void) {
 
90
  int r = 0 ;
 
91
  r += sizeof (struct St);
 
92
  // How to write something like this: assert r == sizeof (st)
 
93
  //@ assert r != 0;
 
94
  r += SizeOf_1 ();
 
95
  r += SizeOf_2 ();
 
96
  r += SizeOfE_pt1 ();
 
97
  r += SizeOfE_pt2 ();
 
98
  r += SizeOfE_pt3 ();
 
99
  r += SizeOfE_pt_deref_1 ();
 
100
  r += SizeOfE_tab_1 ();
 
101
  r += SizeOfE_pt_tab_1 ();
 
102
  r += SizeOfE_pt_tab_2 ();
 
103
  r += SizeOfE_tab_acces_1 ();
 
104
  //@ slice pragma expr r;
 
105
  return r;
 
106
}