Hi,
> -fold_builtin_strlen (location_t loc, tree type, tree arg) > +fold_builtin_strlen (location_t loc, tree fndecl, tree type, tree arg) > { > if (!validate_arg (arg, POINTER_TYPE)) > return NULL_TREE; > else > { > - tree len = c_strlen (arg, 0); > - > + tree nonstr = NULL_TREE; > + tree len = c_strlen (arg, 0, &nonstr); > if (len) > - return fold_convert_loc (loc, type, len); > + { > + if (loc == UNKNOWN_LOCATION && EXPR_HAS_LOCATION (arg)) > + loc = EXPR_LOCATION (arg); > + > + /* To avoid warning multiple times about unterminated > + arrays only warn if its length has been determined > + and is being folded to a constant. */ > + if (nonstr) > + warn_string_no_nul (loc, NULL_TREE, fndecl, nonstr); > + > + return fold_convert_loc (loc, type, len); > + } > > return NULL_TREE; If I see that right, this will do a wrong folding, just to suppress duplicate warnings. But it will re-introduce a path to PR87053, since c_strlen is supposed to return the wrong value because nonstr suggests the caller is able to handle this. I think c_strlen should never return anything that is invalid. Returning len and nonstr should be mutually exclusive events. Bernd.