[Development] What's the status of a moved-from object?

Mutz, Marc marc at kdab.com
Tue May 21 08:48:04 CEST 2019


On 2019-05-20 22:58, Konstantin Shegunov wrote:
[...]
> I agree as well, although I have a minor nitpick. Q_ASSERT works only
> if it was not stripped while building Qt. Meaning that I'm often
> working, as I'm sure other users, on Linux especially, with the
> default (i.e. release) version of Qt from the repo. Granted it may be
> my own fault, but in this case the assert isn't tripped and this code
> simply segfaults for reasons that aren't so obvious.

Oh, a nullptr deref is pretty clear in a backtrace. Even in a release 
build, if you installed the debug symbol package that does with the 
distribution's version of Qt.

> Any suggestions
> how to mitigate that? Somehow *suggest* to the user that [s]he's
> supposed to build in debug mode otherwise they're on their own?

Please, you debug against a release build, and complain that you don't 
get debug checks?

marc:~/Qt/qt5/qtbase$ git grep -we Q_ASSERT -- src | grep .cpp: | wc -l
3907

You're missing out on 4000 other checks that way, too!

And I'm pretty sure that there's a way to keep the Q_ASSERTs in release 
mode.

That said, I'm pretty sure that a static analyzer can find uses of 
objects in partially-formed state with local analysis. Proof:

    const char *p;

    ~~~~ complicated code ~~~~~

    char ch = *p; // WARNING: p might be used uninitialized in this 
function

I guess what's missing is a way to tag processes in which 
partially-formed states are created for the compiler.


More information about the Development mailing list