1// This test-case exposes a bug that was present in the compressed V bit
2// handling for a while.  The problem was that when
3// copy_address_range_state() copied a VA_BITS2_OTHER value, it failed to
4// also copy the corresponding entry in the sec-V-bits table.  Then later on
5// when we searched for the sec-V-bits entry for the copied-to location, it
6// failed to find it:
7//
8//   Memcheck: mc_main.c:766 (get_sec_vbits8): Assertion 'n' failed.
9//   Memcheck: get_sec_vbits8: no node for address 0x4017440 (0x4017441)
10
11#include <stdlib.h>
12
13int main(void)
14{
15   int i, t;
16   char* x = malloc(1000);
17
18   // Write some PDBs (partially defined bytes)
19   for (i = 0; i < 1000; i++)
20      x[i] &= (i & 0xff);
21
22   // realloc them, invoking copy_address_range_state()
23   x = realloc(x, 10000);
24
25   // Read the PDBs -- this caused a sec-V-bits lookup failure.
26   for (i = 0; i < 1000; i++)
27      t += x[i];
28
29   return 0;
30}
31
32