[CodeComplete] Provide completion in decls even for incomplete types

Summary:
This change fixes lack of completions in the following case
('^'designates completion points) :

    void f(^);
    struct Incomplete;
    Incomplete g(^);

Reviewers: bkramer, aaron.ballman, sammccall

Reviewed By: aaron.ballman

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@332244 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ilya Biryukov 2018-05-14 13:50:36 +00:00
parent 077a4f200f
commit cfbf163f3a
2 changed files with 15 additions and 4 deletions

View File

@ -4493,10 +4493,8 @@ void Sema::CodeCompleteConstructor(Scope *S, QualType Type, SourceLocation Loc,
return;
// A complete type is needed to lookup for constructors.
if (!isCompleteType(Loc, Type))
return;
CXXRecordDecl *RD = Type->getAsCXXRecordDecl();
CXXRecordDecl *RD =
isCompleteType(Loc, Type) ? Type->getAsCXXRecordDecl() : nullptr;
if (!RD) {
CodeCompleteExpression(S, Type);
return;

View File

@ -0,0 +1,13 @@
struct IncompleteType;
int int_value;
typedef int int_typedef;
void f(in);
IncompleteType g(in);
// Completing should produce results even if types are incomplete.
// Note that clang is expected to return an error code since 'in' does not resolve.
// RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:5:9 %s -o - | FileCheck %s
// RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:6:19 %s -o - | FileCheck %s
// CHECK: COMPLETION: int{{$}}
// CHECK: COMPLETION: int_typedef
// CHECK: COMPLETION: int_value