| // RUN: %clang_cc1 -verify -fsyntax-only %s -Wdouble-promotion |
| |
| float ReturnFloatFromDouble(double d) { |
| return d; |
| } |
| |
| float ReturnFloatFromLongDouble(long double ld) { |
| return ld; |
| } |
| |
| double ReturnDoubleFromLongDouble(long double ld) { |
| return ld; |
| } |
| |
| double ReturnDoubleFromFloat(float f) { |
| return f; //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}} |
| } |
| |
| long double ReturnLongDoubleFromFloat(float f) { |
| return f; //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'long double'}} |
| } |
| |
| long double ReturnLongDoubleFromDouble(double d) { |
| return d; //expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}} |
| } |
| |
| void Convert(float f, double d, long double ld) { |
| d = f; //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}} |
| ld = f; //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'long double'}} |
| ld = d; //expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}} |
| f = d; |
| f = ld; |
| d = ld; |
| } |