Code:
_Z5is_inISsEbRKT_S2_:
.LFB2015:
pushl %ebp
.LCFI134:
movl %esp, %ebp
.LCFI135:
pushl %ebx
.LCFI136:
subl $116, %esp
.LCFI137:
leal -32(%ebp), %eax
movl %eax, (%esp)
[snip lots of setup code]
call _ZN9__gnu_cxxeqIPKcSsEEbRKNS_17__normal_iteratorIT_T0_EES8_
testb %al, %al
je .L132
.L130:
movb $1, -97(%ebp)
jmp .L133
.L132:
movb $0, -97(%ebp)
.L133:
movzbl -97(%ebp), %eax
testb %al, %al
je .L134
movl $0, -96(%ebp)
jmp .L136
.L134:
leal -88(%ebp), %edx
movl $0, 8(%esp)
leal -32(%ebp), %eax
movl %eax, 4(%esp)
movl %edx, (%esp)
call _ZN9__gnu_cxx17__normal_iteratorIPKcSsEppEi
subl $4, %esp
.L128:
leal -92(%ebp), %edx
movl 8(%ebp), %eax
movl %eax, 4(%esp)
movl %edx, (%esp)
call _ZNKSs3endEv
subl $4, %esp
movl -92(%ebp), %eax
movl %eax, -16(%ebp)
leal -16(%ebp), %eax
movl %eax, 4(%esp)
leal -32(%ebp), %eax
movl %eax, (%esp)
call _ZN9__gnu_cxxneIPKcSsEEbRKNS_17__normal_iteratorIT_T0_EES8_
testb %al, %al
jne .L129
movl $1, -96(%ebp)
.L136:
movl -96(%ebp), %eax
movl -4(%ebp), %ebx
leave
ret
If you look at the above code, it has a jump (RED) to L136, which is the exit of the function. -96(%ebp) is set to 0 just before that jump, and then -96(%ebp) is moved to %eax, which holds the return value - so I'm 99.9% sure that it's returning FALSE in this case.
But the code at L136 (also) belongs to "return true", so when you step through it with the debugger, you will possibly step onto the "return true" line because the debugger doesn't actually understand the difference.
--
Mats