1 2/* Check for correct handling of nested scopes in a zero-biased 3 executable. */ 4 5/* Relevant compile flags are: 6 7 -Wall -g -I$prefix/include/valgrind 8 9 eg -Wall -g -I`pwd`/Inst/include/valgrind 10*/ 11 12#include <stdio.h> 13#include <stdlib.h> 14#include <assert.h> 15#include "memcheck/memcheck.h" 16 17/* Cause memcheck to complain about the address "a" and so to print 18 its best guess as to what "a" actually is. a must be 19 addressible. */ 20 21void 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 35void foo ( void ) 36{ 37 int var; 38 var = 1; 39 { char var[10]; 40 var[6] = 4; 41 croak( &var[7] ); 42 { struct { double foo; float bar; } var; 43 croak ( 2 + (char*)&var.bar ); 44 } 45 } 46 croak( 1 + (char*)&var ); 47} 48 49int main ( void ) 50{ 51 foo(); 52 return 0; 53} 54