/* Test invalid use of the routine directive.  */
template <typename T>
extern T one_d();
#pragma acc routine (one_d) /* { dg-error "names a set of overloads" } */
template <typename T>
T
one()
{
  return 1;
}
#pragma acc routine (one) /* { dg-error "names a set of overloads" } */
int incr (int);
float incr (float);
#pragma acc routine (incr) /* { dg-error "names a set of overloads" } */
int sum (int, int);
namespace foo {
#pragma acc routine (sum)
  int sub (int, int);
}
#pragma acc routine (foo::sub)
/* It's strange to apply a routine directive to subset of overloaded
   functions, but that is permissible in OpenACC 2.x.  */
int decr (int a);
#pragma acc routine
float decr (float a);