116d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher// RUN: %clang_cc1 -emit-llvm -o - %s 216d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher 316d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopherstruct A { 416d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher virtual ~A(); 516d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher}; 616d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher 716d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christophertemplate <typename Ty> 816d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopherstruct B : public A { 916d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher ~B () { delete [] val; } 1016d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopherprivate: 1116d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher Ty* val; 1216d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher}; 1316d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher 1416d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christophertemplate <typename Ty> 1516d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopherstruct C : public A { 1616d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher C (); 1716d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher ~C (); 1816d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher}; 1916d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher 2016d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christophertemplate <typename Ty> 2116d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopherstruct D : public A { 2216d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher D () {} 2316d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher private: 2416d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher B<C<Ty> > blocks; 2516d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher}; 2616d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christopher 2716d482ebe8abb5a8eaf5d3407e90c96e6afa397bEric Christophertemplate class D<double>; 28