What | Removed | Added |
---|---|---|
CC | rguenther@suse.com |
(In reply to Jiri Slaby from comment #1) > > How does it come __glibc_objsize(dirbuf.lto_priv+6) is less than 4096? > > Provided it comes from parse_merge_name(): > 602 static char buf[MAXPATHLEN]; > ... > 653 return buf; > > Is it an LTO fallout? Or gcc 13.2 fallout? I cannot reproduce with 2 simple units: fun.c:1:#include <limits.h> fun.c:2: fun.c:3:__attribute__((noinline)) char *fun() fun.c:4:{ fun.c:5: static char buf[PATH_MAX]; fun.c:6: fun.c:7: return buf; fun.c:8:} fun.c:9: fun.h:1:#pragma once fun.h:2: fun.h:3:char *fun(); str.c:1:#include <err.h> str.c:2:#include <errno.h> str.c:3:#include <limits.h> str.c:4:#include <stdio.h> str.c:5:#include <stdlib.h> str.c:6:#include <string.h> str.c:7: str.c:8:#include "fun.h" str.c:9: str.c:10:int main(int, char **argv) str.c:11:{ str.c:12: char *buf = fun(); str.c:13: str.c:14: strlcpy(buf, argv[0], PATH_MAX); str.c:15: str.c:16: printf("%s\n", buf); str.c:17: str.c:18: return 0; str.c:19:} Maybe I would need to put them into 2 separated slices? LTO seems to propagate the constant (PATH_MAX) nicely to main and eliminates strlcpy_chk() completely above.