"Michael N. Moran" <[EMAIL PROTECTED]> writes:

| Gabriel Dos Reis wrote:
| > "Michael N. Moran" <[EMAIL PROTECTED]> writes:
| > | void bar(int& a);
| > | | void foo(int* a)
| > | {
| > |      // dereference: conversion to reference
| > |      // Since there is not necessarily any object access,
| > |      // thus no assured SEGFAULT.
| > |      bar(*a);
| > SEGFAULT is not a behaviour defined by the language.
| 
| Even *I* know that, in spite of my lack of legal expertise.

It is not really a matter of legal expertise.  It is just hard to pin
down where you're driving at.

| > It is *just* one form of undefined behaviour.
| 
| Are you saying that this portion of the code *will*
| invoke undefined behavior even if the pointer "a"
| is valid?

I'm saying that if you call foo with a null pointer, you get into
undefined behaviour territory.  And GCC is founded to make
optimization based on that. And you -- as a user -- generally don't
know how and when GCC can apply that assumption.  And it is already
doing so in known cases; it may do more in the future.  I don't want
to go and give a long list of the specific cases; there is no point in
it. The transformation is general and will be applied where the
opportunity arises.  Just don't count on dereferencing a null pointer
to result you or not result in a segfault in general.

-- Gaby

Reply via email to