// { dg-do compile { target c++14 } }

// PRs 78621

// We erroneously mangled lambda auto parms as-if template parameters (T<n>_),
// rather than auto (Da). Fixed in abi version 11

template<typename T> class X;

template<typename T>
T &&forward (T &v)
{
  return static_cast<T &&> (v);
}

template<typename T>
void eat (T &v)
{
}

template<typename S, typename T>
  void eat (S &, T &v)
{
}

void Foo ()
{
  auto lam = [](auto &) { };
  auto lam_1 = [](int &, auto &) { };
  auto lam_2 = [](auto &, X<int> &) { };
  auto lam_3 = [](auto (*)[5]) { };

  forward (lam);
  forward (lam_1);
  forward (lam_2);
  forward (lam_3);

  eat (lam);
  eat (lam_1);
  eat (lam_2);
  eat (lam_3);

  // The auto lambda should mangle similarly to the non-auto one
  auto lambda_1 = [](float *, float *) { };
  auto lambda_2 = [](auto *, auto *) { };
  auto lambda_3 = [](auto *, auto *) { };

  int *i;
  
  eat (i, lambda_1);
  eat (i, lambda_2);

  // The autos should squangle to the first one.
  eat (lambda_2, lambda_3);
}

template<typename X> void Bar ()
{
  auto lambda_1 = [](X *, float *, float *) { };
  auto lambda_2 = [](X *, auto *, auto *) { };
  auto lambda_3 = [](X *, auto *...) {};
  
  int *i;
  
  eat (i, lambda_1);
  eat (i, lambda_2);
  eat (i, lambda_3);
}

void Baz ()
{
  Bar<short> ();
}

// { dg-final { scan-assembler "_Z7forwardIZ3FoovEUlRT_E_EOS0_S1_:" } }
// { dg-final { scan-assembler "_Z7forwardIZ3FoovEUlRiRT_E0_EOS1_S2_:" } }
// { dg-final { scan-assembler "_Z7forwardIZ3FoovEUlRT_R1XIiEE1_EOS0_S1_:" } }
// { dg-final { scan-assembler "_Z7forwardIZ3FoovEUlPA5_T_E2_EOS0_RS0_:" } }
// { dg-final { scan-assembler "_Z3eatIZ3FoovEUlRT_E_EvS1_:" } }
// { dg-final { scan-assembler "_Z3eatIZ3FoovEUlRiRT_E0_EvS2_:" } }
// { dg-final { scan-assembler "_Z3eatIZ3FoovEUlRT_R1XIiEE1_EvS1_:" } }
// { dg-final { scan-assembler "_Z3eatIZ3FoovEUlPA5_T_E2_EvRS0_:" } }
// { dg-final { scan-assembler "_Z3eatIPiZ3FoovEUlPfS1_E3_EvRT_RT0_:" } }
// { dg-final { scan-assembler "_Z3eatIPiZ3FoovEUlPT_PT0_E4_EvRS1_RS3_:" } }
// { dg-final { scan-assembler "_Z3eatIZ3FoovEUlPT_PT0_E4_Z3FoovEUlS1_S3_E5_EvRS0_RS2_:" } }
// { dg-final { scan-assembler "_Z3eatIPiZ3BarIsEvvEUlPsPfS3_E_EvRT_RT0_:" } }
// { dg-final { scan-assembler "_Z3eatIPiZ3BarIsEvvEUlPsPT_PT0_E0_EvRS3_RS5_:" } }
// { dg-final { scan-assembler "_Z3eatIPiZ3BarIsEvvEUlPsDpPT_E1_EvRT_RT0_:" } }
