Safe transposition of logical and operands

Paul Floyd paulf@free.fr
Mon Sep 18 07:03:20 GMT 2023



On 17-09-23 22:51, Jonathan Wakely wrote:

> 
> Why would it be trapping? It's loading an int64_t, which might be 
> uninitialised but it can't trap.

In this context I think that Valgrind is considering that any memory 
load could trap.

> *f on a std::optional is not like dereferencing a pointer, the int64_t 
> memory location is always present as part of the object.

For this

movq    40(%rbx), %rax

unless you know that what RBX+40 is pointing to is safe to dereference 
it's not different to dereferencing a pointer.

So I think that the problem is that Valgrind is being cautious and not 
allowing any loads but GCC is accepting what it considers safe loads 
from the stack.

A+
Paul


More information about the Gcc mailing list