/* Test __attribute__ ((deprecated)) */
/* { dg-do compile } */
/* { dg-options "-Wdeprecated-declarations" } */

#if 1
typedef int INT1 __attribute__((deprecated));
typedef INT1 INT2 __attribute__ ((__deprecated__));

typedef INT1 INT1a; 			/* { dg-warning "`INT1' is deprecated" "" } */
typedef INT1 INT1b __attribute__ ((deprecated));

INT1 should_be_unavailable; 		/* { dg-warning "`INT1' is deprecated" "" } */
INT1a should_not_be_deprecated;

INT1 f1(void) __attribute__ ((deprecated)); 
INT1 f2(void) { return 0; }		/* { dg-warning "`INT1' is deprecated" "" } */

INT2 f3(void) __attribute__ ((__deprecated__)); 
INT2 f4(void) { return 0; }		/* { dg-warning "`INT2' is deprecated" "" } */
int f5(INT2 x);				/* { dg-warning "`INT2' is deprecated" "" } */
int f6(INT2 x) __attribute__ ((__deprecated__)); /* { dg-warning "`INT2' is deprecated" "" } */

typedef enum {red, green, blue} Color __attribute__((deprecated));

int g1;
int g2 __attribute__ ((deprecated));
int g3 __attribute__ ((__deprecated__));
Color k;				/* { dg-warning "`Color' is deprecated" "" } */

typedef struct {
  int field1;
  int field2 __attribute__ ((deprecated));
  int field3;
  int field4 __attribute__ ((__deprecated__));
  union {
    int field5;
    int field6 __attribute__ ((deprecated));
  } u1;
  int field7:1;
  int field8:1 __attribute__ ((deprecated));
  union {
    int field9;
    int field10;
  } u2 __attribute__ ((deprecated));
} S1;

int func1()
{
   INT1 w;				/* { dg-warning "`INT1' is deprecated" "" } */
   int x __attribute__ ((deprecated));
   int y __attribute__ ((__deprecated__));
   int z;
   int (*pf)() = f1;			/* { dg-warning "`f1' is deprecated" "" } */

   z = w + x + y + g1 + g2 + g3;	/* { dg-warning "`x' is deprecated" "" } */
   					/* { dg-warning "`y' is deprecated" "" { target *-*-* } 55 } */
   					/* { dg-warning "`g2' is deprecated" "" { target *-*-* } 55 } */
   					/* { dg-warning "`g3' is deprecated" "" { target *-*-* } 55 } */
   return f1(); 			/* { dg-warning "`f1' is deprecated" "" } */
}

int func2(S1 *p)
{
  S1 lp;
  
  if (p->field1)
     return p->field2;			/* { dg-warning "`field2' is deprecated" "" } */
  else if (lp.field4)			/* { dg-warning "`field4' is deprecated" "" } */
     return p->field3;
  
  p->u1.field5 = g1 + p->field7;
  p->u2.field9;				/* { dg-warning "`u2' is deprecated" "" } */
  return p->u1.field6 + p->field8;	/* { dg-warning "`field6' is deprecated" "" } */
  					/* { dg-warning "`field8' is deprecated" "" { target *-*-* } 73 } */
}

struct SS1 {
  int x;
  INT1 y; 				/* { dg-warning "`INT1' is deprecated" "" } */
} __attribute__ ((deprecated));

struct SS1 *p1;				/* { dg-warning "`SS1' is deprecated" "" } */

struct __attribute__ ((__deprecated__)) SS2 {
  int x;
  INT1 y; 				/* { dg-warning "`INT1' is deprecated" "" } */
};

struct SS2 *p2;				/* { dg-warning "`SS2' is deprecated" "" } */
#endif

#ifdef __cplusplus
class T {
  public:
    void member1(int) __attribute__ ((deprecated));
    void member2(INT1) __attribute__ ((__deprecated__));
    int member3(T *);
    int x;
} __attribute__ ((deprecated));

T *p2;

inline void T::member1(int) {}

int T::member2(T *p)
{
  p->member1(1);			/* { xxdg-warning "`member1' is deprecated" "" } */
  (*p).member1(2);			/* { xxdg-warning "`member1' is deprecated" "" } */
  p->member2(1);			/* { xxdg-warning "`member2' is deprecated" "" } */
  (*p).member2(2);			/* { xxdg-warning "`member2' is deprecated" "" } */
  p->member3(p);
  (*p).member3(p);
  return f1(); 				/* { xxdg-warning "`f1' is deprecated" "" } */
}
#endif


