aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/Wstringop-overflow-81.c
blob: e8bc327722a5ae346f815eeb6bd087297fd0847d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* Verify that -Wstringop-overflow uses context-sensitive range info
   even at -O0.
   { dg-do compile }
   { dg-options "-O0 -Wall" } */

extern void* memset (void*, int, __SIZE_TYPE__);

char a[8];

void warn_offset_range (int i)
{
  if (i < 4)
    i = 4;
  memset (a + i, 0, 5);       // { dg-warning "writing 5 bytes into a region of size 4 " }
}

void warn_size_range (int i, int n)
{
  if (n < 5)
    n = 5;

  memset (a + 4, 1, n);      // { dg-warning "writing between 5 and \\d+ bytes into a region of size 4 " }
}

void warn_offset_and_size_range (int i, int n)
{
  if (n < 5)
    n = 5;

  if (i < 4)
    {
      if (n < 9)
	n = 9;
      memset (a + i, 1, n);   // { dg-warning "writing between 9 and \\d+ bytes into a region of size 8 " }
    }
  else
    memset (a + i, 0, n);     // { dg-warning "writing between 5 and \\d+ bytes into a region of size 4 " }
}