From 4ccd12e5aae640a352129fd387657da8e4d0f95b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Manuel=20L=C3=B3pez-Ib=C3=A1=C3=B1ez?= Date: Wed, 27 Aug 2008 23:51:13 +0000 Subject: [PATCH] re PR c/37186 (-Wno-error=pointer-sign does not work) 2008-08-27 Manuel Lopez-Ibanez PR c/37186 * c-typeck.c (WARN_FOR_ASSIGNMENT): Add OPT parameter. (convert_for_assignment): Pass corrent OPT_W* parameter to WARN_FOR_ASSIGNMENT. testsuite/ * gcc.dg/pr37186.c: New. From-SVN: r139680 --- gcc/ChangeLog | 7 +++++++ gcc/c-typeck.c | 28 ++++++++++++++-------------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr37186.c | 9 +++++++++ 4 files changed, 35 insertions(+), 14 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr37186.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4b237afb5ec..d091380e3e8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-08-27 Manuel Lopez-Ibanez + + PR c/37186 + * c-typeck.c (WARN_FOR_ASSIGNMENT): Add OPT parameter. + (convert_for_assignment): Pass corrent OPT_W* parameter to + WARN_FOR_ASSIGNMENT. + 2008-08-27 Paolo Carlini PR c++/35321 diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index da5717a0548..db4718c1967 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -3952,24 +3952,24 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, /* This macro is used to emit diagnostics to ensure that all format strings are complete sentences, visible to gettext and checked at compile time. */ -#define WARN_FOR_ASSIGNMENT(LOCATION, AR, AS, IN, RE) \ +#define WARN_FOR_ASSIGNMENT(LOCATION, OPT, AR, AS, IN, RE) \ do { \ switch (errtype) \ { \ case ic_argpass: \ - pedwarn (LOCATION, 0, AR, parmnum, rname); \ + pedwarn (LOCATION, OPT, AR, parmnum, rname); \ break; \ case ic_argpass_nonproto: \ - warning (0, AR, parmnum, rname); \ + warning (OPT, AR, parmnum, rname); \ break; \ case ic_assign: \ - pedwarn (LOCATION, 0, AS); \ + pedwarn (LOCATION, OPT, AS); \ break; \ case ic_init: \ - pedwarn (LOCATION, 0, IN); \ + pedwarn (LOCATION, OPT, IN); \ break; \ case ic_return: \ - pedwarn (LOCATION, 0, RE); \ + pedwarn (LOCATION, OPT, RE); \ break; \ default: \ gcc_unreachable (); \ @@ -4151,7 +4151,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, function where an ordinary one is wanted, but not vice-versa. */ if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr)) - WARN_FOR_ASSIGNMENT (input_location, + WARN_FOR_ASSIGNMENT (input_location, 0, G_("passing argument %d of %qE " "makes qualified function " "pointer from unqualified"), @@ -4165,7 +4165,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, "pointer from unqualified")); } else if (TYPE_QUALS (ttr) & ~TYPE_QUALS (ttl)) - WARN_FOR_ASSIGNMENT (input_location, + WARN_FOR_ASSIGNMENT (input_location, 0, G_("passing argument %d of %qE discards " "qualifiers from pointer target type"), G_("assignment discards qualifiers " @@ -4265,7 +4265,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, (VOID_TYPE_P (ttr) && !null_pointer_constant_p (rhs) && TREE_CODE (ttl) == FUNCTION_TYPE))) - WARN_FOR_ASSIGNMENT (input_location, + WARN_FOR_ASSIGNMENT (input_location, OPT_pedantic, G_("ISO C forbids passing argument %d of " "%qE between function pointer " "and %"), @@ -4303,7 +4303,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, ; /* If there is a mismatch, do warn. */ else if (warn_pointer_sign) - WARN_FOR_ASSIGNMENT (input_location, + WARN_FOR_ASSIGNMENT (input_location, OPT_Wpointer_sign, G_("pointer targets in passing argument " "%d of %qE differ in signedness"), G_("pointer targets in assignment " @@ -4321,7 +4321,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, it is okay to use a const or volatile function where an ordinary one is wanted, but not vice-versa. */ if (TYPE_QUALS (ttl) & ~TYPE_QUALS (ttr)) - WARN_FOR_ASSIGNMENT (input_location, + WARN_FOR_ASSIGNMENT (input_location, 0, G_("passing argument %d of %qE makes " "qualified function pointer " "from unqualified"), @@ -4336,7 +4336,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, else /* Avoid warning about the volatile ObjC EH puts on decls. */ if (!objc_ok) - WARN_FOR_ASSIGNMENT (input_location, + WARN_FOR_ASSIGNMENT (input_location, 0, G_("passing argument %d of %qE from " "incompatible pointer type"), G_("assignment from incompatible pointer type"), @@ -4359,7 +4359,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, or one that results from arithmetic, even including a cast to integer type. */ if (!null_pointer_constant_p (rhs)) - WARN_FOR_ASSIGNMENT (input_location, + WARN_FOR_ASSIGNMENT (input_location, 0, G_("passing argument %d of %qE makes " "pointer from integer without a cast"), G_("assignment makes pointer from integer " @@ -4373,7 +4373,7 @@ convert_for_assignment (tree type, tree rhs, enum impl_conv errtype, } else if (codel == INTEGER_TYPE && coder == POINTER_TYPE) { - WARN_FOR_ASSIGNMENT (input_location, + WARN_FOR_ASSIGNMENT (input_location, 0, G_("passing argument %d of %qE makes integer " "from pointer without a cast"), G_("assignment makes integer from pointer " diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e1ead09f3cd..9fad734ca66 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-08-27 Manuel Lopez-Ibanez + + PR c/37186 + * gcc.dg/pr37186.c: New. + 2008-08-27 Janis Johnson * gcc.dg/torture/type-generic-1.c: Revert previous change. diff --git a/gcc/testsuite/gcc.dg/pr37186.c b/gcc/testsuite/gcc.dg/pr37186.c new file mode 100644 index 00000000000..7fa52ffe83d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr37186.c @@ -0,0 +1,9 @@ +/* PR 37186 */ +/* { dg-do compile } */ +/* { dg-options "-Wall -Werror -Wno-error=pointer-sign" } */ + +int foo(signed char *); +int bar(unsigned char *p) +{ + return foo(p); /* { dg-warning "pointer targets in passing argument 1 of 'foo' differ in signedness" } */ +} -- 2.30.2