This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: auto const ints and pointer issue
- From: Ian Lance Taylor <iant at google dot com>
- To: Karen Shaeffer <shaeffer at neuralscape dot com>
- Cc: gcc at gnu dot org
- Date: Tue, 17 Jun 2008 11:01:31 -0700
- Subject: Re: auto const ints and pointer issue
- References: <20080617174222.GA19409@synapse.neuralscape.com>
Karen Shaeffer <shaeffer@neuralscape.com> writes:
> int main(int argc, char * argv[]) {
> const int ic = 0;
> const int * cip;
> int * ip;
> cip = ⁣
> ip = (int *)cip;
> *ip = 5;
> printf("const int ic = %d *cip = %d *ip = %d\n", ic, *cip, *ip);
> printf("&ic = %p cip = %p ip = %p\n", &ic, cip, ip);
> gcip = &gic;
> gip = (int *)gcip;
> #if 0
> *gip = 5;
> printf("global const int gic = %d *gcip = %d *gip = %d\n",
> gic, *gcip, *gip);
> printf("&gic = %p gcip = %p gip = %p\n", &gic, gcip, gip);
> #endif
> return 0;
> }
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ~~~~~~~~~~~~~~~~ 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.
Ian