https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87011
Bug ID: 87011 Summary: [9 Regression] partially dead memset before strcpy not eliminated Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- In released versions of GCC the memset call would be optimized by DSE to memset (_6, 0, 12). On trunk, however, this is not done: $ cat f.c && gcc -O2 -S -Wall -fdump-tree-optimized=/dev/stdout f.c struct S { char a[4]; void (*pf)(void); }; void f (struct S *p) { __builtin_memset (p, 0, sizeof *p); __builtin_strcpy (p->a, "123"); } ;; dump 228: optimized (enabled by -ftree-optimized) ;; Function f (f, funcdef_no=0, decl_uid=1910, cgraph_uid=1, symbol_order=0) f (struct S * p) { char[4] * _1; <bb 2> [local count: 1073741825]: __builtin_memset (p_3(D), 0, 16); _1 = &p_3(D)->a; __builtin_memcpy (_1, "123", 4); [tail call] return; }