PR c++/83394 - always_inline vs. noinline no longer diagnosed
[official-gcc.git] / gcc / testsuite / g++.dg / Wattributes-3.C
bloba70176b14b63fecd1355e07531492c60e89cd123
1 // PR c++/83394 - always_inline vs. noinline no longer diagnosed
2 // { dg-do compile }
3 // { dg-options "-Wattributes" }
5 #define ATTR(list) __attribute__ (list)
7 struct A
9   ATTR ((__noinline__)) operator int ();
12 ATTR ((__always_inline__))
13 A::operator int ()            // { dg-warning "ignoring attribute .always_inline. because it conflicts with attribute .noinline." }
15   return 0;
19 struct B
21   operator char () const;
22   ATTR ((__always_inline__)) operator int () const;
25 B::operator char () const { return 0; }
27 ATTR ((__noinline__))
28 B::operator int () const      // { dg-warning "ignoring attribute .noinline. because it conflicts with attribute .always_inline." }
30   return 0;
34 struct C
36   operator char ();
37   ATTR ((__always_inline__)) operator short ();
38   operator int ();
39   ATTR ((__noinline__)) operator long ();
42 C::operator char () { return 0; }
44 ATTR ((__noinline__))
45 C::operator short ()           // { dg-warning "ignoring attribute .noinline. because it conflicts with attribute .always_inline." }
46 { return 0; }
48 inline ATTR ((__noinline__))
49 C::operator int ()
50 { return 0; }
53 ATTR ((__always_inline__))
54 C::operator long ()           // { dg-warning "ignoring attribute .always_inline. because it conflicts with attribute .noinline." }
55 { return 0; }
58 struct D
60   int foo ();
61   int foo (int);
62   int ATTR ((const)) foo (int, int);
63   int ATTR ((pure)) foo (int, int, int);
65   int ATTR ((const)) foo (int, int, int, int);
67   int foo (int, int, int, int, int);
70 int ATTR ((const))
71 D::foo ()
72 { return 0; }
74 int ATTR ((pure))
75 D::foo (int)
76 { return 0; }
78 int ATTR ((pure))
79 D::foo (int, int)             // { dg-warning "ignoring attribute .pure. because it conflicts with attribute .const." }
80 { return 0; }
82 int ATTR ((const))
83 D::foo (int, int, int)        // { dg-warning "ignoring attribute .const. because it conflicts with attribute .pure." }
84 { return 0; }
86 int
87 D::foo (int, int, int, int) { return 0; }
89 int ATTR ((const))
90 D::foo (int, int, int, int, int) { return 0; }