diff options
author | Serge Pavlov <sepavloff@gmail.com> | 2014-07-22 01:54:49 +0000 |
---|---|---|
committer | Serge Pavlov <sepavloff@gmail.com> | 2014-07-22 01:54:49 +0000 |
commit | b4b3578af7d013f5fe4f4bb323bc52bc2991ae33 (patch) | |
tree | 9dee5bba1b1f8b11e4ab3ab09a3a33178226c2bd /clang/lib/Parse/ParseDecl.cpp | |
parent | 1a711b169619e1109cb9affed650f8f12ae85f6e (diff) | |
download | bcm5719-llvm-b4b3578af7d013f5fe4f4bb323bc52bc2991ae33.tar.gz bcm5719-llvm-b4b3578af7d013f5fe4f4bb323bc52bc2991ae33.zip |
Avoid crash if default argument parsed with errors.
If function parameters have default values, and that of the second
parameter is parsed with errors, function declaration would have
a parameter without default value that follows a parameter with
that. Such declaration breaks logic of selecting overloaded
function. As a solution, put opaque object as default value in such case.
This patch fixes PR20055.
Differential Revision: http://reviews.llvm.org/D4378
llvm-svn: 213594
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 74df162b0b3..62d43768bff 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -5436,7 +5436,7 @@ void Parser::ParseParameterDeclarationClause( if (!ConsumeAndStoreInitializer(*DefArgToks, CIK_DefaultArgument)) { delete DefArgToks; DefArgToks = nullptr; - Actions.ActOnParamDefaultArgumentError(Param); + Actions.ActOnParamDefaultArgumentError(Param, EqualLoc); } else { // Mark the end of the default argument so that we know when to // stop when we parse it later on. @@ -5465,7 +5465,7 @@ void Parser::ParseParameterDeclarationClause( } else DefArgResult = ParseAssignmentExpression(); if (DefArgResult.isInvalid()) { - Actions.ActOnParamDefaultArgumentError(Param); + Actions.ActOnParamDefaultArgumentError(Param, EqualLoc); SkipUntil(tok::comma, tok::r_paren, StopAtSemi | StopBeforeMatch); } else { // Inform the actions module about the default argument |