re PR c++/35669 (NULL (__null) not considered different from 0 with C++)
2010-02-20 Manuel López-Ibáñez <manu@gcc.gnu.org> PR c++/35669 * c.opt (Wconversion-null): New option. * doc/invoke.texi (Wconversion-null): Document. cp/ * call.c (conversion_null_warnings): Replace -Wconversion with -Wconversion-null. * cvt.c (build_expr_type_conversion): Likewise. testsuite/ * g++.dg/warn/Wconversion2.C: Replace -Wconversion with -Wconversion-null. * g++.dg/warn/Wconversion-null.C: New test. * g++.old-deja/g++.other/null1.C: Move to... * g++.dg/warn/Wconversion-null-2.C: ... here. Remove -Wconversion. libstdc++-v3/ * testsuite/18_support/headers/cstddef/macros.cc: Add -Wno-conversion-null. From-SVN: r156928
This commit is contained in:
parent
c387e0676e
commit
17251338de
12 changed files with 102 additions and 17 deletions
|
@ -1,3 +1,9 @@
|
|||
2010-02-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/35669
|
||||
* c.opt (Wconversion-null): New option.
|
||||
* doc/invoke.texi (Wconversion-null): Document.
|
||||
|
||||
2010-02-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
* common.opt (Wlarger-than-): Add Undocumented.
|
||||
|
|
|
@ -171,6 +171,10 @@ Wconversion
|
|||
C ObjC C++ ObjC++ Var(warn_conversion) Warning
|
||||
Warn for implicit type conversions that may change a value
|
||||
|
||||
Wconversion-null
|
||||
C++ ObjC++ Var(warn_conversion_null) Init(1) Warning
|
||||
Warn for converting NULL from/to a non-pointer type
|
||||
|
||||
Wsign-conversion
|
||||
C ObjC C++ ObjC++ Var(warn_sign_conversion) Init(-1)
|
||||
Warn for implicit type conversions between signed and unsigned integers
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2010-02-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/35669
|
||||
* call.c (conversion_null_warnings): Replace -Wconversion with
|
||||
-Wconversion-null.
|
||||
* cvt.c (build_expr_type_conversion): Likewise.
|
||||
|
||||
2010-02-18 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/42837
|
||||
|
|
|
@ -4804,17 +4804,19 @@ conversion_null_warnings (tree totype, tree expr, tree fn, int argnum)
|
|||
if (expr == null_node && TREE_CODE (t) != BOOLEAN_TYPE && ARITHMETIC_TYPE_P (t))
|
||||
{
|
||||
if (fn)
|
||||
warning (OPT_Wconversion, "passing NULL to non-pointer argument %P of %qD",
|
||||
argnum, fn);
|
||||
warning_at (input_location, OPT_Wconversion_null,
|
||||
"passing NULL to non-pointer argument %P of %qD",
|
||||
argnum, fn);
|
||||
else
|
||||
warning (OPT_Wconversion, "converting to non-pointer type %qT from NULL", t);
|
||||
warning_at (input_location, OPT_Wconversion_null,
|
||||
"converting to non-pointer type %qT from NULL", t);
|
||||
}
|
||||
|
||||
/* Issue warnings if "false" is converted to a NULL pointer */
|
||||
else if (expr == boolean_false_node && fn && POINTER_TYPE_P (t))
|
||||
warning (OPT_Wconversion,
|
||||
"converting %<false%> to pointer type for argument %P of %qD",
|
||||
argnum, fn);
|
||||
warning_at (input_location, OPT_Wconversion_null,
|
||||
"converting %<false%> to pointer type for argument %P of %qD",
|
||||
argnum, fn);
|
||||
}
|
||||
|
||||
/* Perform the conversions in CONVS on the expression EXPR. FN and
|
||||
|
|
|
@ -1141,7 +1141,8 @@ build_expr_type_conversion (int desires, tree expr, bool complain)
|
|||
if (expr == null_node
|
||||
&& (desires & WANT_INT)
|
||||
&& !(desires & WANT_NULL))
|
||||
warning (OPT_Wconversion, "converting NULL to non-pointer type");
|
||||
warning_at (input_location, OPT_Wconversion_null,
|
||||
"converting NULL to non-pointer type");
|
||||
|
||||
basetype = TREE_TYPE (expr);
|
||||
|
||||
|
|
|
@ -194,7 +194,7 @@ in the following sections.
|
|||
-fno-threadsafe-statics -fuse-cxa-atexit -fno-weak -nostdinc++ @gol
|
||||
-fno-default-inline -fvisibility-inlines-hidden @gol
|
||||
-fvisibility-ms-compat @gol
|
||||
-Wabi -Wctor-dtor-privacy @gol
|
||||
-Wabi -Wconversion-null -Wctor-dtor-privacy @gol
|
||||
-Wnon-virtual-dtor -Wreorder @gol
|
||||
-Weffc++ -Wstrict-null-sentinel @gol
|
||||
-Wno-non-template-friend -Wold-style-cast @gol
|
||||
|
@ -3837,14 +3837,19 @@ changed by the conversion like in @code{abs (2.0)}. Warnings about
|
|||
conversions between signed and unsigned integers can be disabled by
|
||||
using @option{-Wno-sign-conversion}.
|
||||
|
||||
For C++, also warn for conversions between @code{NULL} and non-pointer
|
||||
types; confusing overload resolution for user-defined conversions; and
|
||||
conversions that will never use a type conversion operator:
|
||||
conversions to @code{void}, the same type, a base class or a reference
|
||||
to them. Warnings about conversions between signed and unsigned
|
||||
integers are disabled by default in C++ unless
|
||||
For C++, also warn for confusing overload resolution for user-defined
|
||||
conversions; and conversions that will never use a type conversion
|
||||
operator: conversions to @code{void}, the same type, a base class or a
|
||||
reference to them. Warnings about conversions between signed and
|
||||
unsigned integers are disabled by default in C++ unless
|
||||
@option{-Wsign-conversion} is explicitly enabled.
|
||||
|
||||
@item -Wno-conversion-null @r{(C++)}
|
||||
@opindex Wconversion-null
|
||||
@opindex Wno-conversion-null
|
||||
Do not warn for conversions between @code{NULL} and non-pointer
|
||||
types. @option{-Wconversion-null} is enabled by default.
|
||||
|
||||
@item -Wempty-body
|
||||
@opindex Wempty-body
|
||||
@opindex Wno-empty-body
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2010-02-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/35669
|
||||
* g++.dg/warn/Wconversion2.C: Replace -Wconversion with
|
||||
-Wconversion-null.
|
||||
* g++.dg/warn/Wconversion-null.C: New test.
|
||||
* g++.old-deja/g++.other/null1.C: Move to...
|
||||
* g++.dg/warn/Wconversion-null-2.C: ... here. Remove -Wconversion.
|
||||
|
||||
2010-02-20 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/36932
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// { dg-do link }
|
||||
// { dg-options "-Wconversion" }
|
||||
// { dg-options "" }
|
||||
|
||||
#include <cstddef>
|
||||
|
45
gcc/testsuite/g++.dg/warn/Wconversion-null.C
Normal file
45
gcc/testsuite/g++.dg/warn/Wconversion-null.C
Normal file
|
@ -0,0 +1,45 @@
|
|||
// { dg-do link }
|
||||
// { dg-options "-Wconversion -Wno-conversion-null -Wno-pointer-arith" }
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
void g(int) {}
|
||||
void g(long) {}
|
||||
extern void g(void*);
|
||||
|
||||
template <int I>
|
||||
void h() {}
|
||||
|
||||
void k(int) {}
|
||||
|
||||
template <class T>
|
||||
void l(T);
|
||||
|
||||
template <>
|
||||
void l(int) {}
|
||||
|
||||
template <>
|
||||
void l(long) {}
|
||||
|
||||
int main()
|
||||
{
|
||||
int i = NULL; // converting NULL to non-pointer type
|
||||
float z = NULL; // converting NULL to non-pointer type
|
||||
int a[2];
|
||||
|
||||
i != NULL; // NULL used in arithmetic
|
||||
NULL != z; // NULL used in arithmetic
|
||||
k != NULL; // No warning: decay conversion
|
||||
NULL != a; // Likewise.
|
||||
-NULL; // converting NULL to non-pointer type
|
||||
+NULL; // converting NULL to non-pointer type
|
||||
~NULL; // converting NULL to non-pointer type
|
||||
a[NULL] = 3; // converting NULL to non-pointer-type
|
||||
i = NULL; // converting NULL to non-pointer type
|
||||
z = NULL; // converting NULL to non-pointer type
|
||||
k(NULL); // converting NULL to int
|
||||
g(NULL); // converting NULL to int
|
||||
h<NULL>(); // No warning: NULL bound to integer template parameter
|
||||
l(NULL); // converting NULL to int
|
||||
NULL && NULL; // No warning: converting NULL to bool is OK
|
||||
}
|
|
@ -1,4 +1,3 @@
|
|||
// { dg-options "-Wconversion" }
|
||||
|
||||
// { dg-options "-Wconversion-null" }
|
||||
void foo(const char *);
|
||||
void bar() { foo(false); } // { dg-warning "pointer type for argument" }
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2010-02-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR c++/35669
|
||||
* testsuite/18_support/headers/cstddef/macros.cc: Add
|
||||
-Wno-conversion-null.
|
||||
|
||||
2010-02-19 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* include/tr1_impl/array (array): Add pointer and const_pointer
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-Wno-conversion-null" }
|
||||
// 2001-02-06 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
|
||||
|
|
Loading…
Add table
Reference in a new issue