[cfe-commits] [Patch] Fix crasher during failed template deduction of derived class

Richard Trieu rtrieu at google.com
Tue Oct 9 17:05:48 PDT 2012


On Tue, Oct 9, 2012 at 5:04 PM, Richard Trieu <rtrieu at google.com> wrote:

> The following code causes a crash:
>
> template<typename T> class vector2 {};
> template<typename T> class vector : vector2<T> {};
>
> template<typename T> void Foo(vector<const T*> V) {}
>
> void test() {
>   Foo(vector<int*>());
> }
>
> Once template deduction fails in vector, it tries again with with the base
> class vector2 and also fails, but with a different status.  However, the
> TemplateDeductionInfo is updated, but the old status is kept.  This leads
> to an assert later when the diagnostic is produced.  This patch introduces
> a temporary TemplateDeductionInfo to capture the information from the base
> class template deduction, and only overrides the old info if the template
> deduction is successful.
>

Oops.  And here's the patch.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121009/2dfb0b73/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: derived-template-deduction.patch
Type: application/octet-stream
Size: 2240 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121009/2dfb0b73/attachment.obj>


More information about the cfe-commits mailing list