From e31b8fb25b458f00e31dcd657c0840e5238e0f05 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Thu, 5 Apr 2012 00:16:44 +0000 Subject: [PATCH] Enable warn_impcast_literal_float_to_integer by default. This diagnostic seems to be production ready, it's just an oversight that it wasn't turned on by default. The test changes are a bit of a mixed bag. Some tests that seemed like they clearly didn't need to use this behavior have been modified not to use it. Others that I couldn't be sure about, I added the necessary expected-warnings to. It's possible the diagnostic message could be improved to make it clearer that this warning can be suppressed by using a value that won't lose precision when converted to the target type (but can still be a floating point literal, such as "bool b = 1.0;"). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154068 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticSemaKinds.td | 2 +- test/Analysis/array-struct-region.c | 4 ++-- test/CXX/temp/temp.spec/p5.cpp | 5 +++-- test/PCH/exprs.h | 4 +++- test/Sema/array-init.c | 4 +++- test/SemaCXX/overload-call.cpp | 2 +- test/SemaCXX/warn-thread-safety-analysis.cpp | 6 +++--- test/SemaTemplate/member-template-access-expr.cpp | 2 +- 8 files changed, 17 insertions(+), 12 deletions(-) diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index f5a72ca99c..3ecb4a7c80 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -1732,7 +1732,7 @@ def warn_impcast_bitfield_precision_constant : Warning< def warn_impcast_literal_float_to_integer : Warning< "implicit conversion turns literal floating-point number into integer: " "%0 to %1">, - InGroup, DefaultIgnore; + InGroup; def warn_impcast_string_literal_to_bool : Warning< "implicit conversion turns string literal into bool: %0 to %1">, InGroup, DefaultIgnore; diff --git a/test/Analysis/array-struct-region.c b/test/Analysis/array-struct-region.c index 1284933db0..4b085c8d70 100644 --- a/test/Analysis/array-struct-region.c +++ b/test/Analysis/array-struct-region.c @@ -25,8 +25,8 @@ int string_literal_init() { } void nested_compound_literals(int rad) { - int vec[6][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, - {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; + int vec[6][2] = {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, // expected-warning 6 {{implicit conversion turns literal floating-point number into integer}} + {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}}; // expected-warning 6 {{implicit conversion turns literal floating-point number into integer}} int a; for (a = 0; a < 6; ++a) { diff --git a/test/CXX/temp/temp.spec/p5.cpp b/test/CXX/temp/temp.spec/p5.cpp index ba99dd7093..0e69a26b04 100644 --- a/test/CXX/temp/temp.spec/p5.cpp +++ b/test/CXX/temp/temp.spec/p5.cpp @@ -14,9 +14,10 @@ struct X0 { }; template -T X0::value = 3.14; +T X0::value = 3.14; // expected-warning{{implicit conversion turns literal floating-point number into integer}} -template struct X0; // expected-note{{previous explicit instantiation}} +template struct X0; // expected-note{{previous explicit instantiation}} \ + expected-note{{requested here}} template struct X0; // expected-error{{duplicate explicit instantiation}} template void X0::f(float); // expected-note{{previous explicit instantiation}} diff --git a/test/PCH/exprs.h b/test/PCH/exprs.h index 3495b8b4bb..09a50135e4 100644 --- a/test/PCH/exprs.h +++ b/test/PCH/exprs.h @@ -86,7 +86,9 @@ double double_array[3] = { 1.0, 2.0 }; struct { int x; float y; -} designated_inits[3] = { [0].y = 17, [2].x = 12.3, 3.5 }; +} designated_inits[3] = { [0].y = 17, + [2].x = 12.3, // expected-warning {{implicit conversion turns literal floating-point number into integer}} + 3.5 }; // TypesCompatibleExpr typedef typeof(__builtin_types_compatible_p(float, double)) types_compatible; diff --git a/test/Sema/array-init.c b/test/Sema/array-init.c index a979fb9e57..26c0b24182 100644 --- a/test/Sema/array-init.c +++ b/test/Sema/array-init.c @@ -48,7 +48,9 @@ void func() { extern int blockScopeExtern[3] = { 1, 3, 5 }; // expected-error{{'extern' variable cannot have an initializer}} - static long x2[3] = { 1.0, "abc" , 5.8 }; // expected-warning{{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char [4]'}} + static long x2[3] = { 1.0, + "abc", // expected-warning{{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char [4]'}} + 5.8 }; // expected-warning {{implicit conversion turns literal floating-point number into integer}} } void test() { diff --git a/test/SemaCXX/overload-call.cpp b/test/SemaCXX/overload-call.cpp index 1cfe068a12..b5e1214866 100644 --- a/test/SemaCXX/overload-call.cpp +++ b/test/SemaCXX/overload-call.cpp @@ -233,7 +233,7 @@ float* intref(const int&); void intref_test() { float* ir1 = intref(5); - float* ir2 = intref(5.5); + float* ir2 = intref(5.5); // expected-warning{{implicit conversion turns literal floating-point number into integer}} } void derived5(C&); // expected-note{{candidate function not viable: cannot bind base class object of type 'A' to derived class reference 'C &' for 1st argument}} diff --git a/test/SemaCXX/warn-thread-safety-analysis.cpp b/test/SemaCXX/warn-thread-safety-analysis.cpp index 715645c4f0..566e5c1b84 100644 --- a/test/SemaCXX/warn-thread-safety-analysis.cpp +++ b/test/SemaCXX/warn-thread-safety-analysis.cpp @@ -1153,7 +1153,7 @@ class Foo { int Foo::foo() { int res; - w = 5.2; + w = 5; res = a_ + 5; return res; } @@ -1167,7 +1167,7 @@ void Foo::bar() mu_.Unlock(); if (x > 5) { mu1.Lock(); - g = 2.3; + g = 2; mu1.Unlock(); } } @@ -1185,7 +1185,7 @@ void main() f2->bar(); // expected-warning {{cannot call function 'bar' while mutex 'mu_' is locked}} f2->mu_.Unlock(); mu2.Lock(); - w = 2.5; + w = 2; mu2.Unlock(); } } // end namespace thread_annot_lock_13 diff --git a/test/SemaTemplate/member-template-access-expr.cpp b/test/SemaTemplate/member-template-access-expr.cpp index dbd27c456c..c95b57d4b4 100644 --- a/test/SemaTemplate/member-template-access-expr.cpp +++ b/test/SemaTemplate/member-template-access-expr.cpp @@ -60,7 +60,7 @@ struct X1 { void test_X1(X1 x1) { float *fp1 = x1.f1<>(17); - float *fp2 = x1.f1(3.14); + float *fp2 = x1.f1(3.14); // expected-warning {{implicit conversion turns literal floating-point number into integer}} int *ip1 = x1.f1(17); float *ip2 = x1.f1(3.14); -- 2.40.0