C++: Guard against parent binding loop

Task-number: QTCREATORBUG-16146
Change-Id: Ib2a790954517859acd7ca5f16c7d889d28208fb0
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
This commit is contained in:
Nikolai Kosjar
2016-04-27 13:24:14 +02:00
committed by Erik Verbruggen
parent c4f9c6f265
commit a717e980e7
3 changed files with 55 additions and 4 deletions

View File

@@ -222,6 +222,7 @@ private slots:
void test_checkForValidSymbolFileId();
void test_parentOfBlock();
void test_infiniteLoop();
void findField();
void findField_data();
@@ -1203,6 +1204,41 @@ void tst_CheckSymbols::test_parentOfBlock()
BaseTestCase tc(source);
}
void tst_CheckSymbols::test_infiniteLoop()
{
const QByteArray source =
"template <class> struct TNode;\n"
"template <class> struct TMetaNode;\n"
"\n"
"template <class X>\n"
"struct TTraits {\n"
" using TX = X;\n"
" using TNodeType = TNode<TX>;\n"
"};\n"
"\n"
"template <class X>\n"
"struct TMetaNode {\n"
" using TTraitsType = TTraits<X>;\n"
"};\n"
"\n"
"template <class X>\n"
"void nonmember() {\n"
" using TMetaNodeType = TMetaNode<X>;\n"
"}\n"
"\n"
"template <class X>\n"
"struct TNode {\n"
" using TTraitsType = TTraits<X>;\n"
" void member();\n"
"};\n"
"\n"
"template <class X>\n"
"void TNode<X>::member() {}\n"
;
BaseTestCase tc(source);
}
void tst_CheckSymbols::test_checksymbols_infiniteLoop_data()
{
QTest::addColumn<QByteArray>("source1");