diff options
author | Sergey Shambir <sergey.shambir.auto@gmail.com> | 2013-04-03 23:33:44 +0400 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-04-09 11:31:28 +0200 |
commit | 2ead48fb2674c26aede63382277e9647f93e6586 (patch) | |
tree | 0727505cd8f0604a75755300b725056ed6347ea0 /tests/auto | |
parent | f7de8c934a24d3620816ce11bad119327f7a0471 (diff) | |
download | qt-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')
-rw-r--r-- | tests/auto/cplusplus/ast/tst_ast.cpp | 22 |
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" |