// Build don't link:

// Copyright (C) 1999 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 21 Nov 1999 <nathan@acm.org>

// make sure we only warn on assigning a negative (signed) value
// to an unsigned type, and don't warn just if the unsigned value
// happens to have the top bit set.

typedef unsigned U;

void fn (unsigned);

void fu ()
{
  unsigned s1 = -1u;
  unsigned s2(-1u);
  unsigned volatile s3 = -1u;
  unsigned const s4 = -1u;
  unsigned const &s5(-1u);
  s1 = -1u;
  fn (-1u);
}

void fU ()
{
  U s1 = -1u;
  U s2(-1u);
  U volatile s3 = -1u;
  U const s4 = -1u;
  U const &s5(-1u);
  s1 = -1u;
  fn (-1u);
}

void fs ()
{
  unsigned s1 = -1;         // WARNING - initialization
  unsigned s2(-1);          // WARNING - initialization
  unsigned volatile s3 = -1;// WARNING - initialization
  unsigned const s4 = -1;   // WARNING - initialization
  unsigned const &s5(-1);   // WARNING - initialization
  s1 = -1;                  // WARNING - assignment
  fn (-1);                  // WARNING - passing
}

void fss ()
{
  unsigned s1 = -(-1);
  unsigned s2(-(-1));
  unsigned volatile s3 = -(-1);
  unsigned const s4 = -(-1);
  unsigned const &s5(-(-1));
  s1 = -(-1);
  fn (-(-1));
}

void fsz ()
{
  unsigned s1 = -0;
  unsigned s2(-0);
  unsigned volatile s3 = -0;
  unsigned const s4 = -0;
  unsigned const &s5(-0);
  s1 = -0;
  fn (-0);
}
