[Bug c/65452] strcmp (foo, foo) could give a warning

mpolacek at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 25 15:42:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65452

--- Comment #9 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Testcase:

#include <string.h>

#define STR1 "str"
#define STR2 "str"
#define S1 (s)
#define S2 (s)

int
f (const char *s)
{
  int r = 0;

  r += strcmp (s, s) == 0;
  r += __builtin_strcmp (s, s) == 0;

  r += strcmp ("s", "s") == 0;
  r += __builtin_strcmp ("s", "s") == 0;

  r += strcmp ((const char *) 0, "s") == 0;
  r += __builtin_strcmp ((const char *) 0, "s") == 0;

  r += strcmp ((const char *) 0, (const char *) 0) == 0;
  r += __builtin_strcmp ((const char *) 0, (const char *) 0) == 0;

  r += strcmp (STR1, STR2) == 0;
  r += __builtin_strcmp (STR1, STR2) == 0;

  r += strcmp (STR1, "str") == 0;
  r += __builtin_strcmp (STR1, "str") == 0;

  r += strcmp ("str", STR2) == 0;
  r += __builtin_strcmp ("str", STR2) == 0;

  r += strcmp (S1, S2) == 0;
  r += __builtin_strcmp (S1, S2) == 0;

  r += strcmp (S1, s) == 0;
  r += __builtin_strcmp (S1, s) == 0;

  r += strcmp (s, S2) == 0;
  r += __builtin_strcmp (s, S2) == 0;

  return r;
}


More information about the Gcc-bugs mailing list