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

            Bug ID: 86708
           Summary: strlen of an empty aggregate element or member string
                    not folded
           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: ---

GCC 9 can fold explicitly initialized members of aggregates but it doesn't know
to do the same for members or array elements that are initialized implicitly to
the empty string, as in the following test case:

$ cat c.c && gcc -O2 -S -Wall -fdump-tree-optimized=/dev/stdout c.c
const char a[][4] = { "123" };

int f (int i)
{
  return __builtin_strlen (a[1]);   // not folded
}

const struct {
  char a[4], b[4];
} s = { "123" };

int g (int i)
{
  return __builtin_strlen (s.b);   // not folded
}


;; Function f (f, funcdef_no=0, decl_uid=1899, cgraph_uid=1, symbol_order=1)

f (int i)
{
  long unsigned int _1;
  int _3;

  <bb 2> [local count: 1073741825]:
  _1 = __builtin_strlen (&a[1]);
  _3 = (int) _1;
  return _3;

}



;; Function g (g, funcdef_no=1, decl_uid=1906, cgraph_uid=2, symbol_order=3)

g (int i)
{
  long unsigned int _1;
  int _3;

  <bb 2> [local count: 1073741825]:
  _1 = __builtin_strlen (&s.b);
  _3 = (int) _1;
  return _3;

}

Reply via email to