2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / pr79095-5.C
blob266f4e9b15e820f9237ab51d775c3ccb46338dab
1 /* { dg-do compile } */
2 /* { dg-options "-Wall -O3" } */
4 typedef __SIZE_TYPE__ size_t;
6 struct S {
7   int *p0, *p1, *p2;
9   size_t size () const { return p1 - p0; }
11   void f (size_t n) {
12     if (n > size ())       // can't happen because
13       foo (n - size ());   //   n is in [1, MIN(size() - 1, 3)]
14     else if (n < size ())
15       bar (p0 + n);
16   }
18   void foo (size_t n)
19   {
20     size_t left = (size_t)(p2 - p1);
21     if (left >= n)
22       __builtin_memset (p2, 0, n * sizeof *p2); // { dg-bogus "maximum object size" }
24   }
26   void bar (int*);
29 void f (S &s)
31   size_t n = s.size ();
32   if (n > 1 && n < 5)
33     s.f (n - 1);