/* 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 " }
}