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