[clang] 57a51b6 - [CodeComplete] Suggest 'return nullptr' in functions returning pointers
Ilya Biryukov via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 10 04:37:33 PST 2020
Author: Ilya Biryukov
Date: 2020-01-10T13:28:13+01:00
New Revision: 57a51b689e7b99c694a028104b0b5a69b80fd002
URL: https://github.com/llvm/llvm-project/commit/57a51b689e7b99c694a028104b0b5a69b80fd002
DIFF: https://github.com/llvm/llvm-project/commit/57a51b689e7b99c694a028104b0b5a69b80fd002.diff
LOG: [CodeComplete] Suggest 'return nullptr' in functions returning pointers
Reviewers: kadircet
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D72497
Added:
Modified:
clang/lib/Sema/SemaCodeComplete.cpp
clang/test/CodeCompletion/patterns.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index b4299b615a61..0f2434fc0a23 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -2312,6 +2312,13 @@ static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC, Scope *S,
Builder.AddChunk(CodeCompletionString::CK_SemiColon);
Results.AddResult(Result(Builder.TakeString()));
}
+ // For pointers, suggest 'return nullptr' in C++.
+ if (SemaRef.getLangOpts().CPlusPlus11 &&
+ (ReturnType->isPointerType() || ReturnType->isMemberPointerType())) {
+ Builder.AddTypedTextChunk("return nullptr");
+ Builder.AddChunk(CodeCompletionString::CK_SemiColon);
+ Results.AddResult(Result(Builder.TakeString()));
+ }
}
// goto identifier ;
diff --git a/clang/test/CodeCompletion/patterns.cpp b/clang/test/CodeCompletion/patterns.cpp
index 596fe829af43..5189e3e636d5 100644
--- a/clang/test/CodeCompletion/patterns.cpp
+++ b/clang/test/CodeCompletion/patterns.cpp
@@ -33,20 +33,44 @@ void void_return() {
bool bool_return() {
// line 34
}
+int *ptr_return() {
+ // line 37
+}
+struct Cls {};
+int Cls::*memptr_return() {
+ // line 41
+}
// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:28:1 %s -o - | FileCheck -check-prefix=RETURN-VAL %s
// RETURN-VAL-NOT: COMPLETION: Pattern : return;
// RETURN-VAL-NOT: COMPLETION: Pattern : return false;
// RETURN-VAL-NOT: COMPLETION: Pattern : return true;
+// RETURN-VAL-NOT: COMPLETION: Pattern : return nullptr;
// RETURN-VAL: COMPLETION: Pattern : return <#expression#>;{{$}}
// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:31:1 %s -o - | FileCheck -check-prefix=RETURN-VOID %s
// RETURN-VOID-NOT: COMPLETION: Pattern : return false;
// RETURN-VOID-NOT: COMPLETION: Pattern : return true;
// RETURN-VOID-NOT: COMPLETION: Pattern : return <#expression#>;
+// RETURN-VOID-NOT: COMPLETION: Pattern : return nullptr;
// RETURN-VOID: COMPLETION: Pattern : return;{{$}}
// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:34:1 %s -o - | FileCheck -check-prefix=RETURN-BOOL %s
// RETURN-BOOL-NOT: COMPLETION: Pattern : return;
+// RETURN-BOOL-NOT: COMPLETION: Pattern : return nullptr;
// RETURN-BOOL: COMPLETION: Pattern : return <#expression#>;{{$}}
// RETURN-BOOL: COMPLETION: Pattern : return false;{{$}}
// RETURN-BOOL: COMPLETION: Pattern : return true;{{$}}
+
+// Check both pointer and member pointer return types.
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 -code-completion-patterns -code-completion-at=%s:37:1 %s -o - | FileCheck -check-prefix=RETURN-PTR %s
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 -code-completion-patterns -code-completion-at=%s:41:1 %s -o - | FileCheck -check-prefix=RETURN-PTR %s
+// RETURN-PTR-NOT: COMPLETION: Pattern : return false;{{$}}
+// RETURN-PTR-NOT: COMPLETION: Pattern : return true;{{$}}
+// RETURN-PTR-NOT: COMPLETION: Pattern : return;
+// RETURN-PTR: COMPLETION: Pattern : return <#expression#>;{{$}}
+// RETURN-PTR: COMPLETION: Pattern : return nullptr;
+
+// 'return nullptr' is not available before C++11.
+// RUN: %clang_cc1 -fsyntax-only -std=c++03 -code-completion-patterns -code-completion-at=%s:37:1 %s -o - | FileCheck -check-prefix=RETURN-PTR-STD03 %s
+// RUN: %clang_cc1 -fsyntax-only -std=c++03 -code-completion-patterns -code-completion-at=%s:41:1 %s -o - | FileCheck -check-prefix=RETURN-PTR-STD03 %s
+// RETURN-PTR-STD03-NOT: COMPLETION: Pattern : return nullptr;
More information about the cfe-commits
mailing list