/* Check that vec_step can be used with const vector types.   This
   test is derived from parts of gcc.dg/vmx/8-02.c from Motorola's
   AltiVec testsuite.  */

/* { dg-do compile { target powerpc*-*-* } } */
/* { dg-require-effective-target powerpc_altivec_ok } */
/* { dg-options "-maltivec" } */

#include <altivec.h>

extern vector unsigned char vuc;
extern vector signed char vsc;
extern vector bool char vbc;
extern vector unsigned short vus;
extern vector signed short vss;
extern vector bool short vbs;
extern vector unsigned int vui;
extern vector signed int vsi;
extern vector bool int vbi;
extern vector pixel vp;
extern vector float vf;
extern const vector unsigned char cvuc;
extern const vector signed char cvsc;
extern const vector bool char cvbc;
extern const vector unsigned short cvus;
extern const vector signed short cvss;
extern const vector bool short cvbs;
extern const vector unsigned int cvui;
extern const vector signed int cvsi;
extern const vector bool int cvbi;
extern const vector pixel cvp;
extern const vector float cvf;

void
foo (void)
{
  int i_vuc = vec_step (vuc);
  int i_vsc = vec_step (vsc);
  int i_vbc = vec_step (vbc);
  int i_vus = vec_step (vus);
  int i_vss = vec_step (vss);
  int i_vbs = vec_step (vbs);
  int i_vui = vec_step (vui);
  int i_vsi = vec_step (vsi);
  int i_vbi = vec_step (vbi);
  int i_vp = vec_step (vp);
  int i_vf = vec_step (vf);
  int i_cvuc = vec_step (cvuc);
  int i_cvsc = vec_step (cvsc);
  int i_cvbc = vec_step (cvbc);
  int i_cvus = vec_step (cvus);
  int i_cvss = vec_step (cvss);
  int i_cvbs = vec_step (cvbs);
  int i_cvui = vec_step (cvui);
  int i_cvsi = vec_step (cvsi);
  int i_cvbi = vec_step (cvbi);
  int i_cvp = vec_step (cvp);
  int i_cvf = vec_step (cvf);
}
