/* Test to verify that parameters of qualified narrow char pointer type
   are accepted for attribute format printf, but others are rejected.
   { dg-do compile }
   { dg-options "-std=gnu99 -Wformat" } */

#define DONT_GNU_PROTOTYPE
#include "format.h"

#define FORMAT(archetype, arg1, arg2)   \
  __attribute__  ((format (archetype, arg1, arg2)))

FORMAT (gnu_attr_printf, 1, 2)
  void fpc_1_2 (char *, ...);

FORMAT (gnu_attr_printf, 1, 2)
  void fpcc_1_2 (const char *, ...);

FORMAT (gnu_attr_printf, 1, 2)
  void frpc_1_2 (char * restrict, ...);

FORMAT (gnu_attr_printf, 1, 2)
  void fpvc_1_2 (volatile char *, ...);

FORMAT (gnu_attr_printf, 1, 2)
  void fpcvc_1_2 (const volatile char *, ...);

FORMAT (gnu_attr_printf, 1, 2)
  void fpv_1_2 (void *, ...);       /* { dg-error ".format. attribute argument 2 value .1. refers to parameter type .void \\\*." } */

FORMAT (gnu_attr_printf, 1, 2)
  void fppc_1_2 (char **, ...);     /* { dg-error ".format. attribute argument 2 value .1. refers to parameter type .char \\\*\\\*." } */

FORMAT (gnu_attr_printf, 1, 2)
  void fpwc_1_2 (wchar_t *, ...);   /* { dg-error ".format. attribute argument 2 value .1. refers to parameter type .wchar_t \\\*." } */