C++: handle non-arguments in function parameter scope gracefuly

Task-number: QTCREATORBUG-8316
Change-Id: I8897f75f30d3aeaf049cc792060c582ab1e3343d
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
This commit is contained in:
Erik Verbruggen
2013-03-13 13:04:54 +01:00
committed by Nikolai Kosjar
parent 9d7e786b03
commit 857457e057
2 changed files with 51 additions and 8 deletions

View File

@@ -177,6 +177,7 @@ private slots:
void q_enum_1();
void lambda_1();
void lambda_2();
void diagnostic_error();
};
@@ -722,6 +723,33 @@ void tst_Semantic::lambda_1()
QCOMPARE(doc->globals->memberCount(), 1U);
}
void tst_Semantic::lambda_2()
{
QSharedPointer<Document> doc = document(
"\n"
"class A {\n"
" void f(int i = [](){});\n"
"};\n"
, false, false, true);
QCOMPARE(doc->errorCount, 0U);
QCOMPARE(doc->globals->memberCount(), 1U);
Class *A = doc->globals->memberAt(0)->asClass();
QVERIFY(A);
QCOMPARE(A->memberCount(), 1U);
Declaration *d = A->memberAt(0)->asDeclaration();
QCOMPARE(d->name()->identifier()->chars(), "f");
Function *ty = d->type()->asFunctionType();
QVERIFY(ty);
QCOMPARE(ty->argumentCount(), 1U);
Argument *arg = ty->argumentAt(0)->asArgument();
QVERIFY(arg);
const StringLiteral *init = arg->initializer();
QVERIFY(init);
QCOMPARE(init->chars(), " [](){}");
}
void tst_Semantic::diagnostic_error()
{
QSharedPointer<Document> doc = document("\n"