// PR tree-optimization/83239 - False positive from -Wstringop-overflow
// on simple std::vector code
// { dg-do compile }
// { dg-options "-O3 -finline-limit=500 -Wall -fdump-tree-optimized"  }

#include <vector>

// Verify no warnings are issued.

template <class T>
void test_loop ()
{
  std::vector<T> a;

  int num = 2;

  while (num > 0)
    {
      const typename std::vector<T>::size_type sz = a.size ();

      if (sz < 3)
	a.assign (1, 0);
      else
	a.resize (sz - 2);

      --num;
    }
}

// Verify no warnings are issued here either.

template <class T>
void test_if (std::vector<T> &a, int num)
{
  if (num > 0)
    {
      const typename std::vector<T>::size_type sz = a.size ();

      if (sz < 3)
	a.assign (1, 0);
      else
	a.resize (sz - 2);
    }
}

// Instantiate each function on a different type to force both
// to be fully inlined.  Instantiating both on the same type
// causes the inlining heuristics to outline _M_default_append
// which, in turn, masks the warning.
template void test_loop<int>();
template void test_if<long>(std::vector<long>&, int);

// Verify that std::vector<T>::_M_default_append() has been inlined
// (the absence of warnings depends on it).
// { dg-final { scan-tree-dump-not "_ZNSt6vectorIiSaIiEE17_M_default_appendEm"  optimized } }
// { dg-final { scan-tree-dump-not "_ZNSt6vectorIPvSaIS0_EE17_M_default_appendEm" optimized } }
