/* { dg-do compile } */ /* { dg-options "" } */ #define CONCAT_(A,B) A ## B #define CONCAT(A,B) CONCAT_(A,B) #define ATTR __attribute__((AT)) #define ATSYM(suf) CONCAT (AT, CONCAT_ (_, suf)) #define AT noinline typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" "" } */ typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" "" } */ struct ATSYM(struct) { char dummy ATTR; /* { dg-warning "attribute ignored" "" } */ } ATTR; /* { dg-warning "does not apply to types" "" } */ int ATSYM(var) ATTR; /* { dg-warning "attribute ignored" "" } */ int ATSYM(fn_knrarg) (arg) int arg ATTR; /* { dg-warning "attribute ignored" "" } */ { return 0; } int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" "" } */ int ATSYM(fn_vars) (void) { static int svar ATTR; /* { dg-warning "attribute ignored" "" } */ auto int lvar ATTR; /* { dg-warning "attribute ignored" "" } */ return 0; } #undef AT #define AT used typedef int ATSYM(type) ATTR; /* used attribute is no longer ignored. */ typedef int (*ATSYM(fntype))(void) ATTR; /* used attribute is no longer ignored. */ struct ATSYM(struct) { char dummy ATTR; /* { dg-warning "attribute ignored" "" } */ } ATTR; /* { dg-warning "does not apply to types" "" } */ int ATSYM(var) ATTR; int ATSYM(fn_knrarg) (arg) int arg ATTR; /* { dg-warning "attribute ignored" "" } */ { return 0; } int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" "" } */ int ATSYM(fn_vars) (void) { static int svar ATTR; auto int lvar ATTR; /* { dg-warning "attribute ignored" "" } */ return 0; } /* PR 28287 */ /* These are invalid on all targets. Applying to PARM_ or FIELD_DECL also caused a tree checking ice on targets that support weak, */ #undef AT #define AT weak typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" "" } */ typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" "" } */ struct ATSYM(struct) { char dummy ATTR; /* { dg-warning "attribute ignored" "" } */ }; int ATSYM(fn_knrarg) (arg) int arg ATTR; /* { dg-warning "attribute ignored" "" } */ { return 0; } int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" "" } */ /* PR target/28648 */ /* These are invalid on all targets. Applying to PARM_ or FIELD_DECL also caused a tree checking ice on targets that support dllimport. */ #undef AT #define AT dllimport typedef int ATSYM(type) ATTR; /* { dg-warning "attribute |directive ignored" "" } */ typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute |directive ignored" "" } */ struct ATSYM(struct) { char dummy ATTR; /* { dg-warning "attribute |directive ignored" "" } */ }; int ATSYM(fn_knrarg) (arg) int arg ATTR; /* { dg-warning "attribute |directive ignored" "" } */ { return 0; } int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute |directive ignored" "" } */