1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fdump-tree-fab1" } */
       3  
       4  #include <stdarg.h>
       5  
       6  extern int __vprintf_chk (int, const char *, va_list);
       7  volatile int vi0, vi1, vi2, vi3, vi4, vi5, vi6, vi7, vi8, vi9, via;
       8  
       9  void
      10  test (va_list ap1, va_list ap2, va_list ap3, va_list ap4, va_list ap5,
      11        va_list ap6, va_list ap7)
      12  {
      13    vi0 = 0;
      14    __vprintf_chk (1, "hello", ap1);
      15    vi1 = 0;
      16    __vprintf_chk (1, "hello\n", ap2);
      17    vi2 = 0;
      18    __vprintf_chk (1, "a", ap3);
      19    vi3 = 0;
      20    __vprintf_chk (1, "", ap4);
      21    vi4 = 0;
      22    __vprintf_chk (1, "%s", ap5);
      23    vi5 = 0;
      24    __vprintf_chk (1, "%c", ap6);
      25    vi6 = 0;
      26    __vprintf_chk (1, "%s\n", ap7);
      27    vi7 = 0;
      28  }
      29  
      30  /* { dg-final { scan-tree-dump "vi0.*__vprintf_chk.*1.*\"hello\".*vi1" "fab1"} } */
      31  /* { dg-final { scan-tree-dump "vi1.*puts.*\"hello\".*vi2" "fab1"} } */
      32  /* { dg-final { scan-tree-dump "vi2.*putchar.*vi3" "fab1"} } */
      33  /* { dg-final { scan-tree-dump "vi3 ={v} 0\[^\(\)\]*vi4 ={v} 0" "fab1"} } */
      34  /* { dg-final { scan-tree-dump "vi4.*__vprintf_chk.*1.*\"%s\".*vi5" "fab1"} } */
      35  /* { dg-final { scan-tree-dump "vi5.*__vprintf_chk.*1.*\"%c\".*vi6" "fab1"} } */
      36  /* { dg-final { scan-tree-dump "vi6.*__vprintf_chk.*1.*\"%s\\\\n\".*vi7" "fab1"} } */