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 12 typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" } */ 13 14 typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" } */ 15 ATSYM(struct)16struct ATSYM(struct) { 17 char dummy ATTR; /* { dg-warning "attribute ignored" } */ 18 } ATTR; /* { dg-warning "does not apply to types" } */ 19 20 int ATSYM(var) ATTR; /* { dg-warning "attribute ignored" } */ 21 22 int ATSYM(fn_knrarg) (arg) 23 int arg ATTR; /* { dg-warning "attribute ignored" } */ 24 { return 0; } 25 ATSYM(fn_isoarg)26int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" } */ 27 ATSYM(fn_vars)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 38 typedef int ATSYM(type) ATTR; /* used attribute is no longer 39 ignored. */ 40 41 typedef int (*ATSYM(fntype))(void) ATTR; /* used attribute is no 42 longer ignored. */ 43 ATSYM(struct)44struct ATSYM(struct) { 45 char dummy ATTR; /* { dg-warning "attribute ignored" } */ 46 } ATTR; /* { dg-warning "does not apply to types" } */ 47 48 int ATSYM(var) ATTR; 49 50 int ATSYM(fn_knrarg) (arg) 51 int arg ATTR; /* { dg-warning "attribute ignored" } */ 52 { return 0; } 53 ATSYM(fn_isoarg)54int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" } */ 55 ATSYM(fn_vars)56int ATSYM(fn_vars) (void) { 57 static int svar ATTR; 58 auto int lvar ATTR; /* { dg-warning "attribute ignored" } */ 59 return 0; 60 } 61 62 63 /* PR 28287 */ 64 /* These are invalid on all targets. Applying to PARM_ or FIELD_DECL 65 also caused a tree checking ice on targets that support weak, */ 66 #undef AT 67 #define AT weak 68 69 typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" } */ 70 71 typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" } */ 72 ATSYM(struct)73struct ATSYM(struct) { 74 char dummy ATTR; /* { dg-warning "attribute ignored" } */ 75 }; 76 77 int ATSYM(fn_knrarg) (arg) 78 int arg ATTR; /* { dg-warning "attribute ignored" } */ 79 { return 0; } 80 ATSYM(fn_isoarg)81int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" } */ 82 83 84 /* PR target/28648 */ 85 /* These are invalid on all targets. Applying to PARM_ or FIELD_DECL 86 also caused a tree checking ice on targets that support dllimport. */ 87 #undef AT 88 #define AT dllimport 89 90 typedef int ATSYM(type) ATTR; /* { dg-warning "attribute |directive ignored" } */ 91 92 typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute |directive ignored" } */ 93 ATSYM(struct)94struct ATSYM(struct) { 95 char dummy ATTR; /* { dg-warning "attribute |directive ignored" } */ 96 }; 97 98 int ATSYM(fn_knrarg) (arg) 99 int arg ATTR; /* { dg-warning "attribute |directive ignored" } */ 100 { return 0; } 101 ATSYM(fn_isoarg)102int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute |directive ignored" } */ 103