[cfe-dev] clang static analyzer fails to find bug it found previously
DennisC at harding.ca
Fri Apr 5 07:31:21 PDT 2013
I added the following line to the beginning of the function to create an
unpaired new. I used the nothrow array variation of new since that is
what is used where I am having the problem.
char* bogus = new(nothrow) char;
I got an additional "Value stored to 'bogus' during its initialization
is never read" error report, but nothing about the memory leak.
I then tried a basic new without the nothrow argument and the leak was
detected and reported. The source has always used the nothrow argument
to new, and the leak was detected in the past.
It looks like a regression in the checker. It seems to work for 'new'
but not for 'new(nothrow)' any longer.
From: Anna Zaks [mailto:ganna at apple.com]
Sent: April 3, 2013 6:06 PM
To: Dennis Cote
Cc: cfe-dev at cs.uiuc.edu
Subject: Re: [cfe-dev] clang static analyzer fails to find bug it found
I did not see your second email before sending that the checker should
be in alpha package.
Can you try inserting a bogus leak into the function and see if it is
reported. This way we will know if the issue if the checker is on or
On Apr 3, 2013, at 3:31 PM, Dennis Cote <DennisC at harding.ca> wrote:
From: Anna Zaks
I've just realized that the checker's package changed after the commit,
so it's now called alpha.cplusplus.NewDelete.
I had seen this already, as mentioned in my previous post. I get the
same diagnostics with and without this checker enabled.
I have verified (using the verbose scan-build output) that the
-enable-checker option is being processed and an -analyze-checker option
is being passed to clang++ for this file (near the end of the command
line). I noticed that the format of this option is different than the
"-analyzer-checker=..." format used for the other checkers, but I don't
know if it is a significant difference.
'/mingw/bin/clang++' '-cc1' '-triple' 'i686-pc-mingw32' '-analyze'
'-disable-free' '-disable-llvm-verifier' '-main-file-name' 'astyl
'plist' '-w' '-mrelocation-model'
'static' '-mdisable-fp-elim' '-fmath-errno' '-mconstructor-aliases'
'-target-cpu' 'pentium4' '-resource-dir' 'C:/MinGW/bin\..\lib\cl
ang\3.3' '-fdeprecated-macro' '-fno-dwarf-directory-asm'
it' '19' '-fmessage-length' '0' '-mstackrealign' '-fno-use-cxa-atexit'
'-fobjc-runtime=gcc' '-fobjc-default-synthesize-properties' '
-fcxx-exceptions' '-fexceptions' '-fdiagnostics-show-option'
'-backend-option' '-vectorize-loops' '-analyzer-display-progress' '-ana
lyzer-checker' 'alpha.cplusplus.NewDelete' '-analyzer-output=html' '-o'
' '-x' 'c++' 'c:/cmd_line_tools/AStyle/src/astyle_main.cpp'
I also noticed that the analyzer is seeing the problematic function. So
_WIN32 must be defined.
ANALYZE (Syntax): c:/cmd_line_tools/AStyle/src/astyle_main.cpp
Was the behavior of this checker changed when it was demoted to alpha
The behavior of the analyzer is changing all the time; we did made
changes to suppress possible false positives coming from new/delete
Can you attach a preprocessed file for this source file? Otherwise we
cannot tell for sure.
Here is one possibility. Do you pass outBuf as const pointer to one of
the calls between 'new' and 'return'? We've added a suppression for this
cfe-dev mailing list
cfe-dev at cs.uiuc.edu <mailto:cfe-dev at cs.uiuc.edu>
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cfe-dev