[omniORB] Add [[noreturn]] attribute to functions throwing exceptions
Duncan Grisby
duncan at grisby.org
Fri Feb 26 16:34:24 UTC 2021
On Thu, 2021-02-25 at 16:39 +0100, Michał Liszcz via omniORB-list
wrote:
[...]
> We are seeing some false positives coming from omniORB headers
> (mostly from seqTemplatedecls.h and stringtypes.h). The analyzer
> takes impossible execution path because it does not have access to
> definitions of throwing functions like
> _CORBA_new_operator_return_null. For instance we see this warning:
>
> /usr/include/omniORB4/stringtypes.h:730:13: warning: Array access
> (from variable 'newdata') results in a null pointer dereference
> [core.NullDereference]
> newdata[i] = pd_data[i];
[...]
> What I propose to do is to explicitly indicate that these functions
> are not going to return but will throw an exception by putting
> [[noreturn]] attribute in definitions in CORBA_basetypes.h:
>
> [[noreturn]] extern void _CORBA_new_operator_return_null();
[...]
Yes, that seems like a good thing to do.
omniORB still targets old compilers (and modern ones running backward
compatibility modes) that do not support C++11, so it will have to be
done with a pre-processor definition rather than directly like that.
> Another thing worth considering is to replace comments like below one
> with assertions (assert(pd_len <= newmax)) that would enforce these
> invariants and would also provide some valuable information for
> static analysis tools.
> // Invariant: pd_len <= newmax
It can't directly do that, because omniORB is used on some platforms
where we don't want to use assert. It could use OMNIORB_ASSERT, but
that is likely to provoke the same sort of confusion in static analysis
tools.
> I can work on a patch if above proposals can be accepted, but I'd
> need some guidance.
Feel free to email a patch that works these ways. The patch should be
against the 4_3 branch.
Duncan.
--
-- Duncan Grisby --
-- duncan at grisby.org --
-- http://www.grisby.org --
More information about the omniORB-list
mailing list