From ac91cd701edad8df82aa7f12c9c51c1a3e7ba09e Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 7 Mar 2013 19:24:32 +0000 Subject: [PATCH] Fix -Wpointer-sign around strings/encoding conversions. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Trimmed for brevity: $ make WERROR_CFLAGS="-Wpointer-sign -Werror" c-lang.o expprint.o utils.o valprint.o varobj.o -k 2>&1 1>/dev/null ../../src/gdb/c-lang.c: In function ‘parse_one_string’: ../../src/gdb/c-lang.c:540:8: error: pointer targets in passing argument 3 of ‘convert_between_encodings’ differ in signedness [-Werror=pointer-sign] In file included from ../../src/gdb/c-lang.c:30:0: ../../src/gdb/charset.h:64:6: note: expected ‘const gdb_byte *’ but argument is of type ‘char *’ ../../src/gdb/expprint.c: In function ‘print_subexp_standard’: ../../src/gdb/expprint.c:205:2: error: pointer targets in passing argument 3 of ‘current_language->la_printstr’ differ in signedness [-Werror=pointer-sign] ../../src/gdb/expprint.c:205:2: note: expected ‘const gdb_byte *’ but argument is of type ‘char *’ cc1: all warnings being treated as errors make: *** [expprint.o] Error 1 ../../src/gdb/utils.c: In function ‘host_char_to_target’: ../../src/gdb/utils.c:1474:9: error: pointer targets in passing argument 3 of ‘convert_between_encodings’ differ in signedness [-Werror=pointer-sign] ../../src/gdb/varobj.c: In function ‘value_get_print_value’: ../../src/gdb/varobj.c:2934:8: error: pointer targets in return differ in signedness [-Werror=pointer-sign] ../../src/gdb/varobj.c:2968:12: error: pointer targets in assignment differ in signedness [-Werror=pointer-sign] ../../src/gdb/varobj.c:2971:3: error: pointer targets in return differ in signedness [-Werror=pointer-sign] cc1: all warnings being treated as errors make: *** [varobj.o] Error 1 As with the previous patch, the encoding conversion code works with gdb_byte arrays as the generic buffers that hold strings of any encoding/width. This patch adds casts where appropriate. gdb/ 2013-03-07 Pedro Alves * c-lang.c (parse_one_string): Cast argument to gdb_byte *. * expprint.c (print_subexp_standard): Likewise. * utils.c (host_char_to_target): Likewise. * valprint.c (generic_emit_char, generic_printstr): Likewise. * varobj.c (value_get_print_value): Change type of local to char*. Cast it gdb_byte * in call to language printer. --- gdb/ChangeLog | 9 +++++++++ gdb/c-lang.c | 2 +- gdb/expprint.c | 8 +++++--- gdb/utils.c | 3 ++- gdb/valprint.c | 4 ++-- gdb/varobj.c | 4 ++-- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a57e2c1f326..c8787fc454f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2013-03-07 Pedro Alves + + * c-lang.c (parse_one_string): Cast argument to gdb_byte *. + * expprint.c (print_subexp_standard): Likewise. + * utils.c (host_char_to_target): Likewise. + * valprint.c (generic_emit_char, generic_printstr): Likewise. + * varobj.c (value_get_print_value): Change type of local to char*. + Cast it gdb_byte * in call to language printer. + 2013-03-07 Pedro Alves * charset.c (struct wchar_iterator) : Change type to 'const diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 91cb21ecd2e..1c1d60b4f53 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -536,7 +536,7 @@ parse_one_string (struct obstack *output, char *data, int len, /* If we saw a run of characters, convert them all. */ if (p > data) convert_between_encodings (host_charset (), dest_charset, - data, p - data, 1, + (gdb_byte *) data, p - data, 1, output, translit_none); /* If we saw an escape, convert it. */ if (p < limit) diff --git a/gdb/expprint.c b/gdb/expprint.c index 4dd2d7c9f72..69055348cf6 100644 --- a/gdb/expprint.c +++ b/gdb/expprint.c @@ -203,7 +203,8 @@ print_subexp_standard (struct expression *exp, int *pos, additional parameter to LA_PRINT_STRING. -fnf */ get_user_print_options (&opts); LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char, - &exp->elts[pc + 2].string, nargs, NULL, 0, &opts); + (gdb_byte *) &exp->elts[pc + 2].string, nargs, + NULL, 0, &opts); } return; @@ -217,7 +218,8 @@ print_subexp_standard (struct expression *exp, int *pos, fputs_filtered ("@\"", stream); get_user_print_options (&opts); LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char, - &exp->elts[pc + 2].string, nargs, NULL, 0, &opts); + (gdb_byte *) &exp->elts[pc + 2].string, nargs, + NULL, 0, &opts); fputs_filtered ("\"", stream); } return; @@ -307,7 +309,7 @@ print_subexp_standard (struct expression *exp, int *pos, get_user_print_options (&opts); LA_PRINT_STRING (stream, builtin_type (exp->gdbarch)->builtin_char, - tempstr, nargs - 1, NULL, 0, &opts); + (gdb_byte *) tempstr, nargs - 1, NULL, 0, &opts); (*pos) = pc; } else diff --git a/gdb/utils.c b/gdb/utils.c index 6065d8221b3..4c2f08c91b8 100644 --- a/gdb/utils.c +++ b/gdb/utils.c @@ -1471,7 +1471,8 @@ host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c) cleanups = make_cleanup_obstack_free (&host_data); convert_between_encodings (target_charset (gdbarch), host_charset (), - &the_char, 1, 1, &host_data, translit_none); + (gdb_byte *) &the_char, 1, 1, + &host_data, translit_none); if (obstack_object_size (&host_data) == 1) { diff --git a/gdb/valprint.c b/gdb/valprint.c index 05d6c3e1157..18cff49f3b5 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -2071,7 +2071,7 @@ generic_emit_char (int c, struct type *type, struct ui_file *stream, make_cleanup_obstack_free (&output); convert_between_encodings (INTERMEDIATE_ENCODING, host_charset (), - obstack_base (&wchar_buf), + (gdb_byte *) obstack_base (&wchar_buf), obstack_object_size (&wchar_buf), sizeof (gdb_wchar_t), &output, translit_char); obstack_1grow (&output, '\0'); @@ -2426,7 +2426,7 @@ generic_printstr (struct ui_file *stream, struct type *type, make_cleanup_obstack_free (&output); convert_between_encodings (INTERMEDIATE_ENCODING, host_charset (), - obstack_base (&wchar_buf), + (gdb_byte *) obstack_base (&wchar_buf), obstack_object_size (&wchar_buf), sizeof (gdb_wchar_t), &output, translit_char); obstack_1grow (&output, '\0'); diff --git a/gdb/varobj.c b/gdb/varobj.c index 9255dc4dced..33ed7cf5194 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -2844,7 +2844,7 @@ value_get_print_value (struct value *value, enum varobj_display_formats format, { struct ui_file *stb; struct cleanup *old_chain; - gdb_byte *thevalue = NULL; + char *thevalue = NULL; struct value_print_options opts; struct type *type = NULL; long len = 0; @@ -2956,7 +2956,7 @@ value_get_print_value (struct value *value, enum varobj_display_formats format, /* If the THEVALUE has contents, it is a regular string. */ if (thevalue) - LA_PRINT_STRING (stb, type, thevalue, len, encoding, 0, &opts); + LA_PRINT_STRING (stb, type, (gdb_byte *) thevalue, len, encoding, 0, &opts); else if (string_print) /* Otherwise, if string_print is set, and it is not a regular string, it is a lazy string. */ -- 2.30.2