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.
35 lines
1.3 KiB
C++
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
|
|
}
|