mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 04:26:37 +00:00

For this patch, a simple search was performed for patterns where there are two types (usually an LHS and an RHS) which are structurally the same, and there is some result type which is resolved as either one of them (typically LHS for consistency). We change those cases to resolve as the common sugared type between those two, utilizing the new infrastructure created for this purpose. Signed-off-by: Matheus Izvekov <mizvekov@gmail.com> Differential Revision: https://reviews.llvm.org/D111509
23 lines
829 B
C++
23 lines
829 B
C++
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
|
|
|
template<typename T> void take(T);
|
|
|
|
void func(float Real, _Complex float Complex) {
|
|
Real += Complex; // expected-error {{assigning to 'float' from incompatible type '_Complex float'}}
|
|
Real += (float)Complex;
|
|
|
|
Real = Complex; // expected-error {{implicit conversion from '_Complex float' to 'float' is not permitted in C++}}
|
|
Real = (float)Complex;
|
|
|
|
take<float>(Complex); // expected-error {{implicit conversion from '_Complex float' to 'float' is not permitted in C++}}
|
|
take<double>(1.0i); // expected-error {{implicit conversion from '_Complex double' to 'double' is not permitted in C++}}
|
|
take<_Complex float>(Complex);
|
|
|
|
// Conversion to bool doesn't actually discard the imaginary part.
|
|
take<bool>(Complex);
|
|
|
|
using B = _Complex double;
|
|
B c;
|
|
c *= double();
|
|
}
|