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

--- Comment #6 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
const char a[2][3] = { "1234", "12" };

int main ()
{
  {
    volatile int i = 1;
    int n = __builtin_strlen (a[i]);
    n += __builtin_strlen (a[0]);

    if (n != 3)
      __builtin_abort ();
  }
}

maybe you should look at this example, what is happening here?
I mean we know for sure that strlen is used on a non-zero terminated
value. especially if the initializer is exactly 3 characters wide,
it is even completely without warning, and yet __builtin_strlen (a[0])
seems to be folded to 4.

Reply via email to