Re: [PATCH] D16298: Improve test coverage of -Wdouble-promotion
rob.lougher added a comment. Ping. Just test changes - OK to commit? http://reviews.llvm.org/D16298 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D16298: Improve test coverage of -Wdouble-promotion
rob.lougher added a comment. Ping. http://reviews.llvm.org/D16298 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D16298: Improve test coverage of -Wdouble-promotion
rob.lougher added a comment. No problem. Thanks for the code review. http://reviews.llvm.org/D16298 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r268075 - Improve test coverage of -Wdouble-promotion
Author: rlougher Date: Fri Apr 29 12:44:29 2016 New Revision: 268075 URL: http://llvm.org/viewvc/llvm-project?rev=268075&view=rev Log: 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 Modified: cfe/trunk/test/Sema/warn-double-promotion.c Modified: cfe/trunk/test/Sema/warn-double-promotion.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-double-promotion.c?rev=268075&r1=268074&r2=268075&view=diff == --- cfe/trunk/test/Sema/warn-double-promotion.c (original) +++ cfe/trunk/test/Sema/warn-double-promotion.c Fri Apr 29 12:44:29 2016 @@ -24,7 +24,7 @@ long double ReturnLongDoubleFromDouble(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 dou 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; +} ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D16298: Improve test coverage of -Wdouble-promotion
rob.lougher added a comment. Ping. Please can somebody review this? Thanks! http://reviews.llvm.org/D16298 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D16298: Improve test coverage of -Wdouble-promotion
rob.lougher created this revision. rob.lougher added a reviewer: gbiv. rob.lougher added a subscriber: cfe-commits. The -Wdouble-promotion warning was added to clang in r251588 (fixing PR15109). The added test, however, only covered a subset of the cases where implicit conversion can occur (assignment and function return). This patch extends the coverage to include argument passing and a binary operator (multiply). The patch also includes coverage for *= and the conditional (ternary) operator. However, warnings are not produced for all the *= cases, and no warnings are generated for the conditional operator. These have been marked as FIXME and I will raise bugs for these separately. Note, I've added George Burgess IV as reviewer as he committed the original change and Carl Norum (the author) doesn't seem to be registered. http://reviews.llvm.org/D16298 Files: test/Sema/warn-double-promotion.c Index: test/Sema/warn-double-promotion.c === --- test/Sema/warn-double-promotion.c +++ test/Sema/warn-double-promotion.c @@ -24,11 +24,51 @@ 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'}} f = d; f = ld; d = ld; } + +extern void DoubleParameter(double); +extern void LongDoubleParameter(long double); + +void ArgumentPassing(float f, double d, long double ld) { + 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; +} Index: test/Sema/warn-double-promotion.c === --- test/Sema/warn-double-promotion.c +++ test/Sema/warn-double-promotion.c @@ -24,11 +24,51 @@ 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'}} f = d; f = ld; d = ld; } + +extern void DoubleParameter(double); +extern void LongDoubleParameter(long double); + +void ArgumentPassing(float f, double d, long double ld) { + DoubleParameter(f); // expected-warning{{implicit conversion increases floating-point precision: 'float' to 'double'}} + LongDoubleParameter(f);
Re: [PATCH] D16298: Improve test coverage of -Wdouble-promotion
rob.lougher added a comment. Ping. http://reviews.llvm.org/D16298 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits