summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/execute/builtins/lib/strstr.c
blob: 7d35445063e44d8efbc8d4c59753dbedebf2c756 (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
extern void abort (void);
extern int inside_main;

__attribute__ ((__noinline__))
char *
strstr(const char *s1, const char *s2)
{
  const char *p, *q;

#ifdef __OPTIMIZE__
  if (inside_main)
    abort ();
#endif

  /* deliberately dumb algorithm */
  for (; *s1; s1++)
    {
      p = s1, q = s2;
      while (*q && *p)
	{
	  if (*q != *p)
	    break;
	  p++, q++;
	}
      if (*q == 0)
	return (char *)s1;
    }
  return 0;
}