From d5c3d343bdc26d8d16d2a3b20c25dce3c619ff69 Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Tue, 1 Jul 2014 08:31:58 +0000 Subject: [PATCH] re PR c/58286 (Need option to make incompatible pointer type warnings into compiler errors) PR c/58286 * doc/invoke.texi: Document -Wincompatible-pointer-types. c-family/ * c.opt (Wincompatible-pointer-types): New option. c/ * c-typeck.c (convert_for_assignment): Pass OPT_Wincompatible_pointer_types instead of 0 to WARN_FOR_ASSIGNMENT. testsuite/ * gcc.dg/Wincompatible-pointer-types.c: New test. From-SVN: r212192 --- gcc/ChangeLog | 5 +++++ gcc/c-family/ChangeLog | 5 +++++ gcc/c-family/c.opt | 4 ++++ gcc/c/ChangeLog | 6 ++++++ gcc/c/c-typeck.c | 3 ++- gcc/doc/invoke.texi | 14 +++++++++---- gcc/testsuite/ChangeLog | 5 +++++ .../gcc.dg/Wincompatible-pointer-types.c | 21 +++++++++++++++++++ 8 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/Wincompatible-pointer-types.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5a242641a8..76dc43c715c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-07-01 Marek Polacek + + PR c/58286 + * doc/invoke.texi: Document -Wincompatible-pointer-types. + 2014-07-01 Martin Liska IPA REF alias refactoring diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 341df696859..e8d2942482a 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2014-07-01 Marek Polacek + + PR c/58286 + * c.opt (Wincompatible-pointer-types): New option. + 2014-06-30 Paolo Carlini PR c++/51400 diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 1d02bae3063..6448b1b9495 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -443,6 +443,10 @@ Wignored-qualifiers C C++ Var(warn_ignored_qualifiers) Warning EnabledBy(Wextra) Warn whenever type qualifiers are ignored. +Wincompatible-pointer-types +C ObjC Var(warn_incompatible_pointer_types) Init(1) Warning +Warn when there is a conversion between pointers that have incompatible types + Winit-self C ObjC C++ ObjC++ Var(warn_init_self) Warning LangEnabledBy(C++ ObjC++,Wall) Warn about variables which are initialized to themselves diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 6740d513d66..c64c553a5aa 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2014-07-01 Marek Polacek + + PR c/58286 + * c-typeck.c (convert_for_assignment): Pass + OPT_Wincompatible_pointer_types instead of 0 to WARN_FOR_ASSIGNMENT. + 2014-06-30 Marek Polacek * c-decl.c (grokdeclarator): Don't instrument VLAs if the function diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index b62e83012ee..fff26a3993a 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -6189,7 +6189,8 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type, else /* Avoid warning about the volatile ObjC EH puts on decls. */ if (!objc_ok) - WARN_FOR_ASSIGNMENT (location, expr_loc, 0, + WARN_FOR_ASSIGNMENT (location, expr_loc, + OPT_Wincompatible_pointer_types, G_("passing argument %d of %qE from " "incompatible pointer type"), G_("assignment from incompatible pointer type"), diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index dbc11328a9b..409fa1716a8 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -251,7 +251,7 @@ Objective-C and Objective-C++ Dialects}. -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol -Wformat-security -Wformat-signedness -Wformat-y2k @gol -Wframe-larger-than=@var{len} -Wno-free-nonheap-object -Wjump-misses-init @gol --Wignored-qualifiers @gol +-Wignored-qualifiers -Wincompatible-pointer-types @gol -Wimplicit -Wimplicit-function-declaration -Wimplicit-int @gol -Winit-self -Winline @gol -Wno-int-to-pointer-cast -Wno-invalid-offsetof @gol @@ -4199,14 +4199,20 @@ This option is only active when @option{-ftree-vrp} is active (default for @option{-O2} and above). It warns about subscripts to arrays that are always out of bounds. This warning is enabled by @option{-Wall}. -@item -Wno-discarded-qualifiers +@item -Wno-discarded-qualifiers @r{(C and Objective-C only)} @opindex Wno-discarded-qualifiers @opindex Wdiscarded-qualifiers Do not warn if type qualifiers on pointers are being discarded. Typically, the compiler will warn if a @code{const char *} variable is passed to a function that takes @code{char *} parameter. This option -can be used to suppress such a warning. This warning is only supported -for C. +can be used to suppress such a warning. + +@item -Wno-incompatible-pointer-types @r{(C and Objective-C only)} +@opindex Wno-incompatible-pointer-types +@opindex Wincompatible-pointer-types +Do not warn when there is a conversion between pointers that have incompatible +types. This warning is for cases not covered by @option{-Wno-pointer-sign}, +which warns for pointer argument passing or assignment with different signedness @item -Wno-div-by-zero @opindex Wno-div-by-zero diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 854f7cff6d6..6dc8f950bfa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-07-01 Marek Polacek + + PR c/58286 + * gcc.dg/Wincompatible-pointer-types.c: New test. + 2014-06-30 David Holsgrove * gcc/testsuite/lib/scanasm.exp (dg-function-on-line): Add diff --git a/gcc/testsuite/gcc.dg/Wincompatible-pointer-types.c b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types.c new file mode 100644 index 00000000000..e765b27609a --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wincompatible-pointer-types.c @@ -0,0 +1,21 @@ +/* PR c/58286 */ +/* { dg-do compile } */ +/* { dg-options "-Wno-incompatible-pointer-types" } */ + +void +fn2 (short *s, long *l) +{ +} + +unsigned * +fn1 (void) +{ + int (*fpi) (int); + int (*fpd) (double) = fpi; + fpi = fpd; + char *di; + float *dp = &di; + di = dp; + fn2 (dp, di); + return dp; +}