Em seg 17 mar 2014, às 12:07:59, Linus Torvalds escreveu: > On Mon, Mar 17, 2014 at 11:12 AM, Linus Torvalds > > <torva...@linux-foundation.org> wrote: > > Where in the standard does it say that you can't do arithmetic before > > testing a NULL pointer, and who can I shoot at for messing things up > > *again* if it actually does say that? > > I don't have access to the real standard, but I do have access to the > draft standard that is public, and can find no sign of language saying > that taking the address of a member generates undefined behavior.
I can't find anything either, in either C11 or C++1y drafts. I was going about this change in Qt: https://qt.gitorious.org/qt/qtbase/commit/88cf9402e336fddeb673c92f3c14da47a9f8450b In it, we had to change a d->getAndRef() call to Data::getAndRef() because d was used when it was still null. However, the part of the C++ specification that says this is bad does not exist in C. It's there to guarantee that if you write: function()->staticmember; Then function() is still called, even though the access to staticmember did not require so. That means &dive->staticmember; would be undefined behaviour. If "member" were inherited from a virtual base, then &dive->member; would also be undefined because it needs to dereference dive to get to the virtual sub-object. Neither of those cases apply to C code and POD structures in C++. -- Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org Software Architect - Intel Open Source Technology Center PGP/GPG: 0x6EF45358; fingerprint: E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358 _______________________________________________ subsurface mailing list subsurface@hohndel.org http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface