// { dg-do assemble  }
// { dg-options "-Wconversion" }

// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 6 Mar 2000 <nathan@codesourcery.com>

// initialization to 'int' from to 'double' We expect consistent warnings
// whenever a float is implicitly truncated to int, make sure references
// don't confuse us, as Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at> found out.

struct X
{
  X (int const &);
  X (int const &, int const &);
};

void foo (int const &);
void wibble (int const &);
void wibble (int const &, int const &);
void punk (int const & = 3.5f);        // { dg-warning "" } in passing
void rock ();
void rock (int const &, int  const & = 3.5f);       // { dg-warning "" } in passing

void fn ()
{
  X x2(3.5f);       // { dg-warning "" } float to int
  X x4(1, 3.5f);    // { dg-warning "" } float to int
  X x6(3.5f, 1);    // { dg-warning "" } float to int

  X y2 = 3.5f;      // { dg-warning "" } float to int

  int j2 (3.5f);    // { dg-warning "" } float to int

  int k2 = 3.5f;    // { dg-warning "" } float to int

  j2 = 3.5f;        // { dg-warning "" } float to int

  foo (3.5f);       // { dg-warning "" } float to int

  wibble (3.5f);    // { dg-warning "" } float to int
  wibble (1, 3.5f); // { dg-warning "" } float to int
  wibble (3.5f, 1); // { dg-warning "" } float to int

  punk ();          // { dg-warning "" } float to int
  rock (1);         // { dg-warning "" } float to int
}

// and make sure we really know when something's unsigned
void foo ()
{
  X x2(-1);
  X x4(1, -1);
  X x6(-1, 1);

  X y2 = -1;

  int j2 (-1);

  int k2 = -1;

  j2 = -1;

  foo (-1);

  wibble (-1);
  wibble (1, -1);
  wibble (-1, 1);

}
