/* { dg-do run } */
/* { dg-options "-O2 -fdump-tree-strlen" } */

#include "strlenopt.h"

char temp[30];
volatile int v;

size_t __attribute__ ((noinline, noclone))
f1 (void)
{
  char a[30];
  v += 1;
  memcpy (a, "1234567", 7);
  memcpy (a + 7, "89abcdefg", 9);
  memcpy (a + 16, "h", 2);
  return strlen (a);	// This strlen should be optimized into 17.
}

size_t __attribute__ ((noinline, noclone))
f2 (char *a)
{
  v += 2;
  memcpy (a, "1234567", 7);
  memcpy (a + 7, "89abcdefg", 9);
  memcpy (a + 16, "h", 2);
  return strlen (a);	// This strlen should be optimized into 17.
}

size_t __attribute__ ((noinline, noclone))
f3 (void)
{
  char a[30];
  v += 3;
  a[0] = '1';
  memcpy (a + 1, "2345678", 8);
  return strlen (a);	// This strlen should be optimized into 8.
}

size_t __attribute__ ((noinline, noclone))
f4 (char *a)
{
  v += 4;
  a[0] = '1';
  memcpy (a + 1, "2345678", 8);
  return strlen (a);	// This strlen should be optimized into 8.
}

size_t __attribute__ ((noinline, noclone))
f5 (void)
{
  char a[30];
  v += 5;
  a[0] = '1';
  a[1] = '2';
  a[2] = '3';
  memcpy (a + 3, "456", 3);
  a[6] = '7';
  a[7] = 0;
  return strlen (a);	// This strlen should be optimized into 7.
}

size_t __attribute__ ((noinline, noclone))
f6 (char *a)
{
  v += 6;
  a[0] = '1';
  a[1] = '2';
  a[2] = '3';
  memcpy (a + 3, "456", 3);
  a[6] = '7';
  a[7] = 0;
  return strlen (a);	// This strlen should be optimized into 7.
}

size_t __attribute__ ((noinline, noclone))
f7 (void)
{
  char a[30];
  v += 7;
  strcpy (a, "abcde");
  int len1 = strlen (a);
  a[2] = '_';
  int len2 = strlen (a);
  return len1 + len2;	// This should be optimized into 10.
}

size_t __attribute__ ((noinline, noclone))
f8 (char *a)
{
  v += 8;
  strcpy (a, "abcde");
  int len1 = strlen (a);
  a[2] = '_';
  int len2 = strlen (a);
  return len1 + len2;	// This should be optimized into 10.
}

size_t __attribute__ ((noinline, noclone))
f9 (char b)
{
  char a[30];
  v += 9;
  strcpy (a, "foo.bar");
  a[4] = b;
  a[3] = 0;
  return strlen (a);	// This should be optimized into 3.
}

size_t __attribute__ ((noinline, noclone))
f10 (char *a, char b)
{
  v += 10;
  strcpy (a, "foo.bar");
  a[4] = b;
  a[3] = 0;
  return strlen (a);	// This should be optimized into 3.
}

size_t __attribute__ ((noinline, noclone))
f11 (void)
{
  char a[30];
  v += 11;
  strcpy (temp, "123456");
  memcpy (a, temp, 7);
  return strlen (a);	// This should be optimized into 6.
}

size_t __attribute__ ((noinline, noclone))
f12 (char *a)
{
  v += 12;
  strcpy (temp, "123456");
  memcpy (a, temp, 7);
  return strlen (a);	// This should be optimized into 6.
}

size_t __attribute__ ((noinline, noclone))
f13 (void)
{
  char a[30];
  v += 13;
  strcpy (temp, "1234567");
  memcpy (a, temp, 7);
  a[7] = 0;
  return strlen (a);	// This should be optimized into 7.
}

size_t __attribute__ ((noinline, noclone))
f14 (char *a)
{
  v += 14;
  strcpy (temp, "1234567");
  memcpy (a, temp, 7);
  a[7] = 0;
  return strlen (a);	// This should be optimized into 7.
}

size_t __attribute__ ((noinline, noclone))
f15 (void)
{
  char a[30];
  v += 15;
  strcpy (temp, "12345679");
  memcpy (a, temp, 7);
  a[7] = 0;
  return strlen (a);	// This should be optimized into 7.
}

size_t __attribute__ ((noinline, noclone))
f16 (char *a)
{
  v += 16;
  strcpy (temp, "123456789");
  memcpy (a, temp, 7);
  a[7] = 0;
  return strlen (a);	// This should be optimized into 7.
}

int
main ()
{
  char a[30];
  if (f1 () != 17 || f2 (a) != 17 || f3 () != 8 || f4 (a) != 8
      || f5 () != 7 || f6 (a) != 7 || f7 () != 10 || f8 (a) != 10
      || f9 ('_') != 3 || f10 (a, '_') != 3 || f11 () != 6 || f12 (a) != 6
      || f13 () != 7 || f14 (a) != 7 || f15 () != 7 || f16 (a) != 7)
    abort ();
  return 0;
}

/* { dg-final { scan-tree-dump-times "strlen \\(" 0 "strlen1" } } */
