diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 3ed4839928f43d9e7c457f72744ee706a6ed07ae..654fa26c7c1a7d5a1b0480638ba6d0d16f82bd08 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -3076,7 +3076,12 @@ bool Parser::parseObjCSelectorArg(ObjCSelectorArgumentAST *&selNode, ObjCMessage selNode->colon_token = consumeToken(); argNode = new (_pool) ObjCMessageArgumentAST; - parseAssignmentExpression(argNode->parameter_value_expression); + ExpressionAST *expr = argNode->parameter_value_expression; + unsigned expressionStart = cursor(); + if (parseAssignmentExpression(expr) && LA() == T_COLON && expr->asCastExpression()) { + rewind(expressionStart); + parseUnaryExpression(expr); + } return true; }