Files
clang-p2996/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp
Erich Keane 6976fef05b Update 'note-candiate' functions to skip lambda-conversion-op-overloads
In the wake of https://reviews.llvm.org/D89559, we discovered that a
couple of tests (the ones modified below to have additional triple
versions) would fail on Win32, for 1 of two reasons.  We seem to not
have a win32 buildbot anymore, so the triple is to make sure this
doesn't get broken in the future.

First, two of the three 'note-candidate' functions weren't appropriately
skipping the remaining conversion functions.

Second, in 1 situation (note surrogate candidates) we actually print the
type of the conversion operator.  The two tests that ran into that
needed updating to make sure it printed the proper one in the win32
case.
2020-11-17 05:49:31 -08:00

35 lines
1.3 KiB
C++

// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
// RUN: %clang_cc1 -fsyntax-only -std=c++1z %s -verify
// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -triple i386-windows-pc -verify
// RUN: %clang_cc1 -fsyntax-only -std=c++1z %s -triple i386-windows-pc -verify
void test_conversion() {
int (*fp1)(int) = [](int x) { return x + 1; };
void (*fp2)(int) = [](int x) { };
const auto lambda = [](int x) { };
void (*fp3)(int) = lambda;
volatile const auto lambda2 = [](int x) { }; // expected-note{{but method is not marked volatile}}
void (*fp4)(int) = lambda2; // expected-error{{no viable conversion}}
void (*fp5)(int) noexcept = [](int x) { };
#if __cplusplus > 201402L
// expected-error@-2 {{no viable}} expected-note@-2 {{candidate}}
void (*fp5a)(int) noexcept = [](auto x) { };
// expected-error@-1 {{no viable}} expected-note@-1 {{candidate}}
void (*fp5b)(int) noexcept = [](auto x) noexcept { };
#endif
void (*fp6)(int) noexcept = [](int x) noexcept { };
}
void test_no_conversion() {
int (*fp1)(int) = [=](int x) { return x + 1; }; // expected-error{{no viable conversion}}
void (*fp2)(int) = [&](int x) { }; // expected-error{{no viable conversion}}
}
void test_wonky() {
const auto l = [](int x) mutable -> int { return + 1; };
l(17); // okay: uses conversion function
}