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'}}
|
||||
}
|
||||
|
||||
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'}}
|
||||
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'}}
|
||||
@ -32,3 +32,43 @@ void Convert(float f, double d, long double ld) {
|
||||
f = 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