// { 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 "" } float to int
void rock ();
void rock (int const &, int  const & = 3.5f);       // { dg-warning "" } float to int

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
}

// 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);

}
