drd: Add a consistency check
[valgrind.git] / memcheck / tests / varinforestrict.c
blob073bf53b6897c45b54023164037d0ffb09c47e40
1 // Simple program that uses C99 restrict qualifier.
2 // Once GCC is fixed to output DW_TAG_restrict_type in the debuginfo
3 // valgrind --read-var-info=yes would get a serious error reading the
4 // debuginfo. This tests makes sure that a fixed GCC and a fixed valgrind
5 // work well together.
6 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59051
7 // https://bugs.kde.org/show_bug.cgi?id=336619
9 #include <assert.h>
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <string.h>
14 #include "memcheck/memcheck.h"
16 /* Cause memcheck to complain about the address "a" and so to print
17 its best guess as to what "a" actually is. a must be addressible. */
18 void croak (void *aV )
20 char* a = (char*)aV;
21 char* undefp = malloc(1);
22 char saved = *a;
23 assert(undefp);
24 *a = *undefp;
25 (void) VALGRIND_CHECK_MEM_IS_DEFINED(a, 1);
26 *a = saved;
27 free(undefp);
30 void
31 bad_restrict_ptr (void * restrict bad_ptr)
33 croak ((void *) &bad_ptr);
36 char *
37 cpy (char * restrict s1, const char * restrict s2, size_t n)
39 char *t1 = s1;
40 const char *t2 = s2;
41 while(n-- > 0)
42 *t1++ = *t2++;
43 return s1;
46 int
47 main (int argc, char **argv)
49 const char *hello = "World";
50 size_t l = strlen (hello) + 1;
51 char *earth = malloc (l);
52 fprintf (stderr, "Hello %s\n", cpy (earth, hello, l));
53 free (earth);
55 void *bad = malloc (16);
56 bad_restrict_ptr (bad);
57 free (bad);
58 return 0;