1  /* { dg-require-effective-target vect_int } */
       2  /* { dg-require-effective-target vect_shift } */
       3  
       4  #include <stdarg.h>
       5  #include "tree-vect.h"
       6  #include <stdbool.h>
       7  
       8  extern void abort(void);
       9  
      10  typedef struct {
      11      int  c;
      12      int  b;
      13      bool a : 1;
      14      int  d : 31;
      15  } struct_t;
      16  
      17  #define N 16
      18  #define ELT_F { 0xFFFFFFFF, 0xFFFFFFFF, 0, 0x7FFFFFFF }
      19  #define ELT_T { 0xFFFFFFFF, 0xFFFFFFFF, 1, 0x7FFFFFFF }
      20  
      21  struct_t vect_false[N] = { ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F,
      22  			   ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F  };
      23  struct_t vect_true[N]  = { ELT_F, ELT_F, ELT_T, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F,
      24  			   ELT_F, ELT_F, ELT_T, ELT_F, ELT_F, ELT_F, ELT_F, ELT_F  };
      25  int main (void)
      26  {
      27    unsigned ret = 0;
      28    for (unsigned i = 0; i < N; i++)
      29    {
      30        ret |= vect_false[i].a;
      31    }
      32    if (ret)
      33      abort ();
      34  
      35    for (unsigned i = 0; i < N; i++)
      36    {
      37        ret |= vect_true[i].a;
      38    }
      39    if (!ret)
      40      abort ();
      41  
      42    return 0;
      43  }
      44  
      45  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */