Jason,
digging further into the demangler crash of 78252, I think the root cause is ill-formed C++. Here's a further reduced testcase.

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

void Foo ()
{
  auto lam_1 = [](int &) { };
  auto lam_2 = [](auto &) { }; // IIUC this is implicitly templatey

  for2 (lam_1);
  for2 (lam_2);  // What is the lambda's argument type?
}

We get 2 instantiations of for2:
        .type   _Z4for2IZ3FoovEUlRiE_EvRT_, @function
        .type   _Z4for2IZ3FoovEUlRT_E0_EvS1_, @function

The first one has 'UlRiE_' for the lambda -- a reference to an int. The second one has 'UlRT_E0_' a reference to the first template parm. But it's in the template parm specification itself (I...E), so that must be bogus.

It looks to me that deduction of the lambda's argument type has got tangled up with deduction of the template function's type. (I've not looked at pt.c yet)

Is that second call of for2 illformed?

nathan

--
Nathan Sidwell

Reply via email to