Discussion:
[omniORB] Problem with "// never return" functions and static code analysis
Martin B.
2010-07-09 22:18:53 UTC
Permalink
Hi all, Hi Duncan!

I'm currently messing around with Visual Studio 2010 and it's /analysis
feature.
One of the warnings it's got is that it'll tell you when you are
dereferencing a NULL pointer. The problem is now that it will generate
this warning all over the omniORB headers, e.g:
***
[4.1.2, stringtypes.h, ln 219]
inline char& operator[] (_CORBA_ULong index_) {
if (!_data) {
_CORBA_bound_check_error(); // never return
}
return _data[index_];
}
***

This could be solved by tagging all "// never return" functions with
__declspec(noreturn)
for VS Builds. (Obviously via some macro.)

Would it be possible to add something like this?
Should be useful for other compilers / code analysis tools too,
shouldn't it?

cheers,
Martin
Duncan Grisby
2010-07-23 23:42:00 UTC
Permalink
Post by Martin B.
One of the warnings it's got is that it'll tell you when you are
dereferencing a NULL pointer. The problem is now that it will generate
***
[4.1.2, stringtypes.h, ln 219]
inline char& operator[] (_CORBA_ULong index_) {
if (!_data) {
_CORBA_bound_check_error(); // never return
}
return _data[index_];
}
***
This could be solved by tagging all "// never return" functions with
__declspec(noreturn)
for VS Builds. (Obviously via some macro.)
Does the declaration go on the function prototype or on the use of the
function? If it goes on the prototype, that's probably ok. I'd rather
not uglify all the uses with such things.

In principle, I'll accept a patch as long as it doesn't make the code
much less readable, or create an ongoing maintenance headache.

Cheers,

Duncan.
--
-- Duncan Grisby --
-- ***@grisby.org --
-- http://www.grisby.org --
Martin Baschnegger
2010-07-24 19:16:19 UTC
Permalink
Post by Duncan Grisby
Post by Martin B.
One of the warnings it's got is that it'll tell you when you are
dereferencing a NULL pointer. The problem is now that it will generate
***
[4.1.2, stringtypes.h, ln 219]
inline char& operator[] (_CORBA_ULong index_) {
if (!_data) {
_CORBA_bound_check_error(); // never return
}
return _data[index_];
}
***
This could be solved by tagging all "// never return" functions with
__declspec(noreturn)
for VS Builds. (Obviously via some macro.)
Does the declaration go on the function prototype or on the use of the
function? If it goes on the prototype, that's probably ok. I'd rather
not uglify all the uses with such things.
In principle, I'll accept a patch as long as it doesn't make the code
much less readable, or create an ongoing maintenance headache.
Thanks Duncan. The declaration goes on the prototype. I'll try to get a
patch together!

cheers,
Martin

Loading...