// PR c++/83394 - always_inline vs. noinline no longer diagnosed
// { dg-do compile }
// { dg-options "-Wattributes" }

#define ATTR(list) __attribute__ (list)

struct A
{
  ATTR ((__noinline__)) operator int ();
};

ATTR ((__always_inline__))
A::operator int ()            // { dg-warning "ignoring attribute .always_inline. because it conflicts with attribute .noinline." }
{
  return 0;
}


struct B
{
  operator char () const;
  ATTR ((__always_inline__)) operator int () const;
};

B::operator char () const { return 0; }

ATTR ((__noinline__))
B::operator int () const      // { dg-warning "ignoring attribute .noinline. because it conflicts with attribute .always_inline." }
// { dg-warning "function might not be inlinable" "" { target *-*-* } .-1 }

{
  return 0;
}


struct C
{
  operator char ();
  ATTR ((__always_inline__)) operator short ();
  operator int ();
  ATTR ((__noinline__)) operator long ();
};

C::operator char () { return 0; }

ATTR ((__noinline__))
C::operator short ()           // { dg-warning "ignoring attribute .noinline. because it conflicts with attribute .always_inline." }
// { dg-warning "function might not be inlinable" "" { target *-*-* } .-1 }
{ return 0; }

inline ATTR ((__noinline__))
C::operator int ()
{ return 0; }


ATTR ((__always_inline__))
C::operator long ()           // { dg-warning "ignoring attribute .always_inline. because it conflicts with attribute .noinline." }
{ return 0; }


struct D
{
  int foo ();
  int foo (int);
  int ATTR ((const)) foo (int, int);
  int ATTR ((pure)) foo (int, int, int);

  int ATTR ((const)) foo (int, int, int, int);

  int foo (int, int, int, int, int);
};

int ATTR ((const))
D::foo ()
{ return 0; }

int ATTR ((pure))
D::foo (int)
{ return 0; }

int ATTR ((pure))
D::foo (int, int)             // { dg-warning "ignoring attribute .pure. because it conflicts with attribute .const." }
{ return 0; }

int ATTR ((const))
D::foo (int, int, int)        // { dg-warning "ignoring attribute .const. because it conflicts with attribute .pure." }
{ return 0; }

int
D::foo (int, int, int, int) { return 0; }

int ATTR ((const))
D::foo (int, int, int, int, int) { return 0; }
