mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-12 04:43:48 +00:00
Improve test coverage of -Wdouble-promotion
This patch adds coverage for additional cases where implicit conversion can occur (assignment and return). It also adds tests for some cases where a warning should occur but none is produced. These are marked as FIXME. Differential Revision: http://reviews.llvm.org/D16298 llvm-svn: 268075
This commit is contained in:
parent
464f1f3bea
commit
c7deb18049
@ -24,7 +24,7 @@ long double ReturnLongDoubleFromDouble(double d) {
|
|||||||
return d; //expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}}
|
return d; //expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Convert(float f, double d, long double ld) {
|
void Assignment(float f, double d, long double ld) {
|
||||||
d = f; //expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}}
|
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 = 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'}}
|
ld = d; //expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}}
|
||||||
@ -32,3 +32,43 @@ void Convert(float f, double d, long double ld) {
|
|||||||
f = ld;
|
f = ld;
|
||||||
d = ld;
|
d = ld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void DoubleParameter(double);
|
||||||
|
extern void LongDoubleParameter(long double);
|
||||||
|
|
||||||
|
void ArgumentPassing(float f, double d) {
|
||||||
|
DoubleParameter(f); // expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}}
|
||||||
|
LongDoubleParameter(f); // expected-warning{{implicit conversion increases floating-point precision: 'float' to 'long double'}}
|
||||||
|
LongDoubleParameter(d); // expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BinaryOperator(float f, double d, long double ld) {
|
||||||
|
f = f * d; // expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}}
|
||||||
|
f = d * f; // expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}}
|
||||||
|
f = f * ld; // expected-warning{{implicit conversion increases floating-point precision: 'float' to 'long double'}}
|
||||||
|
f = ld * f; // expected-warning{{implicit conversion increases floating-point precision: 'float' to 'long double'}}
|
||||||
|
d = d * ld; // expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}}
|
||||||
|
d = ld * d; // expected-warning{{implicit conversion increases floating-point precision: 'double' to 'long double'}}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MultiplicationAssignment(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'}}
|
||||||
|
|
||||||
|
// FIXME: These cases should produce warnings as above.
|
||||||
|
f *= d;
|
||||||
|
f *= ld;
|
||||||
|
d *= ld;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: As with a binary operator, the operands to the conditional operator are
|
||||||
|
// converted to a common type and should produce a warning.
|
||||||
|
void ConditionalOperator(float f, double d, long double ld, int i) {
|
||||||
|
f = i ? f : d;
|
||||||
|
f = i ? d : f;
|
||||||
|
f = i ? f : ld;
|
||||||
|
f = i ? ld : f;
|
||||||
|
d = i ? d : ld;
|
||||||
|
d = i ? ld : d;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user