[clang] 14aaf44 - [Sema] Split off warn_impcast_integer_float_precision_constant into -Wimplicit-const-int-float-conversion
Fangrui Song via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 23 18:33:18 PDT 2020
Author: Fangrui Song
Date: 2020-04-23T18:26:06-07:00
New Revision: 14aaf4457c641bd5130072ba2a035e254b92fad3
URL: https://github.com/llvm/llvm-project/commit/14aaf4457c641bd5130072ba2a035e254b92fad3
DIFF: https://github.com/llvm/llvm-project/commit/14aaf4457c641bd5130072ba2a035e254b92fad3.diff
LOG: [Sema] Split off warn_impcast_integer_float_precision_constant into -Wimplicit-const-int-float-conversion
Currently, both `warn_impcast_integer_float_precision_constant` and
`warn_impcast_integer_float_precision` are covered by
-Wimplicit-int-float-conversion, but only the ..._constant warning is on
by default.
`warn_impcast_integer_float_precision_constant` likely flags real problems
while `warn_impcast_integer_float_precision` may flag legitimate use
cases (for example, `int` used with limited range supported by `float`).
If -Wno-implicit-int-float-conversion is used, currently there is no way
to restore the ..._constant warning. This patch adds
-Wimplicit-const-int-float-conversion to address the issue. (Similar to
the reasoning in https://reviews.llvm.org/D64666#1598194)
Adapted from a patch by Brooks Moses.
Reviewed By: nickdesaulniers
Differential Revision: https://reviews.llvm.org/D78661
Added:
Modified:
clang/include/clang/Basic/DiagnosticGroups.td
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/test/Sema/implicit-int-float-conversion.c
Removed:
################################################################################
diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index 87444e5b6d98..3db9d5814ba3 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -85,7 +85,9 @@ def ObjCSignedCharBoolImplicitIntConversion :
DiagGroup<"objc-signed-char-bool-implicit-int-conversion">;
def ImplicitIntConversion : DiagGroup<"implicit-int-conversion",
[ObjCSignedCharBoolImplicitIntConversion]>;
-def ImplicitIntFloatConversion : DiagGroup<"implicit-int-float-conversion">;
+def ImplicitConstIntFloatConversion : DiagGroup<"implicit-const-int-float-conversion">;
+def ImplicitIntFloatConversion : DiagGroup<"implicit-int-float-conversion",
+ [ImplicitConstIntFloatConversion]>;
def ObjCSignedCharBoolImplicitFloatConversion :
DiagGroup<"objc-signed-char-bool-implicit-float-conversion">;
def ImplicitFloatConversion : DiagGroup<"implicit-float-conversion",
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 1101bd5a4bb6..c9aa49a31ed8 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -3549,7 +3549,7 @@ def warn_impcast_integer_float_precision : Warning<
InGroup<ImplicitIntFloatConversion>, DefaultIgnore;
def warn_impcast_integer_float_precision_constant : Warning<
"implicit conversion from %2 to %3 changes value from %0 to %1">,
- InGroup<ImplicitIntFloatConversion>;
+ InGroup<ImplicitConstIntFloatConversion>;
def warn_impcast_float_to_integer : Warning<
"implicit conversion from %0 to %1 changes value from %2 to %3">,
diff --git a/clang/test/Sema/implicit-int-float-conversion.c b/clang/test/Sema/implicit-int-float-conversion.c
index b8c29d2d457d..f2a2838b6406 100644
--- a/clang/test/Sema/implicit-int-float-conversion.c
+++ b/clang/test/Sema/implicit-int-float-conversion.c
@@ -1,8 +1,12 @@
-// RUN: %clang_cc1 %s -verify -Wno-conversion -Wimplicit-int-float-conversion
+// RUN: %clang_cc1 %s -verify
+// RUN: %clang_cc1 %s -verify -Wno-implicit-int-float-conversion -Wimplicit-const-int-float-conversion
+// RUN: %clang_cc1 %s -DNONCONST=1 -verify -Wimplicit-int-float-conversion
+#ifdef NONCONST
long testReturn(long a, float b) {
return a + b; // expected-warning {{implicit conversion from 'long' to 'float' may lose precision}}
}
+#endif
void testAssignment() {
float f = 222222;
@@ -12,7 +16,9 @@ void testAssignment() {
float ffff = 222222222222UL; // expected-warning {{changes value from 222222222222 to 222222221312}}
long l = 222222222222L;
+#ifdef NONCOST
float fff = l; // expected-warning {{implicit conversion from 'long' to 'float' may lose precision}}
+#endif
}
void testExpression() {
@@ -24,7 +30,9 @@ void testExpression() {
float c = 22222222 + 22222223; // expected-warning {{implicit conversion from 'int' to 'float' changes value from 44444445 to 44444444}}
int i = 0;
+#ifdef NONCONST
float d = i + a; // expected-warning {{implicit conversion from 'int' to 'float' may lose precision}}
+#endif
double e = 0.0;
double f = i + e;
@@ -36,5 +44,7 @@ void testCNarrowing() {
float a = {222222222222L}; // expected-warning {{changes value from 222222222222 to 222222221312}}
long b = 222222222222L;
+#ifdef NONCONST
float c = {b}; // expected-warning {{implicit conversion from 'long' to 'float' may lose precision}}
+#endif
}
More information about the cfe-commits
mailing list