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/Sema/SemaDeclCXX.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/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index a0534ff31f6..c5cd83da59d 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -344,13 +344,16 @@ void Sema::ActOnParamUnparsedDefaultArgument(Decl *param, /// ActOnParamDefaultArgumentError - Parsing or semantic analysis of /// the default argument for the parameter param failed. -void Sema::ActOnParamDefaultArgumentError(Decl *param) { +void Sema::ActOnParamDefaultArgumentError(Decl *param, + SourceLocation EqualLoc) { if (!param) return; ParmVarDecl *Param = cast<ParmVarDecl>(param); Param->setInvalidDecl(); UnparsedDefaultArgLocs.erase(Param); + Param->setDefaultArg(new(Context) + OpaqueValueExpr(EqualLoc, Param->getType(), VK_RValue)); } /// CheckExtraCXXDefaultArguments - Check for any extra default |

