summaryrefslogtreecommitdiff
path: root/tests/auto/cplusplus/ast/tst_ast.cpp
diff options
context:
space:
mode:
authorSergey Shambir <sergey.shambir.auto@gmail.com>2013-04-03 23:33:44 +0400
committerErik Verbruggen <erik.verbruggen@digia.com>2013-04-09 11:31:28 +0200
commit2ead48fb2674c26aede63382277e9647f93e6586 (patch)
tree0727505cd8f0604a75755300b725056ed6347ea0 /tests/auto/cplusplus/ast/tst_ast.cpp
parentf7de8c934a24d3620816ce11bad119327f7a0471 (diff)
downloadqt-creator-2ead48fb2674c26aede63382277e9647f93e6586.tar.gz
CPlusPlus: fixed parsing function-try-catch with ctor-initializer
C++ standard defines that 'try' should be before optional ctor initializer, so wrong order changed. Added documentation to parseTryBlockStatement and new test. Task-number: QTCREATORBUG-9064 Change-Id: Id19cdc53c034cb1232ae27e0bfe36d85b7ad0452 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'tests/auto/cplusplus/ast/tst_ast.cpp')
-rw-r--r--tests/auto/cplusplus/ast/tst_ast.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp
index adcd508f79..fff4aa3ddf 100644
--- a/tests/auto/cplusplus/ast/tst_ast.cpp
+++ b/tests/auto/cplusplus/ast/tst_ast.cpp
@@ -145,6 +145,7 @@ private slots:
void cpp_constructor_one_named_arg();
void cpp_constructor_no_arg();
void cpp_constructor_multiple_args();
+ void cpp_constructor_function_try_catch();
// objc++
void objc_simple_class();
@@ -1204,6 +1205,27 @@ void tst_AST::cpp_constructor_multiple_args()
QVERIFY(funDecl->parameter_declaration_clause->parameter_declaration_list != 0);
}
+void tst_AST::cpp_constructor_function_try_catch()
+{
+ QSharedPointer<TranslationUnit> unit(parseDeclaration("QFileInfo::QFileInfo(QString name, QString type)"
+ " try : m_name(name), m_type(type) {}"
+ " catch (...) {}"));
+ AST *ast = unit->ast();
+ QVERIFY(ast != 0);
+
+ FunctionDefinitionAST *funDef = ast->asFunctionDefinition();
+ QVERIFY(funDef != 0);
+ QVERIFY(funDef->ctor_initializer != 0);
+ QVERIFY(funDef->declarator != 0);
+ QVERIFY(funDef->declarator->postfix_declarator_list != 0);
+ QVERIFY(funDef->declarator->postfix_declarator_list->lastValue() != 0);
+
+ FunctionDeclaratorAST *funDecl = funDef->declarator->postfix_declarator_list->lastValue()->asFunctionDeclarator();
+ QVERIFY(funDecl != 0);
+ QVERIFY(funDecl->parameter_declaration_clause != 0);
+ QVERIFY(funDecl->parameter_declaration_clause->parameter_declaration_list != 0);
+}
+
void tst_AST::objc_simple_class()
{
QSharedPointer<TranslationUnit> unit(parseDeclaration("\n"