This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 3/6] New warnings -Wstring-plus-{char, int} (PR c++/62181)
On 2017-06-19 10:30 -0600, Martin Sebor wrote:
> On 06/11/2017 07:34 PM, Xi Ruoyao wrote:
> > This patch adds warning option -Wstring-plus-char for C/C++.
> >
>
> +void
> +warn_if_string_plus_char (location_t loc, tree ptrtype, tree inttype)
> +{
> + if (POINTER_TYPE_P (ptrtype)
> + && type_main_variant_is_char (TREE_TYPE (ptrtype))
> + && type_main_variant_is_char (inttype))
> + warning_at (loc, OPT_Wstring_plus_char,
> + "add %qT to string pointer %qT does not append "
> + "to the string", inttype, ptrtype);
>
> The text of the warning doesn't read like a grammatically correct
> sentence. ("Adding a to b" would be correct.)
Yes. It's a typo.
> That said, I wonder if it should also be made more accurate.
> Based on c-c++-common/Wstring-plus-char.c for the snippet below
>
> char *a;
> const char *b;
> const char c = 'c';
> const char *d = a + c;
>
> it will print
>
> warning: add 'char' to 'char *' does not append to the string
>
> even though no string is apparent or need to exist in the program
> (a could point to an array of chars with no terminating NUL).
> I see Clang prints something similar (modulo the bad grammar) but
> I think it might be clearer if the warning instead read something
> like:
>
> adding 'char' to 'char *' does not append to a string
>
> or (if the warning were to trigger only for character constants
> like in Clang):
>
> adding 'char' to 'char *' does not append 'c' to the first operand
Clang 4.0 only warns for character constants. But Clang 5.0
(pre-release) also warns for variables with type char.
Which option should we take? Maybe -Wstring-plus-char={1,2} ?
> i.e., if the warning also included the value of the character
> constant.
>
> Martin
--
Xi Ruoyao <ryxi@stu.xidian.edu.cn>
School of Aerospace Science and Technology, Xidian University