From b9f6f1bcf72510fedf1b041b359062e8e80f2880 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 17 Sep 2012 09:58:09 +0200 Subject: C++11: Allow uniform initialization in ctor init lists. So class C { C() : _x{12}, _y({12}) {} }; now parses correctly. Change-Id: I4281dcb0541a86b550e74630cad6ae0a59fef1b4 Reviewed-by: hjk --- src/plugins/cpptools/cppchecksymbols.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/plugins/cpptools/cppchecksymbols.cpp') diff --git a/src/plugins/cpptools/cppchecksymbols.cpp b/src/plugins/cpptools/cppchecksymbols.cpp index c24acc2f0e..709c175c2a 100644 --- a/src/plugins/cpptools/cppchecksymbols.cpp +++ b/src/plugins/cpptools/cppchecksymbols.cpp @@ -924,10 +924,17 @@ bool CheckSymbols::visit(MemInitializerAST *ast) } else if (maybeField(nameAST->name)) { maybeAddField(_context.lookup(nameAST->name, klass), nameAST); } else { - // It's a constructor + // It's a constructor, count the number of arguments unsigned arguments = 0; - for (ExpressionListAST *it = ast->expression_list; it; it = it->next) - ++arguments; + if (ast->expression) { + ExpressionListAST *expr_list = 0; + if (ExpressionListParenAST *parenExprList = ast->expression->asExpressionListParen()) + expr_list = parenExprList->expression_list; + else if (BracedInitializerAST *bracedInitList = ast->expression->asBracedInitializer()) + expr_list = bracedInitList->expression_list; + for (ExpressionListAST *it = expr_list; it; it = it->next) + ++arguments; + } maybeAddFunction(_context.lookup(nameAST->name, klass), nameAST, arguments); } @@ -937,7 +944,7 @@ bool CheckSymbols::visit(MemInitializerAST *ast) } } - accept(ast->expression_list); + accept(ast->expression); } return false; -- cgit v1.2.1