summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeCompletion/skip-auto-funcs.cpp
diff options
context:
space:
mode:
authorIlya Biryukov <ibiryukov@google.com>2018-05-30 12:50:48 +0000
committerIlya Biryukov <ibiryukov@google.com>2018-05-30 12:50:48 +0000
commit28f048af9db8540fb3c4a6b1cd1770a0dbb6cc3b (patch)
tree56ec9ac467648312430fe7d3f03a045d6047628a /clang/test/CodeCompletion/skip-auto-funcs.cpp
parent8573defa2d5439aeefa6cf5edab800ca9a18bf36 (diff)
downloadbcm5719-llvm-28f048af9db8540fb3c4a6b1cd1770a0dbb6cc3b.tar.gz
bcm5719-llvm-28f048af9db8540fb3c4a6b1cd1770a0dbb6cc3b.zip
[Sema] Don't skip function bodies with 'auto' without trailing return type
Summary: Skipping them was clearly not intentional. It's impossible to guarantee correctness if the bodies are skipped. Also adds a test case for r327504, now that it does not produce invalid errors that made the test fail. Reviewers: aaron.ballman, sammccall, rsmith Reviewed By: rsmith Subscribers: rayglover-ibm, rwols, cfe-commits Differential Revision: https://reviews.llvm.org/D44480 llvm-svn: 333538
Diffstat (limited to 'clang/test/CodeCompletion/skip-auto-funcs.cpp')
-rw-r--r--clang/test/CodeCompletion/skip-auto-funcs.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/clang/test/CodeCompletion/skip-auto-funcs.cpp b/clang/test/CodeCompletion/skip-auto-funcs.cpp
new file mode 100644
index 00000000000..b20f95bdf2e
--- /dev/null
+++ b/clang/test/CodeCompletion/skip-auto-funcs.cpp
@@ -0,0 +1,43 @@
+// We run clang in completion mode to force skipping of function bodies and
+// check if the function bodies were skipped by observing the warnings that
+// clang produces.
+// RUN: not %clang_cc1 -fsyntax-only -code-completion-at=%s:42:1 %s -o - 2>&1 | FileCheck %s
+template <class T>
+auto not_skipped() {
+ int x;
+ if (x = 10) {}
+ // Check that this function is not skipped.
+ // CHECK: 8:9: warning: using the result of an assignment as a condition without parentheses
+ return 1;
+}
+
+template <class T>
+auto lambda_not_skipped = []() {
+ int x;
+ if (x = 10) {}
+ // Check that this function is not skipped.
+ // CHECK: 17:9: warning: using the result of an assignment as a condition without parentheses
+ return 1;
+}
+
+template <class T>
+auto skipped() -> T {
+ int x;
+ if (x = 10) {}
+ // Check that this function is skipped.
+ // CHECK-NOT: 26:9: warning: using the result of an assignment as a condition without parentheses
+ return 1;
+};
+
+auto lambda_skipped = []() -> int {
+ int x;
+ if (x = 10) {}
+ // This could potentially be skipped, but it isn't at the moment.
+ // CHECK: 34:9: warning: using the result of an assignment as a condition without parentheses
+ return 1;
+};
+
+int test() {
+ int complete_in_this_function;
+ // CHECK: COMPLETION: complete_in_this_function
+}
OpenPOWER on IntegriCloud