[LLVMbugs] [Bug 19208] New: Request: add attribute to annotate function as "always returns X"
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Thu Mar 20 07:29:20 PDT 2014
http://llvm.org/bugs/show_bug.cgi?id=19208
Bug ID: 19208
Summary: Request: add attribute to annotate function as "always
returns X"
Product: clang
Version: unspecified
Hardware: All
OS: All
Status: NEW
Severity: enhancement
Priority: P
Component: Static Analyzer
Assignee: kremenek at apple.com
Reporter: icculus at icculus.org
CC: llvmbugs at cs.uiuc.edu
Classification: Unclassified
(This is tested against checker-276.)
Is there a way to annotate a function, so that Clang knows it always returns a
specific value?
Here's our use case:
We used to have a bunch of code like this...
void SDL_SetError(const char *errmsg);
// ...
if (bad_thing_happened) {
SDL_SetError("Uh no!");
return -1;
}
...but to unclutter things, we do this now...
int SDL_SetError(const char *errmsg);
// ...
if (bad_thing_happened) {
return SDL_SetError("Uh no!");
}
SDL_SetError() always returns -1, it's just that way to clean up the code a
little, as this is a common idiom for us.
The problem is that Clang doesn't know this, so it produces false positives in
static analysis like this one:
https://buildbot.libsdl.org/sdl-static-analysis/sdl-macosx-static-analysis/sdl-macosx-static-analysis-8/report-1470c3.html#EndPath
The simple fix for this on our end is to initialize that variable--and we
will--but it would be nice if we could tell Clang that Step #10 in that report
can't ever take the false branch, because when we returned SDL_SetError() in
Step #8, it would always force the true branch in Step #10.
But at the moment, Clang just understands that some unavailable function
returns an int of any possible value.
We don't want to litter every one of these cases with asserts, as it defeats
the purpose of the idiom (and would be ugly in any case, as we use this all
over the codebase).
I'm thinking of something like this:
int SDL_SetError(const char *errmsg) __attribute__((always_returns(-1)));
Where "-1" can be a comma separated list of possible values that must be
literal, POD values. Extra credit if the compiler throws an error if
SDL_SetError() tries to return something other than one of the literal values.
(This is related to Bug #17404, but I'm not sure it's the same problem. Feel
free to mark this as a duplicate if that's that case, though.)
Thanks!
--ryan.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140320/2e1f6fb5/attachment.html>
More information about the llvm-bugs
mailing list