home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c++.moderated      Moderated discussion of C++ superhackery      33,346 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 31,531 of 33,346   
   =?UTF-8?B?RGFuaWVsIEtyw7xnbGVy?= to All   
   Re: Address identity of functions   
   04 Oct 11 11:23:30   
   
   From: daniel.kruegler@googlemail.com   
      
   Am 03.10.2011 20:57, schrieb Zeljko Vrba:   
   > On 2011-10-02, Daniel Krügler  wrote:   
   >>   
   >> There are some compilers that deduce from this, that the following program   
   is allowed to output '1' instead of '0':   
   >>   
   > Which compilers? :)   
      
   Actually it should be not so important for this particular question, but VC++   
   10.0 or Intel C++ 12.1 (both in in release mode) are examples.   
      
   I would like to emphasize that I would prefer to discuss just the "what if   
   scenario", I'm not intending to scandalize any compiler behaviour here.   
      
   > Did you check whether this is the case when both functions are non-empty, but   
   > have identical code?   
      
   I haven't but I have been told that this happens even with non-empty functions   
   (This makes this actually of interest, because you can effectively reduce the   
   code bloat, especially from template instantiations).   
      
   >> Irrespective of whether this behaviour of those compilers would be a defect   
   according the current standard, I would be interested in code examples that   
   would no longer work, if there would be no unique address identity guarantee   
   for functions.   
   >>   
   > Self-modifying code (I guess an area with a big UB-sign above it :)).  If you   
   > modify f and/or g at runtime, you really do need two copies.   
      
   Could you give a simple example? The code should be complete or at least   
   self-explaining. But I must say that an example that basically depends on UB,   
   is not so well-suited for a discussion about the effects of code running in   
   "standard C++ mode".   
      
   > Heck, it would   
   > also break debuggers as they usually put a breakpoint by replacing   
   instructions   
   > at the start of a function.  So you wouldn't be able to put breakpoint on f   
   > and g independently.   
      
   This seems not such a severe reason to me, at least not for the C++ standard,   
   because the compiler vendor typically provides a debugger or should specify   
   the protocol. In any case, this is completely out of the scope of the standard.   
      
   Thanks & Greetings from Bremen,   
      
   Daniel Krügler   
      
      
      
      
   --   
         [ See http://www.gotw.ca/resources/clcm.htm for info about ]   
         [ comp.lang.c++.moderated.    First time posters: Do this! ]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca