This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: auto const ints and pointer issue
Karen Shaeffer wrote:
> On Tue, Jun 17, 2008 at 11:01:31AM -0700, Ian Lance Taylor wrote:
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> ~~~~~~~~~~~~~~~~ output ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> $ const_ints
>>> const int ic = 0 *cip = 5 *ip = 5
>>> &ic = 0xbfbd72a0 cip = 0xbfbd72a0 ip = 0xbfbd72a0
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>> The global variable code would segfault, as I expected. But the
>>> auto variable code gives this illogical result. I would appreciate
>>> comments. I am not on this list, so please ensure I am cc'd with
>>> any responses. I'll be happy to file a bug, if it is a bug.
>> Modifying a variable which is declared const is undefined behaviour.
>> You can not predict what happens.
> I can live with that. My problem was that the addresses cannot
> be correct. In my opinion, the undefined behavior should be
> limited to the value in the address or in some form of error.
Your opinion about undefined behaviour is not shared by the C
Standard committee: undefined code may do anything. As the
saying goes, "Demons might fly our of your nose."
> But to let the buggy code execute with addresses that are not
> accurate is a liberty I would hope could have been avoided. It
> just looks bad. I do realize, no one should have a gripe, because
> the code is buggy to begin with. But addresses should always be
> reported accurately IMHO. Of course, I obviously know nothing
> about compilers. (smiles ;)
For what it's worth, this is a common misunderstanding. A proper
understanding of the true meaning of "undefined behaviour" comes
later.
Andrew.