Fixed failing assert in code completion.

Summary:
The code was accessing uninstantiated default argument.
This resulted in failing assertion at ParmVarDecl::getDefaultArg().

Reviewers: erikjv, klimek, bkramer, krasimir

Reviewed By: krasimir

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D35682

llvm-svn: 308722
This commit is contained in:
Ilya Biryukov 2017-07-21 09:24:00 +00:00
parent ba3bd7ce3e
commit b6d1ec8073
2 changed files with 14 additions and 4 deletions

View File

@ -2401,10 +2401,7 @@ formatBlockPlaceholder(const PrintingPolicy &Policy, const NamedDecl *BlockDecl,
static std::string GetDefaultValueString(const ParmVarDecl *Param,
const SourceManager &SM,
const LangOptions &LangOpts) {
const Expr *defaultArg = Param->getDefaultArg();
if (!defaultArg)
return "";
const SourceRange SrcRange = defaultArg->getSourceRange();
const SourceRange SrcRange = Param->getDefaultArgRange();
CharSourceRange CharSrcRange = CharSourceRange::getTokenRange(SrcRange);
bool Invalid = CharSrcRange.isInvalid();
if (Invalid)

View File

@ -0,0 +1,13 @@
template <class T>
struct unique_ptr {
typedef T* pointer;
void reset(pointer ptr = pointer());
};
void test() {
unique_ptr<int> x;
x.
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:10:5 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
// CHECK-CC1: [#void#]reset({#<#unique_ptr<int>::pointer ptr = pointer()#>#})
}