1  /* Test for scanf formats.  Formats using C2X features.  */
       2  /* { dg-do compile } */
       3  /* { dg-options "-std=c2x -pedantic -Wformat" } */
       4  
       5  #include "format.h"
       6  
       7  void
       8  foo (unsigned int *uip, unsigned short int *uhp, unsigned char *uhhp,
       9       unsigned long int *ulp, unsigned long long *ullp, uintmax_t *ujp,
      10       size_t *zp, unsigned_ptrdiff_t *utp, int_least8_t *i8, int_least16_t *i16,
      11       int_least32_t *i32, int_least64_t *i64, uint_least8_t *u8,
      12       uint_least16_t *u16, uint_least32_t *u32, uint_least64_t *u64,
      13       int_fast8_t *if8, int_fast16_t *if16, int_fast32_t *if32,
      14       int_fast64_t *if64, uint_fast8_t *uf8, uint_fast16_t *uf16,
      15       uint_fast32_t *uf32, uint_fast64_t *uf64)
      16  {
      17    scanf ("%*b");
      18    scanf ("%2b", uip);
      19    scanf ("%hb%hhb%lb%llb%jb%zb%tb", uhp, uhhp, ulp, ullp, ujp, zp, utp);
      20    scanf ("%Lb", ullp); /* { dg-warning "does not support" } */
      21    scanf ("%qb", ullp); /* { dg-warning "does not support" } */
      22    /* Use of %wN and %wfN with each valid conversion specifier.  */
      23    scanf ("%w8d %w16d %w32d %w64d %wf8d %wf16d %wf32d %wf64d",
      24  	 i8, i16, i32, i64, if8, if16, if32, if64);
      25    scanf ("%w8i %w16i %w32i %w64i %wf8i %wf16i %wf32i %wf64i",
      26  	 i8, i16, i32, i64, if8, if16, if32, if64);
      27    scanf ("%w8b %w16b %w32b %w64b %wf8b %wf16b %wf32b %wf64b",
      28  	 u8, u16, u32, u64, uf8, uf16, uf32, uf64);
      29    scanf ("%w8o %w16o %w32o %w64o %wf8o %wf16o %wf32o %wf64o",
      30  	 u8, u16, u32, u64, uf8, uf16, uf32, uf64);
      31    scanf ("%w8u %w16u %w32u %w64u %wf8u %wf16u %wf32u %wf64u",
      32  	 u8, u16, u32, u64, uf8, uf16, uf32, uf64);
      33    scanf ("%w8x %w16x %w32x %w64x %wf8x %wf16x %wf32x %wf64x",
      34  	 u8, u16, u32, u64, uf8, uf16, uf32, uf64);
      35    scanf ("%w8X %w16X %w32X %w64X %wf8X %wf16X %wf32X %wf64X",
      36  	 u8, u16, u32, u64, uf8, uf16, uf32, uf64);
      37    scanf ("%w8n %w16n %w32n %w64n %wf8n %wf16n %wf32n %wf64n",
      38  	 i8, i16, i32, i64, if8, if16, if32, if64);
      39    /* Use of %wN and %wfN with bad conversion specifiers.  */
      40    scanf ("%w8a", i8); /* { dg-warning "length modifier" } */
      41    scanf ("%w16a", i16); /* { dg-warning "length modifier" } */
      42    scanf ("%w32a", i32); /* { dg-warning "length modifier" } */
      43    scanf ("%w64a", i64); /* { dg-warning "length modifier" } */
      44    scanf ("%wf8a", if8); /* { dg-warning "length modifier" } */
      45    scanf ("%wf16a", if16); /* { dg-warning "length modifier" } */
      46    scanf ("%wf32a", if32); /* { dg-warning "length modifier" } */
      47    scanf ("%wf64a", if64); /* { dg-warning "length modifier" } */
      48    scanf ("%w8A", i8); /* { dg-warning "length modifier" } */
      49    scanf ("%w16A", i16); /* { dg-warning "length modifier" } */
      50    scanf ("%w32A", i32); /* { dg-warning "length modifier" } */
      51    scanf ("%w64A", i64); /* { dg-warning "length modifier" } */
      52    scanf ("%wf8A", if8); /* { dg-warning "length modifier" } */
      53    scanf ("%wf16A", if16); /* { dg-warning "length modifier" } */
      54    scanf ("%wf32A", if32); /* { dg-warning "length modifier" } */
      55    scanf ("%wf64A", if64); /* { dg-warning "length modifier" } */
      56    scanf ("%w8c", i8); /* { dg-warning "length modifier" } */
      57    scanf ("%w16c", i16); /* { dg-warning "length modifier" } */
      58    scanf ("%w32c", i32); /* { dg-warning "length modifier" } */
      59    scanf ("%w64c", i64); /* { dg-warning "length modifier" } */
      60    scanf ("%wf8c", if8); /* { dg-warning "length modifier" } */
      61    scanf ("%wf16c", if16); /* { dg-warning "length modifier" } */
      62    scanf ("%wf32c", if32); /* { dg-warning "length modifier" } */
      63    scanf ("%wf64c", if64); /* { dg-warning "length modifier" } */
      64    scanf ("%w8e", i8); /* { dg-warning "length modifier" } */
      65    scanf ("%w16e", i16); /* { dg-warning "length modifier" } */
      66    scanf ("%w32e", i32); /* { dg-warning "length modifier" } */
      67    scanf ("%w64e", i64); /* { dg-warning "length modifier" } */
      68    scanf ("%wf8e", if8); /* { dg-warning "length modifier" } */
      69    scanf ("%wf16e", if16); /* { dg-warning "length modifier" } */
      70    scanf ("%wf32e", if32); /* { dg-warning "length modifier" } */
      71    scanf ("%wf64e", if64); /* { dg-warning "length modifier" } */
      72    scanf ("%w8E", i8); /* { dg-warning "length modifier" } */
      73    scanf ("%w16E", i16); /* { dg-warning "length modifier" } */
      74    scanf ("%w32E", i32); /* { dg-warning "length modifier" } */
      75    scanf ("%w64E", i64); /* { dg-warning "length modifier" } */
      76    scanf ("%wf8E", if8); /* { dg-warning "length modifier" } */
      77    scanf ("%wf16E", if16); /* { dg-warning "length modifier" } */
      78    scanf ("%wf32E", if32); /* { dg-warning "length modifier" } */
      79    scanf ("%wf64E", if64); /* { dg-warning "length modifier" } */
      80    scanf ("%w8f", i8); /* { dg-warning "length modifier" } */
      81    scanf ("%w16f", i16); /* { dg-warning "length modifier" } */
      82    scanf ("%w32f", i32); /* { dg-warning "length modifier" } */
      83    scanf ("%w64f", i64); /* { dg-warning "length modifier" } */
      84    scanf ("%wf8f", if8); /* { dg-warning "length modifier" } */
      85    scanf ("%wf16f", if16); /* { dg-warning "length modifier" } */
      86    scanf ("%wf32f", if32); /* { dg-warning "length modifier" } */
      87    scanf ("%wf64f", if64); /* { dg-warning "length modifier" } */
      88    scanf ("%w8F", i8); /* { dg-warning "length modifier" } */
      89    scanf ("%w16F", i16); /* { dg-warning "length modifier" } */
      90    scanf ("%w32F", i32); /* { dg-warning "length modifier" } */
      91    scanf ("%w64F", i64); /* { dg-warning "length modifier" } */
      92    scanf ("%wf8F", if8); /* { dg-warning "length modifier" } */
      93    scanf ("%wf16F", if16); /* { dg-warning "length modifier" } */
      94    scanf ("%wf32F", if32); /* { dg-warning "length modifier" } */
      95    scanf ("%wf64F", if64); /* { dg-warning "length modifier" } */
      96    scanf ("%w8g", i8); /* { dg-warning "length modifier" } */
      97    scanf ("%w16g", i16); /* { dg-warning "length modifier" } */
      98    scanf ("%w32g", i32); /* { dg-warning "length modifier" } */
      99    scanf ("%w64g", i64); /* { dg-warning "length modifier" } */
     100    scanf ("%wf8g", if8); /* { dg-warning "length modifier" } */
     101    scanf ("%wf16g", if16); /* { dg-warning "length modifier" } */
     102    scanf ("%wf32g", if32); /* { dg-warning "length modifier" } */
     103    scanf ("%wf64g", if64); /* { dg-warning "length modifier" } */
     104    scanf ("%w8G", i8); /* { dg-warning "length modifier" } */
     105    scanf ("%w16G", i16); /* { dg-warning "length modifier" } */
     106    scanf ("%w32G", i32); /* { dg-warning "length modifier" } */
     107    scanf ("%w64G", i64); /* { dg-warning "length modifier" } */
     108    scanf ("%wf8G", if8); /* { dg-warning "length modifier" } */
     109    scanf ("%wf16G", if16); /* { dg-warning "length modifier" } */
     110    scanf ("%wf32G", if32); /* { dg-warning "length modifier" } */
     111    scanf ("%wf64G", if64); /* { dg-warning "length modifier" } */
     112    scanf ("%w8p", i8); /* { dg-warning "length modifier" } */
     113    scanf ("%w16p", i16); /* { dg-warning "length modifier" } */
     114    scanf ("%w32p", i32); /* { dg-warning "length modifier" } */
     115    scanf ("%w64p", i64); /* { dg-warning "length modifier" } */
     116    scanf ("%wf8p", if8); /* { dg-warning "length modifier" } */
     117    scanf ("%wf16p", if16); /* { dg-warning "length modifier" } */
     118    scanf ("%wf32p", if32); /* { dg-warning "length modifier" } */
     119    scanf ("%wf64p", if64); /* { dg-warning "length modifier" } */
     120    scanf ("%w8s", i8); /* { dg-warning "length modifier" } */
     121    scanf ("%w16s", i16); /* { dg-warning "length modifier" } */
     122    scanf ("%w32s", i32); /* { dg-warning "length modifier" } */
     123    scanf ("%w64s", i64); /* { dg-warning "length modifier" } */
     124    scanf ("%wf8s", if8); /* { dg-warning "length modifier" } */
     125    scanf ("%wf16s", if16); /* { dg-warning "length modifier" } */
     126    scanf ("%wf32s", if32); /* { dg-warning "length modifier" } */
     127    scanf ("%wf64s", if64); /* { dg-warning "length modifier" } */
     128    scanf ("%w8[abc]", i8); /* { dg-warning "length modifier" } */
     129    scanf ("%w16[abc]", i16); /* { dg-warning "length modifier" } */
     130    scanf ("%w32[abc]", i32); /* { dg-warning "length modifier" } */
     131    scanf ("%w64[abc]", i64); /* { dg-warning "length modifier" } */
     132    scanf ("%wf8[abc]", if8); /* { dg-warning "length modifier" } */
     133    scanf ("%wf16[abc]", if16); /* { dg-warning "length modifier" } */
     134    scanf ("%wf32[abc]", if32); /* { dg-warning "length modifier" } */
     135    scanf ("%wf64[abc]", if64); /* { dg-warning "length modifier" } */
     136  }