diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-01-13 07:42:33 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-01-13 07:42:33 +0000 |
commit | b3c6d52d3abb6595610798b45c932f42c9003265 (patch) | |
tree | 0c381d9dc07f5caf2b448b5cfa61fe92cbf84ec1 /clang/lib/Sema/SemaDeclCXX.cpp | |
parent | 26cc634dbfef1f8828f47066a163f9c07b4f741f (diff) | |
download | bcm5719-llvm-b3c6d52d3abb6595610798b45c932f42c9003265.tar.gz bcm5719-llvm-b3c6d52d3abb6595610798b45c932f42c9003265.zip |
Parse: Don't crash when default argument in typedef consists of sole '='
We'd crash trying to make the SourceRange for the tokens we'd like to
highlight. Don't assume there is more than one token makes up the
default argument.
llvm-svn: 225774
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index b84ea7b04f5..510738ea816 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -388,9 +388,14 @@ void Sema::CheckExtraCXXDefaultArguments(Declarator &D) { ParmVarDecl *Param = cast<ParmVarDecl>(chunk.Fun.Params[argIdx].Param); if (Param->hasUnparsedDefaultArg()) { CachedTokens *Toks = chunk.Fun.Params[argIdx].DefaultArgTokens; + SourceRange SR; + if (Toks->size() > 1) + SR = SourceRange((*Toks)[1].getLocation(), + Toks->back().getLocation()); + else + SR = UnparsedDefaultArgLocs[Param]; Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) - << SourceRange((*Toks)[1].getLocation(), - Toks->back().getLocation()); + << SR; delete Toks; chunk.Fun.Params[argIdx].DefaultArgTokens = nullptr; } else if (Param->getDefaultArg()) { |