/* PR c/93812 - ICE on redeclaration of an attribute format function without
   protoype
   It's not clear that attribute format should be accepted on functions
   without a prototype.  If it's decided that it shouldn't be the tests
   here will need to be adjusted.
   { dg-do compile }
   { dg-options "-Wall" } */

#define FMT(n1, n2) __attribute__((__format__(__printf__, n1, n2)))

// Exercise function declarations.
FMT (1, 2) void print1 ();

FMT (2, 3) void print2 ();
           void print2 ();

FMT (3, 4) void print3 ();
FMT (3, 4) void print3 ();

FMT (1, 2) void print4 ();
           void print4 (void);              // { dg-warning "'format' attribute cannot be applied to a function that does not take variable arguments" }

           void print5 ();
FMT (1, 2) void print5 (void);              // { dg-warning "\\\[-Wattributes" }

FMT (1, 2) void print6 ();
          void print6 (const char*, ...);   // { dg-error "conflicting types" }

           void print7 (const char*, ...);
FMT (1, 2) void print7 ();                  // { dg-error "conflicting types" }


// Exercise function calls.
void test_print (void)
{
  print1 ("%i %s", 123, "");
  print1 ("%s %i", 123, 123);               // { dg-warning "\\\[-Wformat" }

  print2 (0, "%s %i", "", 123);
  print2 (1, "%i %s", "", 123);             // { dg-warning "\\\[-Wformat" }

  print3 (0, 1, "%s %i", "", 123);
  print3 (1, 2, "%i %s", "", 123);          // { dg-warning "\\\[-Wformat" }

  // Just verify there's no ICE.
  print4 ();
  print5 ();
  print6 ("%i %s", 123, "");
}


// Exercise declarations of pointers to functions.
FMT (1, 2) void (*pfprint1)();

FMT (2, 3) void (*pfprint2)();
           void (*pfprint2)();

FMT (3, 4) void (*pfprint3)();
FMT (3, 4) void (*pfprint3)();

FMT (1, 2) void (*pfprint4)();
           void (*pfprint4)(void);              // { dg-warning "'format' attribute cannot be applied to a function that does not take variable arguments" }

           void (*pfprint5)();
FMT (1, 2) void (*pfprint5)(void);              // { dg-warning "\\\[-Wattributes" }

FMT (1, 2) void (*pfprint6)();
           void (*pfprint6)(const char*, ...);   // { dg-error "conflicting types" }

           void (*pfprint7)(const char*, ...);
FMT (1, 2) void (*pfprint7)();                  // { dg-error "conflicting types" }

// Exercise calls via function pointers.
void test_pfprint (void)
{
  pfprint1 ("%i %s", 123, "");
  pfprint1 ("%s %i", 123, 123);             // { dg-warning "\\\[-Wformat" }

  pfprint2 (0, "%s %i", "", 123);
  pfprint2 (1, "%i %s", "", 123);           // { dg-warning "\\\[-Wformat" }

  pfprint3 (0, 1, "%s %i", "", 123);
  pfprint3 (1, 2, "%i %s", "", 123);        // { dg-warning "\\\[-Wformat" }

  // Just verify there's no ICE.
  pfprint4 ();
  pfprint5 ();
  pfprint6 ("%i %s", 123, "");
}
