[cfe-dev] CLANG rpm packages, and hopefully a new project using scan-build
Douglas Gregor
dgregor at apple.com
Tue Mar 10 13:52:49 PDT 2009
Hello Stefan,
On Mar 10, 2009, at 1:19 PM, Stefan Reinauer wrote:
> Hi,
>
> from the web page:
>
>> Packaged builds for other platforms may eventually be provided,
>> but as the tool is in its early stages we are not actively promoting
>> releases yet. If you wish to help contribute regular builds of the
>> analyzer on other platforms, please email the Clang Developers'
>> mailing list.
>
> I started building snapshot builds of llvm + clang + scan-build for
> openSUSE at
> http://download.opensuse.org/repositories/home:/reinauer/
>
> Latest version available was r66512, right now it's building an r66542
> for testing.
>
> The reason we found interest in clang/llvm was the fine static code
> analysis tool scan-build.
>
> We started integrating scan-build in the build system of the open
> source
> firmware (bios) project
> coreboot (formerly known as LinuxBIOS). Patrick Georgi made this first
> test run available:
>
> http://coreboot.org/~stepan/llvm/coreboot-builds/ (created with
> r66542)
This is wonderful; thank you!
> There is one directory for each mainboard (target) that we support.
> Feel
> free to have a look.
> Each target gets composed from a slightly different set of source
> files,
> plus some generic
> ones, so each target reveals a different number of "bugs".
>
> We are still seeing a lot of "parser rejects" with our code, and I
> would
> like to seek some help
> here to fix those (in clang or in our code, whatever is appropriate)
The best way to push along the process is to file a bug at http://lvm.org/bugs
with a small test case. Someone usually gets interested in fixing
that bug and makes it happen. If there's an existing bug that looks
like it covers the problem you're seeing, adding a "I'm seeing this
too!" comment can help nudge things along.
> One issue I noticed is clang / scan-build does not seem to cope with
> forward declarations:
> ...
> note: forward declaration of 'struct pci_bus_operations'
> struct pci_bus_operations;
> ^
> ...
> error: variable has incomplete type 'struct pci_bus_operations const'
> const struct pci_bus_operations pci_cf8_conf2;
Ah, yes. This is http://llvm.org/PR3310
And... uh oh... how'd that get assigned to me?
> Another one is that it won't detect when a function is never
> supposed to
> return. We have a few situations in the code where we do the
> following:
>
> void die(char * message)
> {
> printf("ERROR: %s\n", message);
> for (;;) ;
> }
>
> void somefunction(struct foo *param)
> {
> if (!param)
> die("param is not set!")
>
> param->some_member = somevalue;
> }
>
> The above is errored as a potential NULL pointer dereference, which in
> fact it is not.
The analyzer knows about the "noreturn" attribute. I suggest changing
die() like this
> void __attribute__((__noreturn__)) die (char * message)
> {
> printf("ERROR: %s\n", message);
> for (;;) ;
> }
so that the analyzer knows your intent not to return.
>
>
> We found quite a bunch more such things. If you are interested in
> these
> types of reports, we will try to provide you as good information as
> possible.
Yes, we are definitely interested, and we try to be responsive to bug
reports.
- Doug
More information about the cfe-dev
mailing list