--- Comment #6 from Jakub Jelinek <jakub at gcc dot> ---
Short testcase for the latter, -O2 -Wall vs. -O2 -Wall -fsanitize=address:
struct S { char p[32]; };

struct S *
foo (char *q)
  struct S *p = __builtin_malloc (sizeof (struct S));
  __builtin_strncpy (p->p, q, 32);
  p->p[31] = '\0';
  return p;

With -fsanitize={,kernel-}address there is:
  __builtin_strncpy (_1, q_5(D), 32);
  _8 = &p_4->p[31];
  ASAN_CHECK (7, _8, 1, 1);
  p_4->p[31] = 0;
So, the -Wstringop-truncation would need to do the suggested alias search for
the store rather than next statement it does now, and in addition to that would
need to ignore ASAN_CHECK, because those are guaranteed not to actually read
the passed memory, just to check corresponding shadow memory.

Reply via email to