/* { dg-options "-fdiagnostics-show-caret" } */

#define MACRO_1(X,Y) /* { dg-line "def_of_MACRO_1" } */
void test_1 ()
{
  MACRO_1(42); /* { dg-line "use_of_MACRO_1" } */
  /* { dg-error "macro \"MACRO_1\" requires 2 arguments, but only 1 given" "" { target *-*-* } use_of_MACRO_1 } */
  /* { dg-begin-multiline-output "" }
   MACRO_1(42);
             ^
     { dg-end-multiline-output "" } */
  /* { dg-message "-: macro .MACRO_1. defined here" "" { target *-*-* } def_of_MACRO_1 }
  /* { dg-begin-multiline-output "" }
 #define MACRO_1(X,Y)
 
     { dg-end-multiline-output "" } */
  /* { dg-error "'MACRO_1' undeclared" "" { target c } use_of_MACRO_1 }
  /* { dg-error "'MACRO_1' was not declared in this scope" "" { target c++ } use_of_MACRO_1 }

  /* { dg-begin-multiline-output "" }
   MACRO_1(42);
   ^~~~~~~
     { dg-end-multiline-output "" } */
  /* { dg-bogus "had not yet been defined" "" { target *-*-* } use_of_MACRO_1 } */
}

#define MACRO_2(X,Y) /* { dg-line "def_of_MACRO_2" } */
void test_2 ()
{
  MACRO_2(1, 2, 3); /* { dg-line "use_of_MACRO_2" } */
  /* { dg-error "macro \"MACRO_2\" passed 3 arguments, but takes just 2" "" { target *-*-* } use_of_MACRO_2 } */
  /* { dg-begin-multiline-output "" }
   MACRO_2(1, 2, 3);
                  ^
     { dg-end-multiline-output "" } */
  /* { dg-message "-: macro .MACRO_2. defined here" "" { target *-*-* } def_of_MACRO_2 }
  /* { dg-begin-multiline-output "" }
 #define MACRO_2(X,Y)
 
     { dg-end-multiline-output "" } */
  /* { dg-error "'MACRO_2' undeclared" "" { target c } use_of_MACRO_2 } */
  /* { dg-error "'MACRO_2' was not declared in this scope" "" { target c++ } use_of_MACRO_2 } */
  /* { dg-begin-multiline-output "" }
   MACRO_2(1, 2, 3);
   ^~~~~~~
     { dg-end-multiline-output "" } */
  /* { dg-bogus "had not yet been defined" "" { target *-*-* } use_of_MACRO_2 } */
}

#define MACRO_3
void test_3 ()
{
  MACRO_3 (42);
}

#define MACRO_4(X,Y)
void test_4 ()
{
  MACRO_4; /* { dg-line "use_of_MACRO_4" } */
  /* { dg-error "'MACRO_4' undeclared" "" { target c } use_of_MACRO_4 } */
  /* { dg-error "'MACRO_4' was not declared in this scope" "" { target c++ } use_of_MACRO_4 } */
  /* { dg-begin-multiline-output "" }
   MACRO_4;
   ^~~~~~~
     { dg-end-multiline-output "" } */
}
