c-format: -Wformat-diag fix [PR93641]
authorJakub Jelinek <jakub@redhat.com>
Mon, 10 Feb 2020 14:50:17 +0000 (15:50 +0100)
committerJakub Jelinek <jakub@redhat.com>
Mon, 10 Feb 2020 14:50:17 +0000 (15:50 +0100)
The last argument to strncasecmp is incorrect, so it matched even when
can%' wasn't followed by t.  Also, the !ISALPHA (format_chars[1]) test
looks pointless, format_chars[1] must be ' if strncasecmp succeeded and
so will never be ISALPHA.

2020-02-10  Jakub Jelinek  <jakub@redhat.com>

PR other/93641
* c-format.c (check_plain): Fix up last argument of strncasecmp.
Remove useless extra test.

* gcc.dg/format/gcc_diag-11.c (test_cdiag_bad_words): Add two further
tests.

gcc/c-family/ChangeLog
gcc/c-family/c-format.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/format/gcc_diag-11.c

index 9d9962068bb43b80020dccbdaa034354a17d0b3e..4ba4448006ab66abc0225271682222838c92a1e6 100644 (file)
@@ -1,3 +1,9 @@
+2020-02-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR other/93641
+       * c-format.c (check_plain): Fix up last argument of strncasecmp.
+       Remove useless extra test.
+
 2020-02-03  Julian Brown  <julian@codesourcery.com>
            Tobias Burnus  <tobias@codesourcery.com>
 
index 487edc7a5d772b68a32475fe22e6582808dd3466..51fd31e4d972143398c8c2f45a317c854b6ec2fd 100644 (file)
@@ -3270,8 +3270,7 @@ check_plain (location_t format_string_loc, tree format_string_cst,
                               "quoted %qs directive in format; "
                               "use %qs instead", "%s", "%qs");
       else if (format_chars - orig_format_chars > 2
-              && !strncasecmp (format_chars - 3, "can%'t", 5)
-              && !ISALPHA (format_chars[1]))
+              && !strncasecmp (format_chars - 3, "can%'t", 6))
        format_warning_substr (format_string_loc,
                               format_string_cst,
                               fmtchrpos - 3, fmtchrpos + 3, opt,
index 0ede9604611c1d826ad9399c4286cbc5e7c86b44..b3966ec6d9020e6fd4ab7de6dfc3ecf4b8bda40e 100644 (file)
@@ -1,3 +1,9 @@
+2020-02-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR other/93641
+       * gcc.dg/format/gcc_diag-11.c (test_cdiag_bad_words): Add two further
+       tests.
+
 2020-02-10  Feng Xue  <fxue@os.amperecomputing.com>
 
        PR ipa/93203
index a976c7aa5191373648bb9ca06f605c54e69ab1ca..262e7e5ff9916afec4bdd4d6a782cc43d0857b51 100644 (file)
@@ -400,6 +400,8 @@ void test_cdiag_bad_words (tree t, gimple *gc)
   cdiag ("you can't do that"); /* { dg-warning "contraction 'can't' in format" } */
   cdiag ("you can%'t do that");/* { dg-warning "contraction 'can%'t' in format" } */
   cdiag ("Can%'t touch this.");/* { dg-warning "contraction 'Can%'t' in format" } */
+  cdiag ("can%'");
+  cdiag ("can%' whatever");
   cdiag ("on the commandline");/* { dg-warning "misspelled term 'commandline' in format; use 'command line' instead" } */
   cdiag ("command line option");/* { dg-warning "misspelled term 'command line option' in format; use 'command-line option' instead" } */
   cdiag ("it mustn't be");     /* { dg-warning "contraction 'mustn't' in format" } */