diff --git a/src/libs/cplusplus/findcdbbreakpoint.cpp b/src/libs/cplusplus/findcdbbreakpoint.cpp index a5a7b1f37f6..e4f8724efbe 100644 --- a/src/libs/cplusplus/findcdbbreakpoint.cpp +++ b/src/libs/cplusplus/findcdbbreakpoint.cpp @@ -212,6 +212,7 @@ bool FindCdbBreakpoint::visit(SwitchStatementAST *ast) bool FindCdbBreakpoint::visit(TryBlockStatementAST *ast) { accept(ast->statement); + accept(ast->catch_clause_list); return false; } diff --git a/tests/auto/cplusplus/misc/tst_misc.cpp b/tests/auto/cplusplus/misc/tst_misc.cpp index 429a6237807..458431312b3 100644 --- a/tests/auto/cplusplus/misc/tst_misc.cpp +++ b/tests/auto/cplusplus/misc/tst_misc.cpp @@ -46,6 +46,7 @@ private slots: void findBreakpoints(); void findBreakpoints2(); + void findBreakpoints3(); }; void tst_Misc::diagnosticClient_error() @@ -155,7 +156,7 @@ void tst_Misc::findBreakpoints2() " }\n" "}\n" ); - Document::Ptr doc = Document::create("findContstructorBreakpoint"); + Document::Ptr doc = Document::create("findSwitchBreakpoint"); QVERIFY(!doc.isNull()); doc->setUtf8Source(src); bool success = doc->parse(); @@ -173,5 +174,32 @@ void tst_Misc::findBreakpoints2() QCOMPARE(findBreakpoint(7), 7U); } +void tst_Misc::findBreakpoints3() +{ + const QByteArray src("\n" // line 0 + "int foo() {\n" + " try {\n" // line 2 + " bar();\n" // line 3 + " } catch (Mooze &m) {\n" // line 4 + " wooze();\n" // line 5 + " }\n" + " return 0;\n" // line 7 + "}\n" + ); + Document::Ptr doc = Document::create("findCatchBreakpoint"); + QVERIFY(!doc.isNull()); + doc->setUtf8Source(src); + bool success = doc->parse(); + QVERIFY(success); + QCOMPARE(doc->diagnosticMessages().size(), 0); + FindCdbBreakpoint findBreakpoint(doc->translationUnit()); + + QCOMPARE(findBreakpoint(2), 3U); + QCOMPARE(findBreakpoint(3), 3U); + QCOMPARE(findBreakpoint(4), 5U); + QCOMPARE(findBreakpoint(5), 5U); + QCOMPARE(findBreakpoint(7), 7U); +} + QTEST_MAIN(tst_Misc) #include "tst_misc.moc"