[PATCH] D19175: Fix for PR27015 (variable template initialized with a generic lambda expression)
Akira Hatanaka via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 15 13:20:06 PDT 2016
ahatanak created this revision.
ahatanak added a reviewer: rsmith.
ahatanak added a subscriber: cfe-commits.
I'm sending a WIP patch which fixes PR27015 to get an early feedback from the community.
This patch attempts to fix a crash which happens when a variable template is initialized with a generic lambda expression. Please see the example in the email I sent to cfe-dev:
http://lists.llvm.org/pipermail/cfe-dev/2016-April/048391.html
This patch makes changes to ensure the instantiated lambda class (which is the lambda class for fn<char> in the example) gets the right parent DeclContex (which is Decl::TranslationUnit in the example). After applying this patch, clang no longer crash compiling the example program. However, it still crashes when it compiles the following code:
$ cat test0.cpp
template <class> auto fn = [] {};
template <typename> void fn1() { fn<char>; }
$ clang -std=c++14 -c -o /dev/null test0.cpp
Assertion failed: (isDependentContext() && "cannot iterate dependent diagnostics of non-dependent context"), function ddiags, file include/clang/AST/DependentDiagnostic.h, line 176.
...
10 clang-3.8 0x000000010b4afd18 clang::Sema::PerformDependentDiagnostics(clang::DeclContext const*, clang::MultiLevelTemplateArgumentList const&) + 40
11 clang-3.8 0x000000010b46ee1b (anonymous namespace)::TemplateInstantiator::transformedLocalDecl(clang::Decl*, clang::Decl*) + 251
It fails when DeclContext::ddiags() is called on the lambda class of the old lambda expression because it's not a dependent context.
http://reviews.llvm.org/D19175
Files:
include/clang/Sema/Sema.h
lib/Sema/SemaLambda.cpp
lib/Sema/SemaTemplateInstantiate.cpp
lib/Sema/SemaTemplateInstantiateDecl.cpp
lib/Sema/TreeTransform.h
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19175.53936.patch
Type: text/x-patch
Size: 5656 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160415/0541bfec/attachment.bin>
More information about the cfe-commits
mailing list