OSDN Git Service

2001-01-17 David Billinghurst <David.Billinghurst@riotinto.com>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / other / deprecated.C
1 /* Test __attribute__ ((deprecated)) */
2 /* { dg-do compile } */
3 /* { dg-options "-Wdeprecated-declarations -fmessage-length=0" } */
4 /* { dg-bogus "At global scope" "" { xfail *-*-* } 0 } */
5
6 #if 1
7 typedef int INT1 __attribute__((deprecated));
8 typedef INT1 INT2 __attribute__ ((__deprecated__));
9
10 typedef INT1 INT1a;                     /* { dg-warning "`INT1' is deprecated" "" } */
11 typedef INT1 INT1b __attribute__ ((deprecated));
12
13 INT1 should_be_unavailable;             /* { dg-warning "`INT1' is deprecated" "" } */
14 INT1a should_not_be_deprecated;
15
16 INT1 f1(void) __attribute__ ((deprecated)); 
17 INT1 f2(void) {}                        /* { dg-warning "`INT1' is deprecated" "" } */
18
19 INT2 f3(void) __attribute__ ((__deprecated__)); 
20 INT2 f4(void) {}                        /* { dg-warning "`INT2' is deprecated" "" } */
21 int f5(INT2 x);                         /* { dg-warning "`INT2' is deprecated" "" } */
22 int f6(INT2 x) __attribute__ ((__deprecated__));
23
24 typedef enum {red, green, blue} Color __attribute__((deprecated));
25
26 int g1;
27 int g2 __attribute__ ((deprecated));
28 int g3 __attribute__ ((__deprecated__));
29 Color k;                                /* { dg-warning "`Color' is deprecated" "" } */
30
31 typedef struct {
32   int field1;
33   int field2 __attribute__ ((deprecated));
34   int field3;
35   int field4 __attribute__ ((__deprecated__));
36   union {
37     int field5;
38     int field6 __attribute__ ((deprecated));
39   } u1;
40   int field7:1;
41   int field8:1 __attribute__ ((deprecated));
42   union {
43     int field9;
44     int field10;
45   } u2 __attribute__ ((deprecated));
46 } S1;
47
48 int func1()
49 {
50    INT1 w;                              /* { dg-warning "`INT1' is deprecated" "" } */
51    int x __attribute__ ((deprecated));
52    int y __attribute__ ((__deprecated__));
53    int z;
54    int (*pf)() = f1;                    /* { dg-warning "`f1' is deprecated" "" } */
55
56    z = w + x + y + g1 + g2 + g3;        /* { dg-warning "`x' is deprecated" "" } */
57                                         /* { dg-warning "`y' is deprecated" "" { target *-*-* } 56 } */
58                                         /* { dg-warning "`g2' is deprecated" "" { target *-*-* } 56 } */
59                                         /* { dg-warning "`g3' is deprecated" "" { target *-*-* } 56 } */
60    return f1();                         /* { dg-warning "`f1' is deprecated" "" } */
61 }
62
63 int func2(S1 *p)
64 {
65   S1 lp;
66   
67   if (p->field1)
68      return p->field2;                  /* { dg-warning "`field2' is deprecated" "" } */
69   else if (lp.field4)                   /* { dg-warning "`field4' is deprecated" "" } */
70      return p->field3;
71   
72   p->u1.field5 = g1 + p->field7;
73   p->u2.field9;                         /* { dg-warning "`u2' is deprecated" "" } */
74   return p->u1.field6 + p->field8;      /* { dg-warning "`field6' is deprecated" "" } */
75                                         /* { dg-warning "`field8' is deprecated" "" { target *-*-* } 74 } */
76 }
77
78 struct SS1 {
79   int x;
80   INT1 y;                               /* { dg-warning "`INT1' is deprecated" "" } */
81 } __attribute__ ((deprecated));
82
83 struct SS1 *p1;                         /* { dg-warning "`SS1' is deprecated" "" } */
84
85 struct __attribute__ ((__deprecated__)) SS2 {
86   int x;
87   INT1 y;                               /* { dg-warning "`INT1' is deprecated" "" } */
88 };
89
90 struct SS2 *p2;                         /* { dg-warning "`SS2' is deprecated" "" } */
91 #endif
92
93 #ifdef __cplusplus
94 class T {
95   public:
96     void member1(int) __attribute__ ((deprecated));
97     void member2(INT1) __attribute__ ((__deprecated__)); /* { dg-warning "`INT1' is deprecated" "" } */
98     int member3(T *);
99     int x;
100 } __attribute__ ((deprecated));
101
102 T *p3;
103
104 inline void T::member1(int) {}
105
106 int T::member3(T *p)
107 {
108   p->member1(1);                        /* { dg-warning "`member1' is deprecated" "" } */
109   (*p).member1(2);                      /* { dg-warning "`member1' is deprecated" "" } */
110   p->member2(1);                        /* { dg-warning "`member2' is deprecated" "" } */
111   (*p).member2(2);                      /* { dg-warning "`member2' is deprecated" "" } */
112   p->member3(p);
113   (*p).member3(p);
114   return f1();                          /* { dg-warning "`f1' is deprecated" "" } */
115 }
116 #endif
117
118