Fix an instantiation bug with nested generic lambdas and conversion to fptrs.
authorFaisal Vali <faisalv@yahoo.com>
Thu, 24 Oct 2013 01:05:22 +0000 (01:05 +0000)
committerFaisal Vali <faisalv@yahoo.com>
Thu, 24 Oct 2013 01:05:22 +0000 (01:05 +0000)
commit66605d40a74aa26664050d41f900c37ad5fbbfe9
treefaf220d6acd14aea3facf87a550ef24d320da423
parente0bc980500bfe3c0a2b5117bb77f9131e944c7ad
Fix an instantiation bug with nested generic lambdas and conversion to fptrs.

This patch fixes the typelocs of the conversion-operator and the conversion-operator-name and adds the parameters of the call operator to the FunctionProtoTypeLoc of the respective entities. Thus, when the template declarations (conversion operators) undergo deduction and instantiation/transformation/substitution - they add themselves to the local instantiation scope if needed.

This patch supports the following:

auto L = [](auto b) {
  return [](auto a) ->decltype(a) { return a; };
};
int (*fp)(int) = L(8);

Richard LGTM'd this patch: http://llvm-reviews.chandlerc.com/D1831

Thanks!

llvm-svn: 193294
clang/lib/Sema/SemaLambda.cpp
clang/test/SemaCXX/cxx1y-generic-lambdas.cpp