(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
diag-aka-5a.c
       1  #define IS_SYSTEM_HEADER
       2  #include "diag-aka-5.h"
       3  
       4  typedef user_enum user_enum_copy;
       5  
       6  struct s { int i; };
       7  
       8  user_enum ue1;
       9  user_enum_copy ue2;
      10  user_enum_ptr ue_ptr1;
      11  user_enum *ue_ptr2;
      12  const user_enum *const_ue_ptr1;
      13  const user_enum_copy *const_ue_ptr2;
      14  volatile user_enum *volatile_ue_ptr1;
      15  volatile user_enum_copy *volatile_ue_ptr2;
      16  __extension__ _Atomic user_enum *atomic_ue_ptr1;
      17  __extension__ _Atomic user_enum_copy *atomic_ue_ptr2;
      18  user_enum (*ue_array_ptr1)[10];
      19  user_enum_copy (*ue_array_ptr2)[10];
      20  user_enum (*ue_fn_ptr1) (void);
      21  void (*ue_fn_ptr2) (user_enum);
      22  void (*ue_fn_ptr3) (user_enum, ...);
      23  user_enum_copy (*ue_fn_ptr4) (void);
      24  void (*ue_fn_ptr5) (user_enum_copy);
      25  void (*ue_fn_ptr6) (user_enum_copy, ...);
      26  user_enum (*__attribute__((__transaction_unsafe__)) unsafe_ue_fn_ptr1) (void);
      27  user_enum_copy (*__attribute__((__transaction_unsafe__)) unsafe_ue_fn_ptr2) (void);
      28  
      29  user_struct us1;
      30  user_struct_copy us2;
      31  user_struct_ptr us_ptr1;
      32  user_struct *us_ptr2;
      33  const user_struct *const_us_ptr1;
      34  const user_struct_copy *const_us_ptr2;
      35  
      36  user_union uu1;
      37  user_union_copy uu2;
      38  user_union_ptr uu_ptr1;
      39  user_union *uu_ptr2;
      40  const user_union *const_uu_ptr1;
      41  const user_union_copy *const_uu_ptr2;
      42  
      43  user_vector uv1;
      44  user_vector_copy uv2;
      45  user_vector_ptr uv_ptr1;
      46  user_vector *uv_ptr2;
      47  const user_vector *const_uv_ptr1;
      48  const user_vector_copy *const_uv_ptr2;
      49  
      50  user_int ui1;
      51  user_int_copy ui2;
      52  user_int_ptr ui_ptr1;
      53  user_int *ui_ptr2;
      54  const user_int *const_ui_ptr1;
      55  const user_int_copy *const_ui_ptr2;
      56  volatile user_int *volatile_ui_ptr1;
      57  volatile user_int_copy *volatile_ui_ptr2;
      58  __extension__ _Atomic user_int *atomic_ui_ptr1;
      59  __extension__ _Atomic user_int_copy *atomic_ui_ptr2;
      60  user_int (*ui_array_ptr1)[10];
      61  user_int_copy (*ui_array_ptr2)[10];
      62  user_int (*ui_fn_ptr1) (void);
      63  void (*ui_fn_ptr2) (user_int);
      64  void (*ui_fn_ptr3) (user_int, ...);
      65  user_int_copy (*ui_fn_ptr4) (void);
      66  void (*ui_fn_ptr5) (user_int_copy);
      67  void (*ui_fn_ptr6) (user_int_copy, ...);
      68  user_int (*__attribute__((__transaction_unsafe__)) unsafe_ui_fn_ptr1) (void);
      69  user_int_copy (*__attribute__((__transaction_unsafe__)) unsafe_ui_fn_ptr2) (void);
      70  
      71  void f (struct s s)
      72  {
      73    ue1 = s; /* { dg-error {assigning to type 'user_enum' from type 'struct s'} } */
      74    ue2 = s; /* { dg-error {assigning to type 'user_enum_copy' {aka 'user_enum'} from type 'struct s'} } */
      75    ue_ptr1 = &s; /* { dg-error {assignment to 'user_enum_ptr' {aka 'user_enum \*'} from incompatible pointer type 'struct s \*'} } */
      76    ue_ptr2 = &s; /* { dg-error {assignment to 'user_enum \*' from incompatible pointer type 'struct s \*'} } */
      77    const_ue_ptr1 = &s; /* { dg-error {assignment to 'const user_enum \*' from incompatible pointer type 'struct s \*'} } */
      78    const_ue_ptr2 = &s; /* { dg-error {assignment to 'const user_enum_copy \*' {aka 'const user_enum \*'} from incompatible pointer type 'struct s \*'} } */
      79    volatile_ue_ptr1 = &s; /* { dg-error {assignment to 'volatile user_enum \*' from incompatible pointer type 'struct s \*'} } */
      80    volatile_ue_ptr2 = &s; /* { dg-error {assignment to 'volatile user_enum_copy \*' {aka 'volatile user_enum \*'} from incompatible pointer type 'struct s \*'} } */
      81    atomic_ue_ptr1 = &s; /* { dg-error {assignment to '_Atomic user_enum \*' from incompatible pointer type 'struct s \*'} } */
      82    atomic_ue_ptr2 = &s; /* { dg-error {assignment to '_Atomic user_enum_copy \*' {aka '_Atomic user_enum \*'} from incompatible pointer type 'struct s \*'} } */
      83    ue_array_ptr1 = &s; /* { dg-error {assignment to 'user_enum \(\*\)\[10\]' from incompatible pointer type 'struct s \*'} } */
      84    ue_array_ptr2 = &s; /* { dg-error {assignment to 'user_enum_copy \(\*\)\[10\]' {aka 'user_enum \(\*\)\[10\]'} from incompatible pointer type 'struct s \*'} } */
      85    ue_fn_ptr1 = &s; /* { dg-error {assignment to 'user_enum \(\*\)\(void\)' from incompatible pointer type 'struct s \*'} } */
      86    ue_fn_ptr2 = &s; /* { dg-error {assignment to 'void \(\*\)\(user_enum\)' from incompatible pointer type 'struct s \*'} } */
      87    ue_fn_ptr3 = &s; /* { dg-error {assignment to 'void \(\*\)\(user_enum, \.\.\.\)' from incompatible pointer type 'struct s \*'} } */
      88    ue_fn_ptr4 = &s; /* { dg-error {assignment to 'user_enum_copy \(\*\)\(void\)' {aka 'user_enum \(\*\)\(void\)'} from incompatible pointer type 'struct s \*'} } */
      89    ue_fn_ptr5 = &s; /* { dg-error {assignment to 'void \(\*\)\(user_enum_copy\)' {aka 'void \(\*\)\(user_enum\)'} from incompatible pointer type 'struct s \*'} } */
      90    ue_fn_ptr6 = &s; /* { dg-error {assignment to 'void \(\*\)\(user_enum_copy, \.\.\.\)' {aka 'void \(\*\)\(user_enum, \.\.\.\)'} from incompatible pointer type 'struct s \*'} } */
      91    unsafe_ue_fn_ptr1 = &s; /* { dg-error {assignment to 'user_enum \(__attribute__\(\(transaction_unsafe\)\) \*\)\(void\)' from incompatible pointer type 'struct s \*'} } */
      92    unsafe_ue_fn_ptr2 = &s; /* { dg-error {assignment to 'user_enum_copy \(__attribute__\(\(transaction_unsafe\)\) \*\)\(void\)' {aka 'user_enum \(__attribute__\(\(transaction_unsafe\)\) \*\)\(void\)'} from incompatible pointer type 'struct s \*'} } */
      93  
      94    us1 = s; /* { dg-error {assigning to type 'user_struct' from type 'struct s'} } */
      95    us2 = s; /* { dg-error {assigning to type 'user_struct_copy' {aka 'user_struct'} from type 'struct s'} } */
      96    us_ptr1 = &s; /* { dg-error {assignment to 'user_struct_ptr' {aka 'user_struct \*'} from incompatible pointer type 'struct s \*'} } */
      97    us_ptr2 = &s; /* { dg-error {assignment to 'user_struct \*' from incompatible pointer type 'struct s \*'} } */
      98    const_us_ptr1 = &s; /* { dg-error {assignment to 'const user_struct \*' from incompatible pointer type 'struct s \*'} } */
      99    const_us_ptr2 = &s; /* { dg-error {assignment to 'const user_struct_copy \*' {aka 'const user_struct \*'} from incompatible pointer type 'struct s \*'} } */
     100  
     101    uu1 = s; /* { dg-error {assigning to type 'user_union' from type 'struct s'} } */
     102    uu2 = s; /* { dg-error {assigning to type 'user_union_copy' {aka 'user_union'} from type 'struct s'} } */
     103    uu_ptr1 = &s; /* { dg-error {assignment to 'user_union_ptr' {aka 'user_union \*'} from incompatible pointer type 'struct s \*'} } */
     104    uu_ptr2 = &s; /* { dg-error {assignment to 'user_union \*' from incompatible pointer type 'struct s \*'} } */
     105    const_uu_ptr1 = &s; /* { dg-error {assignment to 'const user_union \*' from incompatible pointer type 'struct s \*'} } */
     106    const_uu_ptr2 = &s; /* { dg-error {assignment to 'const user_union_copy \*' {aka 'const user_union \*'} from incompatible pointer type 'struct s \*'} } */
     107  
     108    uv1 = s; /* { dg-error {assigning to type 'user_vector' from type 'struct s'} } */
     109    uv2 = s; /* { dg-error {assigning to type 'user_vector_copy' {aka 'user_vector'} from type 'struct s'} } */
     110    uv_ptr1 = &s; /* { dg-error {assignment to 'user_vector_ptr' {aka 'user_vector \*'} from incompatible pointer type 'struct s \*'} } */
     111    uv_ptr2 = &s; /* { dg-error {assignment to 'user_vector \*' from incompatible pointer type 'struct s \*'} } */
     112    const_uv_ptr1 = &s; /* { dg-error {assignment to 'const user_vector \*' from incompatible pointer type 'struct s \*'} } */
     113    const_uv_ptr2 = &s; /* { dg-error {assignment to 'const user_vector_copy \*' {aka 'const user_vector \*'} from incompatible pointer type 'struct s \*'} } */
     114  
     115    ui1 = s; /* { dg-error {assigning to type 'user_int' {aka 'int'} from type 'struct s'} } */
     116    ui2 = s; /* { dg-error {assigning to type 'user_int_copy' {aka 'int'} from type 'struct s'} } */
     117    ui_ptr1 = &s; /* { dg-error {assignment to 'user_int_ptr' {aka 'int \*'} from incompatible pointer type 'struct s \*'} } */
     118    ui_ptr2 = &s; /* { dg-error {assignment to 'user_int \*' {aka 'int \*'} from incompatible pointer type 'struct s \*'} } */
     119    const_ui_ptr1 = &s; /* { dg-error {assignment to 'const user_int \*' {aka 'const int \*'} from incompatible pointer type 'struct s \*'} } */
     120    const_ui_ptr2 = &s; /* { dg-error {assignment to 'const user_int_copy \*' {aka 'const int \*'} from incompatible pointer type 'struct s \*'} } */
     121    volatile_ui_ptr1 = &s; /* { dg-error {assignment to 'volatile user_int \*' {aka 'volatile int \*'} from incompatible pointer type 'struct s \*'} } */
     122    volatile_ui_ptr2 = &s; /* { dg-error {assignment to 'volatile user_int_copy \*' {aka 'volatile int \*'} from incompatible pointer type 'struct s \*'} } */
     123    atomic_ui_ptr1 = &s; /* { dg-error {assignment to '_Atomic user_int \*' {aka '_Atomic int \*'} from incompatible pointer type 'struct s \*'} } */
     124    atomic_ui_ptr2 = &s; /* { dg-error {assignment to '_Atomic user_int_copy \*' {aka '_Atomic int \*'} from incompatible pointer type 'struct s \*'} } */
     125    ui_array_ptr1 = &s; /* { dg-error {assignment to 'user_int \(\*\)\[10\]' {aka 'int \(\*\)\[10\]'} from incompatible pointer type 'struct s \*'} } */
     126    ui_array_ptr2 = &s; /* { dg-error {assignment to 'user_int_copy \(\*\)\[10\]' {aka 'int \(\*\)\[10\]'} from incompatible pointer type 'struct s \*'} } */
     127    ui_fn_ptr1 = &s; /* { dg-error {assignment to 'user_int \(\*\)\(void\)' {aka 'int \(\*\)\(void\)'} from incompatible pointer type 'struct s \*'} } */
     128    ui_fn_ptr2 = &s; /* { dg-error {assignment to 'void \(\*\)\(user_int\)' {aka 'void \(\*\)\(int\)'} from incompatible pointer type 'struct s \*'} } */
     129    ui_fn_ptr3 = &s; /* { dg-error {assignment to 'void \(\*\)\(user_int, \.\.\.\)' {aka 'void \(\*\)\(int, \.\.\.\)'} from incompatible pointer type 'struct s \*'} } */
     130    ui_fn_ptr4 = &s; /* { dg-error {assignment to 'user_int_copy \(\*\)\(void\)' {aka 'int \(\*\)\(void\)'} from incompatible pointer type 'struct s \*'} } */
     131    ui_fn_ptr5 = &s; /* { dg-error {assignment to 'void \(\*\)\(user_int_copy\)' {aka 'void \(\*\)\(int\)'} from incompatible pointer type 'struct s \*'} } */
     132    ui_fn_ptr6 = &s; /* { dg-error {assignment to 'void \(\*\)\(user_int_copy, \.\.\.\)' {aka 'void \(\*\)\(int, \.\.\.\)'} from incompatible pointer type 'struct s \*'} } */
     133    unsafe_ui_fn_ptr1 = &s; /* { dg-error {assignment to 'user_int \(__attribute__\(\(transaction_unsafe\)\) \*\)\(void\)' {aka 'int \(__attribute__\(\(transaction_unsafe\)\) \*\)\(void\)'} from incompatible pointer type 'struct s \*'} } */
     134    unsafe_ui_fn_ptr2 = &s; /* { dg-error {assignment to 'user_int_copy \(__attribute__\(\(transaction_unsafe\)\) \*\)\(void\)' {aka 'int \(__attribute__\(\(transaction_unsafe\)\) \*\)\(void\)'} from incompatible pointer type 'struct s \*'} } */
     135  }