[Bug c++/38986] New: comparing lengths of 2 strings reads through both strings completely
esigra at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Jan 27 12:08:00 GMT 2009
Suppose that someone wants to see if a string is shorter than another and
writes:
#include <string.h>
bool f(char const * const a, char const * const b) {return strlen(a) <=
strlen(b);}
Then g++ generates this:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $4, %esp
movl 8(%ebp), %eax
movl %eax, (%esp)
call strlen
movl %eax, %ebx
movl 12(%ebp), %eax
movl %eax, (%esp)
call strlen
cmpl %eax, %ebx
setbe %al
addl $4, %esp
popl %ebx
popl %ebp
ret
But it looks like this code reads through both strings completely! This is
obviously very efficient if one of the strings is much longer than the other.
It should of course only read as far into each string as the shortest of them
is long. The generated code should be similar to what this would give:
bool g(char const * a, char const * b) {
for (;; ++a, ++b)
if (not *a)
return true;
else if (not *b)
return false;
}
--
Summary: comparing lengths of 2 strings reads through both
strings completely
Product: gcc
Version: 4.3.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: esigra at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38986
More information about the Gcc-bugs
mailing list