1  /* Verify strlen results of vector assignments.
       2     { dg-do compile }
       3     { dg-options "-O2 -Wall -fdump-tree-optimized" } */
       4  
       5  #include "strlenopt.h"
       6  
       7  #define V(N) __attribute__ ((vector_size (N)))
       8  
       9  typedef V (1) char VC1;
      10  typedef V (2) char VC2;
      11  typedef V (4) char VC4;
      12  typedef V (8) char VC8;
      13  typedef V (16) char VC16;
      14  
      15  extern char a[];
      16  
      17  #define A(expr) ((expr) ? (void)0 : abort ())
      18  
      19  void test_fold (int i)
      20  {
      21    *(VC4*)a = (VC4){ };
      22    A (strlen (a) == 0);
      23    A (!a[1] && !a[2] && !a[3]);
      24  
      25    *(VC4*)a = (VC4){ 0, 1 };
      26    A (strlen (a) == 0);
      27    A (a[1] == 1 && !a[2] && !a[3]);
      28  
      29    *(VC4*)a = (VC4){ 1 };
      30    A (strlen (a) == 1);
      31    A (!a[1] && !a[2] && !a[3]);
      32  
      33    *(VC4*)a = (VC4){ 1, 0, 3 };
      34    A (strlen (a) == 1);
      35    A (!a[1] && a[2] == 3 && !a[3]);
      36  
      37    *(VC4*)a = (VC4){ 1, 2 };
      38    A (strlen (a) == 2);
      39    A (!a[2] && !a[3]);
      40  
      41    *(VC4*)a = (VC4){ 1, 2, 0, 4 };
      42    A (strlen (a) == 2);
      43    A (!a[2] && a[3] == 4);
      44  
      45    *(VC4*)a = (VC4){ 1, 2, 3 };
      46    A (strlen (a) == 3);
      47    A (!a[3]);
      48  
      49    *(VC8*)a = (VC8){ 1, 2, 3, 0, 5 };
      50    A (strlen (a) == 3);
      51  
      52    *(VC8*)a = (VC8){ 1, 2, 3, 0, 5, 6 };
      53    A (strlen (a) == 3);
      54  
      55    *(VC8*)a = (VC8){ 1, 2, 3, 0, 5, 6, 7, 8 };
      56    A (strlen (a) == 3);
      57    A (strlen (a + 1) == 2);
      58    A (strlen (a + 2) == 1);
      59    A (strlen (a + 3) == 0);
      60  
      61    A (a[4] == 5 && a[5] == 6 && a[6] == 7 && a[7] == 8);
      62  }
      63  
      64  /* { dg-final { scan-tree-dump-not "abort \\(" "optimized" } }
      65     { dg-final { scan-tree-dump-not "strlen \\(" "optimized" } } */