@@ -197,6 +197,7 @@ class TestSimplifyTemplate : public TestFixture {
197197 TEST_CASE (template155); // #9539
198198 TEST_CASE (template156);
199199 TEST_CASE (template157); // #9854
200+ TEST_CASE (template158); // daca crash
200201 TEST_CASE (template_specialization_1); // #7868 - template specialization template <typename T> struct S<C<T>> {..};
201202 TEST_CASE (template_specialization_2); // #7868 - template specialization template <typename T> struct S<C<T>> {..};
202203 TEST_CASE (template_enum); // #6299 Syntax error in complex enum declaration (including template)
@@ -3767,6 +3768,214 @@ class TestSimplifyTemplate : public TestFixture {
37673768 ASSERT_EQUALS (exp, tok (code));
37683769 }
37693770
3771+ void template158 () { // daca crash
3772+ const char code[] = " template <typename> class a0{};\n "
3773+ " template <typename> class a1{};\n "
3774+ " template <typename> class a2{};\n "
3775+ " template <typename> class a3{};\n "
3776+ " template <typename> class a4{};\n "
3777+ " template <typename> class a5{};\n "
3778+ " template <typename> class a6{};\n "
3779+ " template <typename> class a7{};\n "
3780+ " template <typename> class a8{};\n "
3781+ " template <typename> class a9{};\n "
3782+ " template <typename> class a10{};\n "
3783+ " template <typename> class a11{};\n "
3784+ " template <typename> class a12{};\n "
3785+ " template <typename> class a13{};\n "
3786+ " template <typename> class a14{};\n "
3787+ " template <typename> class a15{};\n "
3788+ " template <typename> class a16{};\n "
3789+ " template <typename> class a17{};\n "
3790+ " template <typename> class a18{};\n "
3791+ " template <typename> class a19{};\n "
3792+ " template <typename> class a20{};\n "
3793+ " template <typename> class a21{};\n "
3794+ " template <typename> class a22{};\n "
3795+ " template <typename> class a23{};\n "
3796+ " template <typename> class a24{};\n "
3797+ " template <typename> class a25{};\n "
3798+ " template <typename> class a26{};\n "
3799+ " template <typename> class a27{};\n "
3800+ " template <typename> class a28{};\n "
3801+ " template <typename> class a29{};\n "
3802+ " template <typename> class a30{};\n "
3803+ " template <typename> class a31{};\n "
3804+ " template <typename> class a32{};\n "
3805+ " template <typename> class a33{};\n "
3806+ " template <typename> class a34{};\n "
3807+ " template <typename> class a35{};\n "
3808+ " template <typename> class a36{};\n "
3809+ " template <typename> class a37{};\n "
3810+ " template <typename> class a38{};\n "
3811+ " template <typename> class a39{};\n "
3812+ " template <typename> class a40{};\n "
3813+ " template <typename> class a41{};\n "
3814+ " template <typename> class a42{};\n "
3815+ " template <typename> class a43{};\n "
3816+ " template <typename> class a44{};\n "
3817+ " template <typename> class a45{};\n "
3818+ " template <typename> class a46{};\n "
3819+ " template <typename> class a47{};\n "
3820+ " template <typename> class a48{};\n "
3821+ " template <typename> class a49{};\n "
3822+ " template <typename> class a50{};\n "
3823+ " template <typename> class a51{};\n "
3824+ " template <typename> class a52{};\n "
3825+ " template <typename> class a53{};\n "
3826+ " template <typename> class a54{};\n "
3827+ " template <typename> class a55{};\n "
3828+ " template <typename> class a56{};\n "
3829+ " template <typename> class a57{};\n "
3830+ " template <typename> class a58{};\n "
3831+ " template <typename> class a59{};\n "
3832+ " template <typename> class a60{};\n "
3833+ " template <typename> class a61{};\n "
3834+ " template <typename> class a62{};\n "
3835+ " template <typename> class a63{};\n "
3836+ " template <typename> class a64{};\n "
3837+ " template <typename> class a65{};\n "
3838+ " template <typename> class a66{};\n "
3839+ " template <typename> class a67{};\n "
3840+ " template <typename> class a68{};\n "
3841+ " template <typename> class a69{};\n "
3842+ " template <typename> class a70{};\n "
3843+ " template <typename> class a71{};\n "
3844+ " template <typename> class a72{};\n "
3845+ " template <typename> class a73{};\n "
3846+ " template <typename> class a74{};\n "
3847+ " template <typename> class a75{};\n "
3848+ " template <typename> class a76{};\n "
3849+ " template <typename> class a77{};\n "
3850+ " template <typename> class a78{};\n "
3851+ " template <typename> class a79{};\n "
3852+ " template <typename> class a80{};\n "
3853+ " template <typename> class a81{};\n "
3854+ " template <typename> class a82{};\n "
3855+ " template <typename> class a83{};\n "
3856+ " template <typename> class a84{};\n "
3857+ " template <typename> class a85{};\n "
3858+ " template <typename> class a86{};\n "
3859+ " template <typename> class a87{};\n "
3860+ " template <typename> class a88{};\n "
3861+ " template <typename> class a89{};\n "
3862+ " template <typename> class a90{};\n "
3863+ " template <typename> class a91{};\n "
3864+ " template <typename> class a92{};\n "
3865+ " template <typename> class a93{};\n "
3866+ " template <typename> class a94{};\n "
3867+ " template <typename> class a95{};\n "
3868+ " template <typename> class a96{};\n "
3869+ " template <typename> class a97{};\n "
3870+ " template <typename> class a98{};\n "
3871+ " template <typename> class a99{};\n "
3872+ " template <typename> class a100{};\n "
3873+ " template <typename> class b {};\n "
3874+ " b<a0<int>> d0;\n "
3875+ " b<a1<int>> d1;\n "
3876+ " b<a2<int>> d2;\n "
3877+ " b<a3<int>> d3;\n "
3878+ " b<a4<int>> d4;\n "
3879+ " b<a5<int>> d5;\n "
3880+ " b<a6<int>> d6;\n "
3881+ " b<a7<int>> d7;\n "
3882+ " b<a8<int>> d8;\n "
3883+ " b<a9<int>> d9;\n "
3884+ " b<a10<int>> d10;\n "
3885+ " b<a11<int>> d11;\n "
3886+ " b<a12<int>> d12;\n "
3887+ " b<a13<int>> d13;\n "
3888+ " b<a14<int>> d14;\n "
3889+ " b<a15<int>> d15;\n "
3890+ " b<a16<int>> d16;\n "
3891+ " b<a17<int>> d17;\n "
3892+ " b<a18<int>> d18;\n "
3893+ " b<a19<int>> d19;\n "
3894+ " b<a20<int>> d20;\n "
3895+ " b<a21<int>> d21;\n "
3896+ " b<a22<int>> d22;\n "
3897+ " b<a23<int>> d23;\n "
3898+ " b<a24<int>> d24;\n "
3899+ " b<a25<int>> d25;\n "
3900+ " b<a26<int>> d26;\n "
3901+ " b<a27<int>> d27;\n "
3902+ " b<a28<int>> d28;\n "
3903+ " b<a29<int>> d29;\n "
3904+ " b<a30<int>> d30;\n "
3905+ " b<a31<int>> d31;\n "
3906+ " b<a32<int>> d32;\n "
3907+ " b<a33<int>> d33;\n "
3908+ " b<a34<int>> d34;\n "
3909+ " b<a35<int>> d35;\n "
3910+ " b<a36<int>> d36;\n "
3911+ " b<a37<int>> d37;\n "
3912+ " b<a38<int>> d38;\n "
3913+ " b<a39<int>> d39;\n "
3914+ " b<a40<int>> d40;\n "
3915+ " b<a41<int>> d41;\n "
3916+ " b<a42<int>> d42;\n "
3917+ " b<a43<int>> d43;\n "
3918+ " b<a44<int>> d44;\n "
3919+ " b<a45<int>> d45;\n "
3920+ " b<a46<int>> d46;\n "
3921+ " b<a47<int>> d47;\n "
3922+ " b<a48<int>> d48;\n "
3923+ " b<a49<int>> d49;\n "
3924+ " b<a50<int>> d50;\n "
3925+ " b<a51<int>> d51;\n "
3926+ " b<a52<int>> d52;\n "
3927+ " b<a53<int>> d53;\n "
3928+ " b<a54<int>> d54;\n "
3929+ " b<a55<int>> d55;\n "
3930+ " b<a56<int>> d56;\n "
3931+ " b<a57<int>> d57;\n "
3932+ " b<a58<int>> d58;\n "
3933+ " b<a59<int>> d59;\n "
3934+ " b<a60<int>> d60;\n "
3935+ " b<a61<int>> d61;\n "
3936+ " b<a62<int>> d62;\n "
3937+ " b<a63<int>> d63;\n "
3938+ " b<a64<int>> d64;\n "
3939+ " b<a65<int>> d65;\n "
3940+ " b<a66<int>> d66;\n "
3941+ " b<a67<int>> d67;\n "
3942+ " b<a68<int>> d68;\n "
3943+ " b<a69<int>> d69;\n "
3944+ " b<a70<int>> d70;\n "
3945+ " b<a71<int>> d71;\n "
3946+ " b<a72<int>> d72;\n "
3947+ " b<a73<int>> d73;\n "
3948+ " b<a74<int>> d74;\n "
3949+ " b<a75<int>> d75;\n "
3950+ " b<a76<int>> d76;\n "
3951+ " b<a77<int>> d77;\n "
3952+ " b<a78<int>> d78;\n "
3953+ " b<a79<int>> d79;\n "
3954+ " b<a80<int>> d80;\n "
3955+ " b<a81<int>> d81;\n "
3956+ " b<a82<int>> d82;\n "
3957+ " b<a83<int>> d83;\n "
3958+ " b<a84<int>> d84;\n "
3959+ " b<a85<int>> d85;\n "
3960+ " b<a86<int>> d86;\n "
3961+ " b<a87<int>> d87;\n "
3962+ " b<a88<int>> d88;\n "
3963+ " b<a89<int>> d89;\n "
3964+ " b<a90<int>> d90;\n "
3965+ " b<a91<int>> d91;\n "
3966+ " b<a92<int>> d92;\n "
3967+ " b<a93<int>> d93;\n "
3968+ " b<a94<int>> d94;\n "
3969+ " b<a95<int>> d95;\n "
3970+ " b<a96<int>> d96;\n "
3971+ " b<a97<int>> d97;\n "
3972+ " b<a98<int>> d98;\n "
3973+ " b<a99<int>> d99;\n "
3974+ " b<a100<int>> d100;" ;
3975+ // don't bother checking the output because this is not instantiated properly
3976+ tok (code); // don't crash
3977+ }
3978+
37703979 void template_specialization_1 () { // #7868 - template specialization template <typename T> struct S<C<T>> {..};
37713980 const char code[] = " template <typename T> struct C {};\n "
37723981 " template <typename T> struct S {a};\n "
0 commit comments