(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr46620.c
       1  /* PR tree-optimization/46620 */
       2  /* SRA bitfield grouping used to lose track at padding bitfields in
       3     the middle of a word.  */
       4  /* { dg-do run } */
       5  /* { dg-options "-O2" } */
       6  
       7  #include <stdlib.h>
       8  
       9  struct PCT
      10  {
      11    unsigned char	pi1	: 4;
      12    unsigned char	pi2	: 3;
      13    unsigned char	pif	: 5;
      14  
      15    unsigned char	sl	: 2;
      16    unsigned char	uc	: 1;
      17    unsigned char	st	: 1;
      18  
      19    unsigned char	p	: 1;
      20    unsigned char	cs	: 1;
      21    unsigned char	ss	: 1;
      22  
      23    unsigned char	pc	: 3;
      24    unsigned char	dmv	: 4;
      25    unsigned char	cv	: 4;
      26  };
      27  
      28  struct rt
      29  {
      30    struct rt*		d;
      31    void (*edo)(void * const);
      32    short			lId;
      33    char          dac;
      34  };
      35  
      36  struct pedr
      37  {
      38    struct rt re;
      39    struct PCT pc;
      40    unsigned char mid;
      41  } ;
      42  
      43  void __attribute__((__noinline__))
      44  rei(struct rt* const me, unsigned short anId, void *ad )
      45  {
      46    asm volatile ("");
      47  }
      48  
      49  void __attribute__((__noinline__))
      50  pedrdo(void * const p)
      51  {
      52    asm volatile ("");
      53  }
      54  
      55  void __attribute__((__noinline__))
      56  pedri (struct pedr* const  me, struct PCT ppc, unsigned char pmid)
      57  {
      58    rei(&(me->re), 0x7604, 0);
      59    me->pc = ppc;
      60    me->mid = pmid;
      61    (me)->re.edo = pedrdo;
      62  }
      63  
      64  int main()
      65  {
      66    struct PCT ps;
      67    struct pedr pm;
      68  
      69    pm.pc.dmv = 0;
      70    ps.dmv = 1;
      71    pedri(&pm, ps, 32);
      72  
      73    if (pm.pc.dmv != 1)
      74      abort ();
      75    exit (0);
      76  }