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