forked from qt-creator/qt-creator
C++: Limit typedef resolving depth
This reverts commit 5be56c0 except for its tests. While it fixed the
problem described in the bug report, it also introduced regressions.
For now, we use a hard limit.
Change-Id: I19a85be454e3d7969371707e3eb1c3d42a16ecee
Reviewed-by: Przemyslaw Gorszkowski <pgorszkowski@gmail.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
@@ -2070,6 +2070,55 @@ void CppToolsPlugin::test_completion_recursive_using_typedef_declarations()
|
||||
QCOMPARE(completions.size(), 0);
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion_recursive_typedefs_in_templates1()
|
||||
{
|
||||
const QByteArray source =
|
||||
"template<typename From>\n"
|
||||
"struct simplify_type {\n"
|
||||
" typedef From SimpleType;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"template<class To, class From>\n"
|
||||
"struct cast_retty {\n"
|
||||
" typedef typename cast_retty_wrap<To, From,\n"
|
||||
" typename simplify_type<From>::SimpleType>::ret_type ret_type;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"template<class To, class From, class SimpleFrom>\n"
|
||||
"struct cast_retty_wrap {\n"
|
||||
" typedef typename cast_retty<To, SimpleFrom>::ret_type ret_type;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"void f()\n"
|
||||
"{\n"
|
||||
" @;\n"
|
||||
"}\n"
|
||||
;
|
||||
CompletionTestCase test(source, "cast_retty<T1, T2>::ret_type.");
|
||||
|
||||
const QStringList completions = test.getCompletions();
|
||||
QCOMPARE(completions.size(), 0);
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion_recursive_typedefs_in_templates2()
|
||||
{
|
||||
const QByteArray source =
|
||||
"template<class T>\n"
|
||||
"struct recursive {\n"
|
||||
" typedef typename recursive<T>::ret_type ret_type;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"void f()\n"
|
||||
"{\n"
|
||||
" @;\n"
|
||||
"}\n"
|
||||
;
|
||||
CompletionTestCase test(source, "recursive<T1>::ret_type.foo");
|
||||
|
||||
const QStringList completions = test.getCompletions();
|
||||
QCOMPARE(completions.size(), 0);
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion_prefix_first_QTCREATORBUG_8737()
|
||||
{
|
||||
const QByteArray source =
|
||||
@@ -2740,55 +2789,6 @@ void CppToolsPlugin::test_completion_template_parameter_defined_inside_scope_of_
|
||||
QVERIFY(completions.contains(QLatin1String("bar")));
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion_recursive_typedefs_in_templates1()
|
||||
{
|
||||
const QByteArray source =
|
||||
"template<typename From>\n"
|
||||
"struct simplify_type {\n"
|
||||
" typedef From SimpleType;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"template<class To, class From>\n"
|
||||
"struct cast_retty {\n"
|
||||
" typedef typename cast_retty_wrap<To, From,\n"
|
||||
" typename simplify_type<From>::SimpleType>::ret_type ret_type;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"template<class To, class From, class SimpleFrom>\n"
|
||||
"struct cast_retty_wrap {\n"
|
||||
" typedef typename cast_retty<To, SimpleFrom>::ret_type ret_type;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"void f()\n"
|
||||
"{\n"
|
||||
" @;\n"
|
||||
"}\n"
|
||||
;
|
||||
CompletionTestCase test(source, "cast_retty<T1, T2>::ret_type.");
|
||||
|
||||
const QStringList completions = test.getCompletions();
|
||||
QCOMPARE(completions.size(), 0);
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion_recursive_typedefs_in_templates2()
|
||||
{
|
||||
const QByteArray source =
|
||||
"template<class T>\n"
|
||||
"struct recursive {\n"
|
||||
" typedef typename recursive<To>::ret_type ret_type;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"void f()\n"
|
||||
"{\n"
|
||||
" @;\n"
|
||||
"}\n"
|
||||
;
|
||||
CompletionTestCase test(source, "recursive<T1>::ret_type.foo");
|
||||
|
||||
const QStringList completions = test.getCompletions();
|
||||
QCOMPARE(completions.size(), 0);
|
||||
}
|
||||
|
||||
void CppToolsPlugin::test_completion_signals_hide_QPrivateSignal()
|
||||
{
|
||||
const QByteArray source =
|
||||
|
||||
Reference in New Issue
Block a user