Viewing file: Wattributes-3.C (2.11 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// 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; }
|