1/* { dg-do compile } */
2/* { dg-options "" } */
3
4#define CONCAT_(A,B) A ## B
5#define CONCAT(A,B) CONCAT_(A,B)
6
7#define ATTR __attribute__((AT))
8#define ATSYM(suf) CONCAT (AT, CONCAT_ (_, suf))
9
10#define AT noinline
11
12typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" "" } */
13
14typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" "" } */
15
16struct ATSYM(struct) {
17  char dummy ATTR; /* { dg-warning "attribute ignored" "" } */
18} ATTR; /* { dg-warning "does not apply to types" "" } */
19
20int ATSYM(var) ATTR;  /* { dg-warning "attribute ignored" "" } */
21
22int ATSYM(fn_knrarg) (arg)
23  int arg ATTR; /* { dg-warning "attribute ignored" "" } */
24{ return 0; }
25
26int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" "" } */
27
28int ATSYM(fn_vars) (void) {
29  static int svar ATTR; /* { dg-warning "attribute ignored" "" } */
30  auto int lvar ATTR; /* { dg-warning "attribute ignored" "" } */
31  return 0;
32}
33
34
35#undef AT
36#define AT used
37
38typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" "" } */
39
40typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" "" } */
41
42struct ATSYM(struct) {
43  char dummy ATTR; /* { dg-warning "attribute ignored" "" } */
44} ATTR; /* { dg-warning "does not apply to types" "" } */
45
46int ATSYM(var) ATTR;
47
48int ATSYM(fn_knrarg) (arg)
49  int arg ATTR; /* { dg-warning "attribute ignored" "" } */
50{ return 0; }
51
52int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" "" } */
53
54int ATSYM(fn_vars) (void) {
55  static int svar ATTR;
56  auto int lvar ATTR; /* { dg-warning "attribute ignored" "" } */
57  return 0;
58}
59