// { dg-do run  }
// GROUPS passed overloading
// Check that calls to the correct overloaded virtual
// functions are generated even where the type of the formal
// arguments for the overloadings are similar or related.

extern "C" int printf (const char *, ...); 

int proper_method_called = 0;

struct base {
	int member;
	virtual void method (char)
	{
	}
	virtual void method (char *)
	{
	}
};

struct derived : public base {
	int member;
	virtual void method (char)
	{
	}
	virtual void method (char *)
	{
		proper_method_called++;
	}
};

char *message;

int main ()
{
	derived derived_object;

	derived_object.method (message);

	if (proper_method_called != 1)
	  { printf ("FAIL\n"); return 1; }
	else
	  printf ("PASS\n");
}
