Date: Tue, 21 Feb 2023 22:57:59 -0800

On Tuesday, 21 February 2023 18:53:04 PST connor horman via Std-Proposals

wrote:

> Under the proposal, however,

> `opaque_operation` could observe that `&i` and `p` have the same *value

> representation*, which means that they must be equal (it may do so with

> defined behaviour in all executions, for example, by terminating if they

> are bytewise unequal).:

The compiler may assume that, since it knows &i and p can't be equal, no such

comparison took place, and therefore the implementation you're speaking of is

not what opaque_function did.

Slide 22 of the P2815 presentation (and why is this a presentation instead of

a paper?) adds

"if the analysis cannot prove that two pointers cannot alias, then it must

assume that they may alias."

The premise is the escape here. It says "if the analysis cannot prove the

pointers cannot alias", which is not the case here, because we know they

cannot alias, unless p is dangling and the comparison is spurious. If this is

what you're worried about, then there should be a clear exception for spurious

comparisons, in particular of stack variables.

Anyway, was P2815 adopted into the standard? I don't see any suggestions to

standards text change, so there's nothing really to adopt. It's a presentation

of someone's opinion.

wrote:

> Under the proposal, however,

> `opaque_operation` could observe that `&i` and `p` have the same *value

> representation*, which means that they must be equal (it may do so with

> defined behaviour in all executions, for example, by terminating if they

> are bytewise unequal).:

The compiler may assume that, since it knows &i and p can't be equal, no such

comparison took place, and therefore the implementation you're speaking of is

not what opaque_function did.

Slide 22 of the P2815 presentation (and why is this a presentation instead of

a paper?) adds

"if the analysis cannot prove that two pointers cannot alias, then it must

assume that they may alias."

The premise is the escape here. It says "if the analysis cannot prove the

pointers cannot alias", which is not the case here, because we know they

cannot alias, unless p is dangling and the comparison is spurious. If this is

what you're worried about, then there should be a clear exception for spurious

comparisons, in particular of stack variables.

Anyway, was P2815 adopted into the standard? I don't see any suggestions to

standards text change, so there's nothing really to adopt. It's a presentation

of someone's opinion.

-- Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org Software Architect - Intel DCAI Cloud Engineering

Received on 2023-02-22 06:58:01