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

Richard Trieu rtrieu at google.com
Tue Oct 9 17:04:37 PDT 2012


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121009/7bbba7ad/attachment.html>


More information about the cfe-commits mailing list