| // 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:60: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; |
| }; |
| |
| template <class T> |
| decltype(auto)** not_skipped_ptr() { |
| int x; |
| if (x = 10) {} |
| // Check that this function is not skipped. |
| // CHECK: 43:9: warning: using the result of an assignment as a condition without parentheses |
| return T(); |
| } |
| |
| template <class T> |
| decltype(auto) not_skipped_decltypeauto() { |
| int x; |
| if (x = 10) {} |
| // Check that this function is not skipped. |
| // CHECK: 52: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 |
| } |