This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: auto const ints and pointer issue


Karen Shaeffer <shaeffer@neuralscape.com> writes:

> int main(int argc, char * argv[]) {
>   const int ic = 0;
>   const int * cip;
>   int * ip;
>   cip = &ic;
>   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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]