1 // RUN: %clang_cc1 -verify -fsyntax-only %s -Wdouble-promotion
2 
ReturnFloatFromDouble(double d)3 float ReturnFloatFromDouble(double d) {
4   return d;
5 }
6 
ReturnFloatFromLongDouble(long double ld)7 float ReturnFloatFromLongDouble(long double ld) {
8   return ld;
9 }
10 
ReturnDoubleFromLongDouble(long double ld)11 double ReturnDoubleFromLongDouble(long double ld) {
12   return ld;
13 }
14 
ReturnDoubleFromFloat(float f)15 double ReturnDoubleFromFloat(float f) {
16   return f;  //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}}
17 }
18 
ReturnLongDoubleFromFloat(float f)19 long double ReturnLongDoubleFromFloat(float f) {
20   return f;  //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'long double'}}
21 }
22 
ReturnLongDoubleFromDouble(double d)23 long double ReturnLongDoubleFromDouble(double d) {
24   return d;  //expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}}
25 }
26 
Convert(float f,double d,long double ld)27 void Convert(float f, double d, long double ld) {
28   d = f;  //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}}
29   ld = f; //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'long double'}}
30   ld = d; //expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}}
31   f = d;
32   f = ld;
33   d = ld;
34 }
35