1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fno-stack-protector -save-temps" } */
       3  
       4  #define ALIGN 32
       5  //#define EXTRA
       6  
       7  #include "bitfield-abi-warning.h"
       8  
       9  
      10  /* In f1, f2, f4, f8, f16 (and stdarg versions):  */
      11  /* { dg-final { scan-assembler-times "ldr\tx0, \\\[x1\\\]" 10 } } */
      12  
      13  /* In fp, f1p, f2p, f4p, f8p (and stdarg versions):  */
      14  /* { dg-final { scan-assembler-times "and\tw0, w1, 1" 10 } } */
      15  
      16  /* In f16p (and stdarg version):  */
      17  /* { dg-final { scan-assembler-times "and\tw0, w2, 1" 2 } } */
      18  
      19  /* In f1_stack, f2_stack, f4_stack, f8_stack, f16_stack, fp_stack,
      20     f1p_stack, f2p_stack, f4p_stack, f8p_stack:  */
      21  /* { dg-final { scan-assembler-times "ldr\tx\[0-9\]+, \\\[sp, 8\\\]" 10 } } */
      22  
      23  /* In f16p_stack:  */
      24  /* { dg-final { scan-assembler-times "ldr\tx\[0-9\]+, \\\[sp, 16\\\]" 1 } } */
      25  
      26  /* Bitfield parameter in registers.  */
      27  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for lines 47-51 (f1,
      28     f2, f4, f8, f16) because the overall alignment is > 16.  No warning
      29     expected.  */
      30  
      31  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for lines 53-57 (fp,
      32     f1p, f2p, f4p, f8p) because the alignment that GCC 9.1 calculated for the
      33     underlying type was 32 bytes (above the maximum expected of 16).  */
      34  
      35  /* Changed again in GCC 13.1.  */
      36  /* { dg-note {parameter passing for argument of type 'struct S16p' changed in GCC 13.1} "" { target *-*-* } 58 } f16p */
      37  
      38  
      39  /* Bitfield call argument in registers.  */
      40  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for lines 60-64 (g1,
      41     g2, g4, g8, g16) because the overall alignment is > 16.  No warning
      42     expected.  */
      43  
      44  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for lines 66-70 (gp,
      45     g1p, g2p, g4p, g8p), no warning expected.  */
      46  
      47  /* Changed again in GCC 13.1.  */
      48  /* { dg-note {parameter passing for argument of type 'struct S16p' changed in GCC 13.1} "" { target *-*-* } 71 } g16p */
      49  
      50  
      51  /* Bitfield parameter in stack.  */
      52  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for lines 74-78
      53     (f1_stack, f2_stack, f4_stack, f8_stack, f16_stack) because the overall
      54     alignment is > 16.  No warning expected.  */
      55  
      56  /* { dg-note {parameter passing for argument of type 'struct Sp' changed in GCC 13.1}  "" { target *-*-* } 80 } fp_stack */
      57  /* { dg-note {parameter passing for argument of type 'struct S1p' changed in GCC 13.1} "" { target *-*-* } 81 } f1p_stack */
      58  /* { dg-note {parameter passing for argument of type 'struct S2p' changed in GCC 13.1} "" { target *-*-* } 82 } f2p_stack */
      59  /* { dg-note {parameter passing for argument of type 'struct S4p' changed in GCC 13.1} "" { target *-*-* } 83 } f4p_stack */
      60  /* { dg-note {parameter passing for argument of type 'struct S8p' changed in GCC 13.1} "" { target *-*-* } 84 } f8p_stack */
      61  
      62  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for line 85
      63     (f16p_stack).  No warning expected.  */
      64  
      65  
      66  /* Bitfield call argument in stack.  */
      67  /* No change in parameter passing in GCC 9.1 nor GCC13.1 for lines 87-91
      68     (g1_stack, g2_stack, g4_stack, g8_stack, g16_stack) because the overall
      69     alignment is > 16.  No warning expected.  */
      70  
      71  /* { dg-note {parameter passing for argument of type 'struct Sp' changed in GCC 13.1}  "" { target *-*-* } 93 } gp_stack */
      72  /* { dg-note {parameter passing for argument of type 'struct S1p' changed in GCC 13.1} "" { target *-*-* } 94 } g1p_stack */
      73  /* { dg-note {parameter passing for argument of type 'struct S2p' changed in GCC 13.1} "" { target *-*-* } 95 } g2p_stack */
      74  /* { dg-note {parameter passing for argument of type 'struct S4p' changed in GCC 13.1} "" { target *-*-* } 96 } g4p_stack */
      75  /* { dg-note {parameter passing for argument of type 'struct S8p' changed in GCC 13.1} "" { target *-*-* } 97 } g8p_stack */
      76  
      77  
      78  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for line 98
      79     (g16p_stack).  No warning expected.  */
      80  
      81  
      82  /* Bitfield parameter in stdarg.  */
      83  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for lines 101-105
      84     (f1_stdarg, f2_stdarg, f4_stdarg, f8_stdarg, f16_stdarg) because the overall
      85     alignment is > 16.  No warning expected.  */
      86  
      87  /* { dg-note {parameter passing for argument of type 'struct Sp' changed in GCC 13.1}   "" { target *-*-* } 107 } fp_stdarg */
      88  /* { dg-note {parameter passing for argument of type 'struct S1p' changed in GCC 13.1}  "" { target *-*-* } 108 } f1p_stdarg */
      89  /* { dg-note {parameter passing for argument of type 'struct S2p' changed in GCC 13.1}  "" { target *-*-* } 109 } f2p_stdarg */
      90  /* { dg-note {parameter passing for argument of type 'struct S4p' changed in GCC 13.1}  "" { target *-*-* } 110 } f4p_stdarg */
      91  /* { dg-note {parameter passing for argument of type 'struct S8p' changed in GCC 13.1}  "" { target *-*-* } 111 } f8p_stdarg */
      92  
      93  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for line 112 (f16p_stdarg).
      94     No warning expected.  */
      95  
      96  /* Bitfield call argument in stdarg.  */
      97  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for lines 114-118
      98     (g1_stdarg, g2_stdarg, g4_stdarg, g8_stdarg, g16_stdarg) because the overall
      99     alignment is > 16.  No warning expected.  */
     100  
     101  /* No change in parameter passing in GCC 9.1 nor GCC 13.1 for lines 120-124
     102     (gp_stdarg, g1p_stdarg, g2p_stdarg, g4p_stdarg, g8p_stdarg), no warning
     103     expected.  */
     104  
     105  /* Changed again in GCC 13.1.  */
     106  /* { dg-note {parameter passing for argument of type 'struct S16p' changed in GCC 13.1} "" { target *-*-* } 125 } g16p_stdarg */