Hunspell's test alias3 fails. Distilled testcase: typedef __SIZE_TYPE__ size_t; struct S { int a; char b[1]; }; __attribute__((noipa)) size_t foo (struct S *p) { return __builtin_strlen (&p->b[0]); } __attribute__((noipa)) size_t bar (struct S *p) { return __builtin_strlen (p->b); } int main () { struct S *p = __builtin_malloc (sizeof (struct S) + 16); if (p) { p->a = 1; __builtin_strcpy (p->b, "abcdefg"); if (foo (p) != 7 || bar (p) != 7) __builtin_abort (); __builtin_free (p); } return 0; } Started with r256457.
Jakub has a fix.
Created attachment 43396 [details] gcc8-pr84339.patch Untested fix.
Author: jakub Date: Tue Feb 13 08:35:53 2018 New Revision: 257618 URL: https://gcc.gnu.org/viewcvs?rev=257618&root=gcc&view=rev Log: PR tree-optimization/84339 * gimple-fold.c (get_range_strlen): Set *FLEXP to true when handling ARRAY_REF where first operand is array_at_struct_end_p COMPONENT_REF. Formatting fixes. * gcc.c-torture/execute/pr84339.c: New test. Added: trunk/gcc/testsuite/gcc.c-torture/execute/pr84339.c Modified: trunk/gcc/ChangeLog trunk/gcc/gimple-fold.c trunk/gcc/testsuite/ChangeLog
Fixed.