On 26. 03. 20, 11:59, Arnaud POULIQUEN wrote: > > > On 3/26/20 1:01 AM, Joe Perches wrote: >> On Wed, 2020-03-25 at 14:31 +0100, Jiri Slaby wrote: >>> The question was exactly about that: can a compiler optimize it to a >>> bare number or will strlen call remain there? >> >> $ cat str.c >> #include <string.h> >> >> int foo(void) >> { >> return strlen("abc"); >> } >> >> $ gcc -c -O2 str.c >> $ objdump -d str.o >> str.o: file format elf64-x86-64 >> >> >> Disassembly of section .text: >> >> 0000000000000000 <foo>: >> 0: f3 0f 1e fa endbr64 >> 4: b8 03 00 00 00 mov $0x3,%eax >> 9: c3 retq >> >> > same result with arm gcc using -O1 or -Og: > > str.o: file format elf32-littlearm > > > Disassembly of section .text: > > 00000000 <foo>: > 0: e3a00003 mov r0, #3 > 4: e12fff1e bx lr > > So in conclusion replacing sizeof by srlen even if not optimized in -o0, right? Right, gcc guys just confirmed, that it's constant-folded during parsing already. I asked them as I tried to dump the tree.original and the constant was already there. So we are safe to use strlen, at least for gcc :P. Others should adapt if they don't follow. thanks, -- js suse labs