(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
attr-invalid.c
       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  
      16  struct 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  
      26  int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" } */
      27  
      28  int 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  
      44  struct 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  
      54  int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" } */
      55  
      56  int 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  
      73  struct 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  
      81  int 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  
      94  struct 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  
     102  int ATSYM(fn_isoarg) (int arg ATTR) { return 0; }  /* { dg-warning "attribute |directive ignored" } */