~ubuntu-branches/ubuntu/karmic/valgrind/karmic

« back to all changes in this revision

Viewing changes to memcheck/tests/varinfo3.c

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-05 18:27:01 UTC
  • mfrom: (1.1.9 upstream) (2.1.6 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090305182701-yag747u3f33y9g8y
Tags: 1:3.4.1-1ubuntu1
* Merge with Debian; remaining changes:
  - Add 91_build_with_fno_stack_protector.dpatch.
  - Add lpia to Architecture.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/* Check for correct handling of static vs non-static, local vs
 
3
   non-local variables in a zero-biased executable. */
 
4
/* Relevant compile flags are:
 
5
 
 
6
   -Wall -g -I$prefix/include/valgrind
 
7
 
 
8
   eg -Wall -g -I`pwd`/Inst/include/valgrind
 
9
*/
 
10
/* Unfortunately 2008 Feb 26, requires its own filter_varinfo3, since
 
11
   nonstatic_local_{un}def are not handled properly and so end up with
 
12
   compiler-dependent names, eg static_local_def.2919 and
 
13
   static_local_undef.2921.  So filter off the .nnnn part. */
 
14
#include <stdio.h>
 
15
#include <stdlib.h>
 
16
#include <assert.h>
 
17
#include "memcheck/memcheck.h"
 
18
/* Cause memcheck to complain about the address "a" and so to print
 
19
   its best guess as to what "a" actually is.  a must be
 
20
   addressible. */
 
21
void croak ( void* aV )
 
22
{
 
23
  char* a = (char*)aV;
 
24
  char* undefp = malloc(1);
 
25
  char saved = *a;
 
26
  assert(undefp);
 
27
  *a = *undefp;
 
28
  VALGRIND_CHECK_MEM_IS_DEFINED(a, 1);
 
29
  *a = saved;
 
30
  free(undefp);
 
31
}
 
32
 
 
33
#include <stdio.h>
 
34
 
 
35
static char static_global_def[10]    = {0,0,0,0,0, 0,0,0,0,0};
 
36
       char nonstatic_global_def[10] = {0,0,0,0,0, 0,0,0,0,0};
 
37
static char static_global_undef[10];
 
38
       char nonstatic_global_undef[10];
 
39
 
 
40
void bar ( char* p1, char* p2, char* p3, char* p4 )
 
41
{
 
42
   croak(p1);
 
43
   croak(p2);
 
44
   croak(p3);
 
45
   croak(p4);
 
46
}
 
47
 
 
48
void foo ( void )
 
49
{
 
50
   static char static_local_def[10]    = {0,0,0,0,0, 0,0,0,0,0};
 
51
          char nonstatic_local_def[10] = {0,0,0,0,0, 0,0,0,0,0};
 
52
   static char static_local_undef[10];
 
53
          char nonstatic_local_undef[10];
 
54
   croak ( 1 + (char*)&static_global_def );
 
55
   croak ( 2 + (char*)&nonstatic_global_def );
 
56
   croak ( 3 + (char*)&static_global_undef );
 
57
   croak ( 4 + (char*)&nonstatic_global_undef );
 
58
   bar( 5 + (char*)&static_local_def,
 
59
        6 + (char*)&nonstatic_local_def,
 
60
        7 + (char*)&static_local_undef,
 
61
        8 + (char*)&nonstatic_local_undef );
 
62
}
 
63
 
 
64
int main ( void )
 
65
{
 
66
  foo();
 
67
  return 0;
 
68
}