Re: Help needed with new segfaults in frame unwinding under gcc8

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Feb 23, 2018 at 05:40:23PM -0600, Jason L Tibbitts III wrote:
> It creates various search indices for the IMAP server (which is why it
> wraps Xapian).  The manpage is available from
> https://cyrusimap.org/imap/reference/manpages/systemcommands/squatter.html
> Technically the test suite simply creates the conditions for it to do
> its work (in a randomly named directory) and then calls squatter
> directly.  You should be able to see the arguments in the test suite's
> output.

Ok, so the problem is ignoring important warnings, in this case:
imap/xapian_wrap.cpp: In function 'int stem_version_set(Xapian::WritableDatabase*, int)':
imap/xapian_wrap.cpp:267:1: warning: no return statement in function returning non-void [-Wreturn-type]

Don't do that, especially not for C++.  While for C there is UB only if you
actually use the returned value that hasn't been returned, i.e. in the
caller, and if you never use the return value, nothing bad happens,
in C++ the UB happens already in the callee, so the compiler in:
static int stem_version_set(Xapian::WritableDatabase *database, int version)
{
    std::ostringstream convert;
    convert << version;
    database->set_metadata(XAPIAN_STEM_VERSION_KEY, convert.str());
}
can (and does) assume that if this function is called, then it will never
fall-through from the last call into following code, because that is UB,
even when the caller is doing just:
stem_version_set(dbw->database, dbw->stem_version);

Didn't have time to try that, but I think -fsanitize=undefined should have
diagnosed that too in addition to the warning.  And the effect in the
generated code is just that there is no edge from that set_metdata method
call to anything that follows it, so the call is followed by whatever other
code happened to be emitted next, in this case some C++ EH code that ends
with _Unwind_Resume and assumed it is invoked only when throwing or
rethrowing an exception.

So, effective summary, in C++ >>NEVER<< ignore -Wreturn-type warning.

	Jakub
_______________________________________________
devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]

  Powered by Linux