/* Test for scanf formats for Decimal Floating Point types.  */

/* { dg-do compile } */
/* { dg-require-effective-target dfp } */
/* { dg-options "-Wformat" } */
/* { dg-skip-if "No scanf/printf dfp support" { *-*-mingw* } } */

#include "format.h"

void
voo (_Decimal32 *x, _Decimal64 *y, _Decimal128 *z, int *i, unsigned int *j,
     double *d, char **p)
{
  /* See ISO/IEC DTR 24732 subclause 9.3 (currently Working Draft 5 from
      2005-03-06).  */
  /* Formatted input/output specifiers.  */

  /* Check lack of warnings for valid usage.  */

  scanf ("%Ha", x);
  scanf ("%HA", x);
  scanf ("%Hf", x);
  scanf ("%HF", x);
  scanf ("%He", x);
  scanf ("%HE", x);
  scanf ("%Hg", x);
  scanf ("%HG", x);

  scanf ("%Da", y);
  scanf ("%DA", y);
  scanf ("%Df", y);
  scanf ("%DF", y);
  scanf ("%De", y);
  scanf ("%DE", y);
  scanf ("%Dg", y);
  scanf ("%DG", y);

  scanf ("%DDa", z);
  scanf ("%DDA", z);
  scanf ("%DDf", z);
  scanf ("%DDF", z);
  scanf ("%DDe", z);
  scanf ("%DDE", z);
  scanf ("%DDg", z);
  scanf ("%DDG", z);

  scanf ("%DG%DDE%HF%DDe%He%HE%DF%DDF%De%DDG%HG%Df%Hg%DE%DDf%Dg%DDg%Hf\n",
           y, z, x, z, x, x, y, z, y, z, x, y, x, y, z, y, z, x);

  /* Check warnings for type mismatches.  */

  scanf ("%Ha", y);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HA", y);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%Hf", y);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HF", y);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%He", y);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HE", y);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%Hg", y);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HG", y);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%Ha", z);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HA", z);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%Hf", z);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HF", z);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%He", z);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HE", z);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%Hg", z);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HG", z);	/* { dg-warning "expects argument" "bad use of %H" } */

  scanf ("%Da", x);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%DA", x);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%Df", x);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%DF", x);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%De", x);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%DE", x);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%Dg", x);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%DG", x);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%Da", z);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%DA", z);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%Df", z);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%DF", z);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%De", z);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%DE", z);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%Dg", z);	/* { dg-warning "expects argument" "bad use of %D" } */
  scanf ("%DG", z);	/* { dg-warning "expects argument" "bad use of %D" } */

  scanf ("%DDa", x);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDA", x);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDf", x);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDF", x);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDe", x);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDE", x);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDg", x);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDG", x);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDa", y);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDA", y);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDf", y);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDF", y);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDe", y);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDE", y);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDg", y);	/* { dg-warning "expects argument" "bad use of %DD" } */
  scanf ("%DDG", y);	/* { dg-warning "expects argument" "bad use of %DD" } */

  /* Check for warnings for bad use of H, D, and DD length specifiers.  */

  scanf ("%Hd\n", i);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%Hi\n", i);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%Ho\n", j);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%Hu\n", j);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%Hx\n", j);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%HX\n", j);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%Ha\n", d);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%HA\n", d);	/* { dg-warning "expects argument" "bad use of %H" } */
  scanf ("%Hc\n", i);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%Hs\n", p);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%Hp\n", p);	/* { dg-warning "length" "bad use of %H" } */
  scanf ("%Hn\n", p);	/* { dg-warning "length" "bad use of %H" } */
}
