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 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.)
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
i.e., if the warning also included the value of the character
constant.
Martin