Previously, -fshow-overloads=best always showed 4 candidates. The problem is, when this isn't enough, you're kind of up a creek; the only option available is to recompile with different flags. This can be quite expensive! With this change, we try to strike a compromise. The *first* error with more than 4 candidates will show up to 32 candidates. All further errors continue to show only 4 candidates. The hope is that this way, users will have *some chance* of making forward progress, without facing unbounded amounts of error spam. Differential Revision: https://reviews.llvm.org/D95754
33 lines
1.1 KiB
C++
33 lines
1.1 KiB
C++
// RUN: not %clang_cc1 -fsyntax-only -fshow-overloads=best -fno-caret-diagnostics %s 2>&1 | FileCheck %s
|
|
struct S {
|
|
S(void*);
|
|
S(char*);
|
|
S(unsigned char*);
|
|
S(signed char*);
|
|
S(unsigned short*);
|
|
S(signed short*);
|
|
S(unsigned int*);
|
|
S(signed int*);
|
|
};
|
|
void f(const S& s);
|
|
|
|
// First call to f emits all candidates. Second call emits just the first 4.
|
|
void g() { f(0); }
|
|
// CHECK: {{conversion from 'int' to 'const S' is ambiguous}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
|
|
void h() { f(0); }
|
|
// CHECK: {{conversion from 'int' to 'const S' is ambiguous}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{candidate constructor}}
|
|
// CHECK-NEXT: {{remaining 4 candidates omitted; pass -fshow-overloads=all to show them}}
|