blacktea
08bc369296
#9391 Detecting uninited member variables with default ctor ( #2249 )
2019-10-08 19:33:07 +02:00
IOBYTE
c98732dd8b
fix using type aliases in out of class destructors ( #2250 )
2019-10-08 19:30:41 +02:00
Steve Mokris
506a952ad2
Parse `extern "C"`, and use it to avoid FP reference warnings ( #2234 )
...
Previously, cppcheck discarded the `extern "C"` specifier. This patch modifies cppcheck to parse each as a Scope in the symbol database, then uses that scope to avoid false positives when making recommendations about changing a function argument to be a reference (since variable references is a C++ feature, unavailable in C, and thus unavailable in `extern "C"`).
2019-10-08 17:48:09 +02:00
Daniel Marjamäki
9f40341ba8
SymbolDatabase: Hardcoded handling for std::make_shared and std::make_unique , todo: library configuration would be better than hard coding
2019-10-08 17:19:24 +02:00
Daniel Marjamäki
79356b1883
SymbolDatabase: Better ValueType handling of 'LibraryType(..)'
2019-10-08 11:25:05 +02:00
versat
93e9e12aa1
gtk.cfg: Add some missing g_str*() functions found by daca@home
2019-10-08 10:01:38 +02:00
Paul Fultz II
4eb4762d95
Extend lifetime checking to temporaries ( #2242 )
...
* Use lifetimes to check for returning reference to temporaries
* Check for dangling temporaries
* Check for unknown types for returining by reference
* Remove old returnTemporary check
* Format
* Check for deref op
* Ternary operator return an lvalue reference
* Warn when returning temporaries from member functions
* Improve handling of pointer to function
* Extend lifetimes of const references
2019-10-08 09:28:39 +02:00
Daniel Marjamäki
21774cbdc4
ExprEngine: Handle while/for loops
2019-10-07 17:45:06 +02:00
Rikard Falkeborn
443fcd2ac4
TestBufferOverrun: Enable passing tests ( #2246 )
...
There are a number of tests and asserts in testbufferoverrun that pass.
Enable them to add test coverage.
2019-10-07 09:17:12 +02:00
Daniel Marjamäki
d82b1b29ce
ExprEngine: Initial handling of switch
2019-10-06 19:58:51 +02:00
IOBYTE
78b9fd9bb9
Fix #9383 ("debug: Function::addArguments found argument 'x' with varid 0." with variadic templates) ( #2238 )
2019-10-06 12:45:42 +02:00
Daniel Marjamäki
3c085fd88a
Fixed #9359 (SymbolDatabase: function lookup fails when -funsigned-char is used)
2019-10-06 12:05:58 +02:00
Tyson Nottingham
0950a97df2
Fix false negatives in checkBitwiseOnBoolean ( #2220 )
...
* Fix false negatives in checkBitwiseOnBoolean
Use AST-based tests in favor of token-based tests for greater coverage.
* Travis: add suppressions for bitwiseOnBool
2019-10-06 09:57:31 +02:00
Daniel Marjamäki
b97436e8f8
Fixed #9382 (Hang: CheckLeakAutoVar pellepl/spiffs/src/spiffs_hydrogen.c)
2019-10-06 09:52:05 +02:00
IOBYTE
8f46bb3ef6
fix #9392 (SymbolDatabase: Weird default constructor outside class) ( #2243 )
2019-10-06 07:21:12 +02:00
Daniel Marjamäki
7294145797
SymbolDatabase: set value type for std::move()
2019-10-05 19:57:52 +02:00
Daniel Marjamäki
e686699294
ExprEngine: Fix ExprEngin::IntRange::isIntValueInRange
2019-10-05 16:33:40 +02:00
Paul Fultz II
cf1c766292
Fix issue 9317: False positive returnDanglingLifetime when using reference to constant inside if statement ( #2241 )
2019-10-05 16:32:20 +02:00
Paul Fultz II
6b6553e320
Dont warn for arrays that are containers ( #2240 )
2019-10-05 16:14:30 +02:00
Daniel Marjamäki
887825d834
astyle formatting
...
[ci skip]
2019-10-05 15:42:47 +02:00
IOBYTE
46f3f58e5f
Fix #9388 ("debug: Executable scope 'x' with unknown function." with alias used in initialization list) ( #2239 )
2019-10-05 09:34:37 +02:00
IOBYTE
c32a568c1f
fix #8965 ("(debug) Executable scope 'x' with unknown function." with rvalue parameter in method) ( #2237 )
...
I fixed the AST enough to pass testrunner but I don't believe it is
correct.
This code:
void Foo4(int&&b);
has this AST:
( 'void'
|-Foo4
`-&& 'bool'
|-int
`-b 'signed int'
but I don't believe && should have `bool`.
2019-10-04 12:30:11 +02:00
Daniel Marjamäki
2a33c3cfec
SymbolDatabase: Add test to ensure findFunction looks in current scope first
2019-10-03 21:29:01 +02:00
IOBYTE
50d82763fc
Fix #9385 ("debug: Executable scope 'func' with unknown function" with parameter in member function) ( #2235 )
2019-10-03 21:13:03 +02:00
Daniel Marjamäki
7e850e3e4b
ExprEngine: test pointer
2019-10-03 21:08:42 +02:00
Daniel Marjamäki
f80d387374
ExprEngine: Arrays if-then-else
2019-10-03 20:16:06 +02:00
Daniel Marjamäki
555890fdfa
ExprEngine: Removed NullPointerDereference checker for now.
2019-10-03 19:24:14 +02:00
IOBYTE
3e17c24dd8
fix syntax error on template operator ( #2225 )
2019-10-03 12:26:45 +02:00
Paul Fultz II
997803869d
Forward values after assignment in valueFlowReverse ( #2226 )
...
* Forward values after assignment in valueFlowReverse
* Rename variables
* Format
2019-10-03 09:58:57 +02:00
Daniel Marjamäki
d916379f9f
ExprEngine: Better handling of if/else
2019-10-02 21:47:00 +02:00
Daniel Marjamäki
7ab22c7176
ExprEngine: Use smt solver Z3
2019-10-02 17:59:04 +02:00
IOBYTE
4ba00d0694
Fix #9381 (alias in namespace not replaced in method declaration) ( #2232 )
2019-10-02 08:11:04 +02:00
Daniel Marjamäki
87ece5856a
Fix Cppcheck internal warning
2019-10-01 21:37:43 +02:00
Daniel Marjamäki
cf965b72b5
SymbolDatabase: look for functions in anonymous namespaces in the findFunction
2019-10-01 19:09:34 +02:00
orbitcowboy
f05e21efa8
Formatted the code, there are no functional changes [ci skip].
2019-10-01 08:39:08 +02:00
Paul Fultz II
166bd2bafc
Fix issue 2153: valueFlowAfterCondition: struct member ( #2228 )
...
* Fix issue 2153: valueFlowAfterCondition: struct member
* Fix null pointer dereference
* Formatting
* Check for another null pointer
* Initialize variables
* Remove redundant condition
* Format
* Add missing initialization to copy constructor
* Format
2019-09-30 21:04:43 +02:00
Daniel Marjamäki
1ccc303602
ExprEngine: Simplify array value if possible, ensure each array data has a unique name
2019-09-29 21:20:57 +02:00
Daniel Marjamäki
eb8908cd3e
PodType: Add test
2019-09-29 17:02:14 +02:00
Daniel Marjamäki
40c3e68e07
ExprEngine: Add --debug-verify, fixed handling of global arrays
2019-09-29 15:00:54 +02:00
Daniel Marjamäki
60e1cf8b8d
ExprEngine: Fix NULL pointer dereference tests
2019-09-29 08:26:09 +02:00
Daniel Marjamäki
a09fe763d9
Try to make Travis happy
2019-09-28 20:43:55 +02:00
Daniel Marjamäki
3f587bef65
ExprEngine: Add some CWE476 (Null pointer dereference) checks
2019-09-28 19:28:12 +02:00
Daniel Marjamäki
ec7c774a10
ExprEngine: Adjust the command line in test/verify/juliet.py
2019-09-28 12:10:01 +02:00
Daniel Marjamäki
4540846325
ExprEngine: Added a testscript that uses the juliet testsuite
2019-09-28 12:00:41 +02:00
Daniel Marjamäki
0de3e76b2d
ExprEngine: Clarify when analysis is aborted
2019-09-28 10:59:28 +02:00
Daniel Marjamäki
7f64faae99
Virtual Destructors: Base class must have virtual destructor no matter if derived class has a destructor or not. There is UB according to paragraph 3 in [expr.delete].
2019-09-27 09:55:56 +02:00
Daniel Marjamäki
2e1cbbeb14
ExprEngine: Fix output for StructValue
2019-09-26 19:39:30 +02:00
IOBYTE
d0968a1377
Warn about unknown macro causing template syntax error ( #2222 )
2019-09-26 16:01:01 +02:00
Daniel Marjamäki
b55c587ab2
astyle formatting
...
[ci skip]
2019-09-26 10:32:49 +02:00
Paul Fultz II
597d0fa35b
Support expression in valueFlowAfterCondition ( #2219 )
...
* Add valueFlowForwardExpression function to forward values of an expression
* Use token for expression
* Fix name in bailout message
* Handle expressions
* Add more tests for more expressions
* Add more tests
* Solve the expression if possible
* Formatting
2019-09-26 10:32:25 +02:00
IOBYTE
4475c4c7e2
template simplifier: fix syntax error ( #2218 )
2019-09-26 10:31:19 +02:00
Daniel Marjamäki
c5302d20a3
ExprEngine: ConditionalValues, output symbolic expressions
2019-09-26 10:03:58 +02:00
Rikard Falkeborn
4dbf006dc7
Fix severity of c++14 shifts with too many bits ( #2213 )
...
For c++14, shifting a variable with a value larger than or equal to the
number of bits in the variable is undefined. Left-shifting with a value
equal to the number of bits of the variable is implementation defined.
See also trac ticket #9306 .
2019-09-25 20:16:04 +02:00
Daniel Marjamäki
9e76630a4b
ExprEngine: Restructure handling of arrays to handle dynamic buffers better
2019-09-25 18:33:21 +02:00
Oliver Stöneberg
eac040a00b
Various clang-tidy fixes ( #2192 )
...
* use range loops
* removed redundant string initializations
* use nullptr
* use proper boolean false
* removed unnecessary continue from end of loop
* removed unnecessary c_str() usage
* use emplace_back()
* removed redundant void arguments
2019-09-25 15:25:19 +02:00
Tyson Nottingham
ca5f2562fc
Fix false negatives in checkIncrementBoolean ( #2210 )
...
Detect incrementing boolean expressions involving pointer dereferences,
array element accesses, etc.
2019-09-25 13:07:39 +02:00
Sebastian
0fadae78d3
boost.cfg: Add configuration and tests for boost::bind() ( #2206 )
2019-09-25 12:49:05 +02:00
IOBYTE
12f93b63a8
template simplifier: fix simplification of "< %num% %comp% %num% >" ( #2214 )
...
* template simplifier: fix simplification of "< %num% %comp% %num% >"
* fix test to not fail on 32 bit platforms
2019-09-25 12:06:29 +02:00
Daniel Marjamäki
0011fb5a36
ExprEngine: Temporary hardcoding for calloc
2019-09-24 22:22:16 +02:00
Daniel Marjamäki
0471e74489
ExprEngine: Handle char literals
2019-09-24 20:11:07 +02:00
Daniel Marjamäki
1769af4a6c
ExprEngine: Passing variable address to function
2019-09-24 19:53:33 +02:00
Sebastian
5615da4547
std.cfg: Add configuration and tests for std::bind() ( #2207 )
...
TODO:
Somehow Cppcheck fails to print an ignoredReturnValue message when the
return value is not used (see ticket
https://trac.cppcheck.net/ticket/9369 )
2019-09-24 12:16:13 +02:00
Paul Fultz II
0df4876059
Fix issue 9367: FP knownConditionTrueFalse ( #2209 )
2019-09-24 08:15:03 +02:00
Daniel Marjamäki
c1ff3419a6
ExprEngine: Value truncation
2019-09-23 20:28:12 +02:00
Daniel Marjamäki
9025b47f82
ExprEngine: some handling of NULL pointer
2019-09-23 18:10:06 +02:00
Paul Fultz II
a903aa7070
Fix issue 9351: false negative: (style) Condition '...' is always true ( #2201 )
2019-09-23 08:49:04 +02:00
Rikard Falkeborn
bb5ac32872
Fix #7031 (improve error message for memory related warnings) ( #2204 )
...
Printout both the locations on double free errors, mismatching
alloc/dealloc and dealloc return error.
2019-09-22 21:50:02 +02:00
Daniel Marjamäki
28d13e7567
ExprEngine: Implement basic float handling
2019-09-22 21:14:36 +02:00
Rikard Falkeborn
df800e35d4
Fix memleak FP with return with parenthesis ( #2202 )
...
* Fix memleak FP with return with parenthesis
Fix FPs pointed out by daca@home on the following form:
void* f(void) {
void* x = malloc(1);
return(x);
}
Fix it by only skipping tokens if there is an actual match with a
variable. This allows to remove the special casing of "return;".
* Add testcase with cast
2019-09-22 19:18:31 +02:00
Daniel Marjamäki
6e17853ea9
ExprEngine: Guess function call return value
2019-09-22 16:40:48 +02:00
Daniel Marjamäki
5c07cfd2e8
ExprEngine: Better handling of pointer aliasing
2019-09-22 15:58:55 +02:00
Daniel Marjamäki
ec4b7c1f4b
ExprEngine: Better handling of pointers
2019-09-22 10:56:57 +02:00
Daniel Marjamäki
7d6fd915be
ExprEngine: Better handling of compound assignments
2019-09-21 21:15:51 +02:00
Paul Fultz II
c1961cec1c
Fix issue 9362: FP: (style) Condition '(v&1)==0' is always false ( #2200 )
2019-09-21 19:53:54 +02:00
Daniel Marjamäki
da91c139d5
ExprEngine: Passing array to function, array data might be overwritten
2019-09-21 19:34:06 +02:00
Rikard Falkeborn
46ac0d79c1
Checkmemleakautovar: fix crash and FP ( #2196 )
...
This fixes crashes found by daca where valueType() is NULL. Also,
somewhat related, it removes warnings when casting to a type that is
unknown to cppcheck, for example, there is no longer a warning for the
following code:
void* f() {
void *x = malloc(1);
return (mytype)x;
}
2019-09-21 14:59:54 +02:00
Daniel Marjamäki
b2cab003ff
ExprEngine: Fix output for arrays
2019-09-21 14:17:16 +02:00
Daniel Marjamäki
3d0d3ec4c5
ExprEngine: handling array initialization with string literal
2019-09-21 11:36:34 +02:00
Tyson Nottingham
d6a70d27c7
Fix false negatives in checkAssignBoolToFloat and minor related improvements ( #2198 )
...
* Fix false negatives in checkAssignBoolToFloat
Detect assignments to expressions involving pointer dereferences, array
element accesses, etc.
* Pass assignment token to assignBoolToFloatError
Pass assignment token rather than boolean token to make error reporting
consistent between checkAssignBoolToFloat and checkAssignBoolToPointer,
as well as with other assignment checks in the code base.
* Make checkAssignBoolToPointer check consistent with checkAssignBoolToFloat
2019-09-21 08:24:54 +02:00
Paul Fultz II
40f1635c35
Fix issue 9361: false positive: (style) Condition 'isdigit(c)!=0' is always true ( #2199 )
2019-09-21 08:19:54 +02:00
Oliver Stöneberg
b5c598cca4
added missing OVERRIDE usage and removed redundant virtual ( #2190 )
2019-09-20 21:57:16 +02:00
Oliver Stöneberg
9028b4a81d
do not access static methods through instance ( #2189 )
2019-09-20 21:54:30 +02:00
Daniel Marjamäki
6c59957109
ExprEngine: Better handling of conditions
2019-09-20 21:27:51 +02:00
Rikard Falkeborn
007b5d3e8d
Fix #9343 (memleak FP when return with cast) ( #2162 )
...
This was most likely introduced when the checks were changed to run on
the full tokenlist instead of the simplified one.
Take care to warn about cases where casts destroy the pointer, such as
uint8_t f() {
void* x = malloc(1);
return (uint8_t)x;
}
2019-09-20 15:09:27 +02:00
Daniel Marjamäki
049f6475ee
astyle formatting
...
[ci skip]
2019-09-20 15:07:27 +02:00
Paul Fultz II
ad8abdb0c3
Add impossible values to ValueFlow ( #2186 )
...
* Add impossible category
* Replace values
* Try to adjust known values
* Add ! for impossible values
* Add impossible with possible values
* Remove contradictions
* Add values when the branch is not dead
* Only copy possible values
* Dont bail on while loops
* Load std lib in valueflow
* Check for function calls
* Fix stl errors
* Fix incorrect impossible check
* Fix heap-after-use error
* Remove impossible values when they are lowered
* Show the bound and remove overlaps
* Infer conditions
* Dont push pointer values through dynamic_cast
* Add test for dynamic_cast issue
* Add shifttoomanybits test
* Add test for div by zero
* Add a test for issue 9315
* Dont make impossible value inconclusive
* Fix FP with shift operator
* Improve handleKnownValuesInLoop for impossible values
* Fix cppcheck warning
* Fix impossible values for ctu
* Bailout for streams
* Check equality conditions
* Fix overflows
* Add regression test for 9332
* Remove duplicate conditions
* Skip impossible values for invalid value
* Check for null
* Rename bound to range
* Formatting
2019-09-20 15:06:37 +02:00
IOBYTE
8c5cf8c029
Fixed #9046 syntaxError ( #2180 )
...
* Fixed #9046 syntaxError
* fix another syntax error
* fix some more syntax errors
2019-09-20 12:35:01 +02:00
Oliver Stöneberg
de9f489b08
use range loops / constness ( #2181 )
...
* use range loops / constness
* platform.cpp: avoid shadowed variable
2019-09-19 20:29:33 +02:00
Sebastian
bf55e835aa
Windows testrunner: Add testexprengine.cpp ( #2184 )
...
Add export of executeAllFunctions() in exprengine.h
2019-09-19 19:40:00 +02:00
versat
7277fe5a2b
gnu.cfg: Add support for macro __extension__
...
The macro does nothing except preventing from warnings when compiling
with "pedantic" or other options.
2019-09-19 12:27:21 +02:00
Sebastian
8207fb7b14
cairo.cfg: Add library configuration/tests/... for cairo library ( #2176 )
...
Reference: https://www.cairographics.org/
2019-09-19 08:48:04 +02:00
versat
076c604de8
python.cfg: Improve Python C API configuration
...
Add configurations for types, macros, alloc/dealloc and functions.
2019-09-18 15:09:13 +02:00
versat
d08539fe17
windows.cfg: Fix PostMessage() configuration
...
First argument is optional (allowed to be NULL). See also the annotation
"_In_opt_".
Reference:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postmessagea
2019-09-18 09:22:57 +02:00
Sebastian
5bf6bd1f5e
windows.cfg: Enhance/fix Windows configuration ( #2177 )
...
Add/fix some missing/incorrect function configurations found by
analyzing TortoiseGit project.
Add some macros.
2019-09-18 08:41:37 +02:00
Daniel Marjamäki
2d651b09fc
ExprEngine: Add new experimental path-sensitive data flow analysis. Initially used for 'verification' but could possibly later be used as a complement in the normal analysis. The code is work-in-progress and hacky!
2019-09-17 21:00:59 +02:00
Sebastian
fbbaea3cd9
qt.cfg: Add some missing macro definitions ( #2175 )
...
Found by daca@home
2019-09-16 15:58:35 +02:00
Daniel Marjamäki
887e65d006
TestSymbolDatabase: Clean up code using ASSERT
2019-09-16 11:18:01 +02:00
Daniel Marjamäki
5a5cecd4d5
TestSymbolDatabase: Clean up code using ASSERT
2019-09-16 11:12:40 +02:00
Daniel Marjamäki
004b4e4dbe
TestSuite: The ASSERT and ASSERT_EQUALS will now stop executing the test case upon failure. This can be used to avoid extra guard logic in tests.
2019-09-16 06:34:45 +02:00
Daniel Marjamäki
033640310b
One more fix for #9354 (Unknown macro is not reported and then Cppcheck is silent about issues)
2019-09-15 21:07:20 +02:00
Daniel Marjamäki
742c437953
Fixed #9354 (Unknown macro is not reported and then Cppcheck is silent about issues)
2019-09-13 13:05:48 +02:00
Paul Fultz II
068b0b246c
Fix issue 9352: FP constParameter and constVariable for auto& in combination with ternary ?: operator ( #2173 )
2019-09-13 08:33:30 +02:00
Armin Müller
a4ca6dfee7
testgarbage.cpp: Spelling in comment ( #2172 )
2019-09-12 20:52:39 +02:00
Daniel Marjamäki
da363c7d6f
Fixed #9349 (FP ctuuninitvar for pointer dereferenced inside sizeof)
2019-09-12 13:29:52 +02:00
Daniel Marjamäki
8855978f8a
Import project: Ignoring paths better
2019-09-12 09:32:24 +02:00
IOBYTE
4e222afa2c
template simplifier: ignore alias template definitions with syntax errors ( #2169 )
...
Is not allowed to define a type in an alias template definition.
This code:
template<int N>
using A1 = struct B1 { static auto constexpr value = N; };
A1<0> a1;
produces this output:
2: } ;
3: struct B1 { static const auto value = 0 a1 ;
test.cpp:2:57: error: Analysis failed. If the code is valid then please
report this failure. [cppcheckError]
using A1 = struct B1 { static auto constexpr value = N; };
^
because it tries to instantiate the invalid alias template definition
and generates garbage code.
2019-09-11 19:31:15 +02:00
Paul Fultz II
ba037837c9
Track lifetime across multiple returns
...
This will now warn when doing something like this:
```cpp
template <class T, class K, class V>
const V& get_default(const T& t, const K& k, const V& v) {
auto it = t.find(k);
if (it == t.end()) return v;
return it->second;
}
const int& bar(const std::unordered_map<int, int>& m, int k) {
auto x = 0;
return get_default(m, k, x);
}
```
The lifetime warning is considered inconclusive in this case.
I also updated valueflow to no tinject inconclusive values unless `--inconclusive` flag is passed. This creates some false negatives because library functions are not configured to not modify their input parameters, and there are some checks that do not check if the value is inconclusive or not.
2019-09-11 19:25:09 +02:00
warmsocks
a56bc006b7
Fixed a typo in lib/checkother.cpp. Corrected spelling errors found by codespell. ( #2170 )
2019-09-11 19:21:38 +02:00
Paul Fultz II
dc0b3527ad
Fix issue 9311: False positive duplicateCondition "same if condition" with pointer inside array of struct ( #2166 )
...
* Check for typeOf through an array
* Handle array constructors
* Format
* Fix compile error on gcc 4.8
2019-09-10 19:41:35 +02:00
Paul Fultz II
2595b82634
Fix issue 9348: FP uninitvar for pointer passed to memcpy ( #2167 )
2019-09-10 19:40:08 +02:00
orbitcowboy
da29a1f56b
gnu/bsd.cfg: Cleanup redundant configuration for timercmp() and add more tests.
2019-09-10 11:51:47 +02:00
Paul Fultz II
b2ae835b4b
cmake: Add dependency on cppcheck ( #2165 )
...
This adds a dependency on cppcheck so it will be built when calling `make check`
2019-09-10 06:21:59 +02:00
IOBYTE
639c29eb5c
Fix #9338 (Regression: Syntax error on valid C++) ( #2156 )
...
* Fix #9338 (Regression: Syntax error on valid C++)
* fix cppcheck warning
2019-09-09 21:46:21 +02:00
Paul Fultz II
d20b1b2525
Add cfg tests to cmake ( #2154 )
...
* Add cfg tests to cmake
* Fix test
2019-09-09 21:44:30 +02:00
Paul Fultz II
9753e18ebd
Fix issue 9340: AST broken: endless recursion from '{' ( #2161 )
2019-09-09 21:35:49 +02:00
Sebastian
4a119640c5
#8755 : Add regression test ( #2160 )
...
* #8755 : Add regression test
https://trac.cppcheck.net/ticket/8755
False negative: uninitvar not detected
* Fixed formatting (runastyle)
2019-09-09 17:20:03 +02:00
versat
7737a448cf
Fix #9345 FP wrongPrintfScanfArgNum for vasprintf
...
Configuration "<formatstr/>" for function is wrong, for the argument it
is fine.
2019-09-09 15:02:55 +02:00
orbitcowboy
aed5e17867
#9323 , #9331 : Moved configuration and tests to gnu and bsd.
2019-09-08 19:17:15 +02:00
orbitcowboy
12c851d9a8
posix.cfg: Fixed #9323 , #9331 by adding timercmp() configuration.
2019-09-07 10:42:09 +02:00
IOBYTE
59fdbd8435
Fix #9337 (Syntax error on valid C++) ( #2152 )
2019-09-07 09:09:04 +02:00
Paul Fultz II
27ebff7ae4
Add deeper analysis of when a function changes a containers size ( #2149 )
...
* Add deeper analysis of when a function changes a containers size
* Fix issues
* Track addressOf
2019-09-06 21:18:45 +02:00
Sebastian
4531b31a4a
Test for issue 9334: FP resourceLeak for dlopen/dlclose with library posix ( #2151 )
...
Add test to avoid further FP for valid code.
Tests for true positives are already present.
https://trac.cppcheck.net/ticket/9334
2019-09-06 16:37:51 +02:00
Sebastian
32dad3f44a
posix.cfg: Fix vsyslog() configuration ( #2150 )
...
Add tests to make sure no false positives are reported.
Found the issue via daca@home
2019-09-06 10:16:11 +02:00
Paul Fultz II
70cad280ea
Fix issue 9319: FP knownConditionTrueFalse related to aggregate initialization of struct ( #2147 )
2019-09-05 19:36:45 +02:00
Paul Fultz II
9e140831eb
Fix issue 9329: FP knownConditionTrueFalse - vector modified by function calls ( #2145 )
2019-09-05 16:42:26 +02:00
Paul Fultz II
e657cf4073
Fix issue 9320: False positive knownConditionTrueFalse related to truncation ( #2144 )
2019-09-05 15:15:58 +02:00
Daniel Marjamäki
068b0ef648
Make Travis happy
2019-09-04 13:38:19 +02:00
Daniel Marjamäki
a9fda3f488
Clarify redundantVarAssignment warnings
2019-09-04 10:55:41 +02:00
IOBYTE
e5220bdf0c
make ellipsis ... a single token ( #2143 )
...
* make ellipsis ... a single token
Using cppcheck -E to preprocess code with ellipsis produces output that
can't be compiled because ... is split into 3 tokens.
* try to fix addon
2019-09-04 08:07:30 +02:00
Paul Fultz II
1afd56e964
Fix issue 8785: ValueFlow: Track pointer alias
...
This fixes the issue by making `ProgramMemory` keep track of values based on the conditions.
It also removes the `deadpointer` check since it duplicates the `invalidLifetime` check.
2019-09-03 17:16:15 +02:00
Paul Fultz II
55a78f482b
Fix issue 9293: false negative: uninitvar
2019-09-03 06:46:34 +02:00
Paul Fultz II
dc201d110d
Fix issue 9274: false negative: (error) Buffer is accessed out of bounds (std::string, std::wstring)
2019-09-03 06:43:54 +02:00
Paul Fultz II
88d194214f
Fix FP with invalidContainerRef ( #2141 )
2019-09-03 06:41:35 +02:00
Daniel Marjamäki
7d63bdee6f
astyle formatting
...
[ci skip]
2019-09-02 06:59:07 +02:00
Paul Fultz II
cb509f1a8b
Fix issue 4845: alias to vector element invalid after vector is changed ( #2113 )
...
* Try harder to track ref lifetimes
* Dont add lifetimes for references
* Use correct token
* Check for front and back as well
* Improve handling of addresses
* Formatting
* Fix FP
2019-09-02 06:58:09 +02:00
Paul Fultz II
255c1062e4
Run test fixtures as seperate tests so they can run in parallel ( #2126 )
2019-09-02 06:53:35 +02:00
IOBYTE
fd403bf7e6
template simplifier: only add recursive instantiation if its arguments are a constant expression ( #2138 )
2019-09-02 06:51:19 +02:00
Ken-Patrick Lehrmann
7a75aa084b
Fix crash in CheckUninitVar ( #2129 )
...
http://cppcheck.osuosl.org:8000/ycmd
```
2019-08-30 23:21
ftp://ftp.se.debian.org/debian/pool/main/y/ycmd/ycmd_0+20181101+git600f54d.orig.tar.gz
cppcheck-options: -j1 --library=posix --library=gnu --library=qt --library=python --library=googletest --library=boost -D__GNUC__ --check-library --inconclusive --enable=style,information --platform=unix64 --template=daca2 -rp=temp temp
platform: Linux-4.15.0-58-generic-x86_64-with-Ubuntu-18.04-bionic
python: 2.7.15+
client-version: 1.1.31
cppcheck: head 1.88
count: Crash! 83
elapsed-time: -11.0 61.2
head results:
Checking temp/ycmd-0+20181101+git600f54d/ycmd/tests/clang/testdata/completion_fixit.cc: __GNUC__=1...
Program received signal SIGSEGV, Segmentation fault.
CheckUninitVar::valueFlowUninit (this=this@entry=0x7fffffffb350) at build/checkuninitvar.cpp:2376
2376 if (!tok->variable())
#0 CheckUninitVar::valueFlowUninit (this=this@entry=0x7fffffffb350) at build/checkuninitvar.cpp:2376
#1 0x00005555556901ac in CheckUninitVar::runChecks (this=<optimized out>, tokenizer=0x7fffffffbcb0, settings=0x7fffffffcd10, errorLogger=<optimized out>) at lib/checkuninitvar.h:68
#2 0x00005555556a2210 in CppCheck::checkNormalTokens (this=this@entry=0x7fffffffcaf0, tokenizer=...) at build/cppcheck.cpp:730
#3 0x00005555556a6ee2 in CppCheck::checkFile (this=this@entry=0x7fffffffcaf0, filename="temp/ycmd-0+20181101+git600f54d/ycmd/tests/clang/testdata/completion_fixit.cc", cfgname="", fileStream=...) at build/cppcheck.cpp:540
#4 0x00005555556aad4c in CppCheck::check (this=this@entry=0x7fffffffcaf0, path="temp/ycmd-0+20181101+git600f54d/ycmd/tests/clang/testdata/completion_fixit.cc") at build/cppcheck.cpp:195
#5 0x00005555557ef167 in CppCheckExecutor::check_internal (this=this@entry=0x7fffffffd880, cppcheck=..., argv=argv@entry=0x7fffffffdc08) at cli/cppcheckexecutor.cpp:884
#6 0x00005555557efa9a in CppCheckExecutor::check (this=0x7fffffffd880, argc=17, argv=0x7fffffffdc08) at cli/cppcheckexecutor.cpp:198
#7 0x00005555555b1d1b in main (argc=17, argv=0x7fffffffdc08) at cli/main.cpp:95
```
2019-09-01 14:51:40 +02:00
Ken-Patrick
2c656d6586
Issue 9255: Prevent infinite recursion in parsedecl ( #2134 )
2019-09-01 11:36:02 +02:00
Paul Fultz II
9ef64eb33e
Add regression test for issue 9264: FP nullPointerRedundantCheck - pointer alias ( #2133 )
2019-09-01 09:58:53 +02:00
IOBYTE
3a1aec8850
template simplifier: ignore friend templates ( #2122 )
...
* template simplifier: ignore friend templates
friend templates were interpreted as variable templates
* fix cppcheck warning
2019-09-01 09:56:33 +02:00
Ken-Patrick
d1c6cb9aa5
Fix issue 9304: boolean type of ternary ( #2131 )
...
* Add test cases for 9304
* Fix 9304
2019-09-01 09:51:53 +02:00
Paul Fultz II
121093658d
Fix issue 9202: False positive: std::array, size is a constant ( #2132 )
2019-09-01 09:44:34 +02:00
Ken-Patrick
717aa826d8
Fix false positive in initializationListUsage ( #2128 )
...
https://sourceforge.net/p/cppcheck/discussion/general/thread/d5b690ef19/
Check that we warn only about using the initializer list when we assign
the object being constructed.
2019-08-31 12:27:07 +02:00
Paul Fultz II
e8435b9ecb
Fix issue 9306: Adjust shiftTooManyBitsSigned for C++14 ( #2127 )
2019-08-31 07:40:57 +02:00
Paul Fultz II
0b9e823fc8
Fix issue 9305: False positive uninitvar - struct initialized via function ( #2123 )
2019-08-30 18:32:45 +02:00
Paul Fultz II
2942be53f7
Add more tests for valueFlowUninit ( #2124 )
2019-08-30 08:41:17 +02:00
Sebastian
a501f65c8c
libcurl.cfg: Add library configuration for libcurl ( #2120 )
...
Add curl_easy_*() functions and deprecated functions with warnings.
Add tests and prepare donate-cpu.py
Reference: https://curl.haxx.se/libcurl/c/
2019-08-29 15:11:59 +02:00
Sebastian
8782a5f5e4
lua.cfg: Add Lua C API library configuration with tests ( #2119 )
2019-08-29 11:38:21 +02:00
Paul Fultz II
03fe6795bf
Fix issue 9302: FP uninitvar - struct accessed via pointer ( #2121 )
2019-08-29 08:38:50 +02:00
orbitcowboy
1994cbbb9c
std.cfg: Improved configuration for mbrlen() and extended test cases.
2019-08-27 08:18:19 +02:00
IOBYTE
28a95802a2
template simplifier: fix syntax error false positive (an expression can't be a template) ( #2115 )
...
https://stackoverflow.com/questions/57590411/cppcheck-syntax-error-with-using-typedef
2019-08-27 06:37:58 +02:00
amai2012
1538248922
Fix syntax in test code example
2019-08-26 20:45:14 +02:00
orbitcowboy
c8b7b40cd7
wxwidgets.cfg: Improved support for wxString member functions.
2019-08-25 15:54:50 +02:00
Daniel Marjamäki
4bd9d76a4c
Try to make Travis happy
2019-08-25 10:24:13 +02:00
Daniel Marjamäki
82eec11898
Created redundantInitialization id
2019-08-25 09:45:39 +02:00
Daniel Marjamäki
324e5e581b
Redundant assignments: Fix false positive when reassignment expression contains assembler
2019-08-24 20:15:52 +02:00
Daniel Marjamäki
996daaee4e
STL: Fixed outOfBounds false positive
2019-08-24 15:40:29 +02:00
Daniel Marjamäki
9d26be8380
Fixed #5259 (Improve check: Uninitialized variable not reported when used in array initialization)
2019-08-24 14:43:35 +02:00
Paul Fultz II
5c488b9519
Fix issue 9190: FP uninitvar for struct member ( #2112 )
...
* Fix issue 9190: FP uninitvar for struct member
* Add more test cases
* Fix false negative
2019-08-24 11:27:47 +02:00
Sebastian
f25dcd5cda
python.cfg: Add Py_CLEAR(), and add initial test file ( #2110 )
2019-08-24 10:17:23 +02:00
Daniel Marjamäki
35fb55d76c
Fixed #5259 (Improve check: Uninitialized variable not reported when used in array initialization)
2019-08-24 08:01:55 +02:00
Sebastian
7f50642090
wxwidgets.cfg: Add container configuration for wxString ( #2109 )
2019-08-23 19:10:49 +02:00
versat
50c6af5e5d
astyle formatting
...
[ci skip]
2019-08-23 10:19:29 +02:00
Daniel Marjamäki
7061cc334b
RedundantAssignment: Don't warn for initialization with {0}
2019-08-23 08:51:16 +02:00
Thomas Niederberger
d122b1c722
Fix issue with __declspec and final ( #2107 )
...
* Add missing Qt macros
Add two Qt macros that were missing
* Fix issue with __declspec and final
This change is a bit naive but it fixes the issues I was having when combining __declspec(dllexport) and final classes. Without the fix I get errors along the line of "The code 'class x final :' is not handled. You can use -I or --include to add handling of this code. "
2019-08-23 06:43:02 +02:00
Rikard Falkeborn
fd3cb24973
leakNoReturnVar: Don't break early ( #2095 )
...
There seems to be no reason for stopping checking the scope if a call to
free() is seen (or fclose() or realloc()), so just continue checking.
Also, if there are multiple arguments, check all, perhaps there are more
memory leaks to warn about.
2019-08-23 06:33:00 +02:00
Paul Fultz II
c0a8d628b9
Fix issue 6010: Uninitialized inner struct ( #2098 )
...
* Fix issue 6010: Uninitialized inner struct
* Show to root variable that is unitialized
* Warn on pointer dereferences
2019-08-23 06:23:20 +02:00
Rikard Falkeborn
5b5d943976
Remove testfiles.pri ( #2106 )
...
qmake is not used to build tests. The only user of testfiles.pri was
removed in 392cda8bce
in december 2015.
2019-08-21 06:51:08 +02:00
Sebastian
2c673bd380
qt.cfg: Add container configuration for QStack (inherits from QVector) ( #2102 )
2019-08-20 20:37:52 +02:00
IOBYTE
4b231c53a4
Fixed #9287 and #9288 (Syntax error on valid C++ code) ( #2104 )
2019-08-20 20:25:18 +02:00
Sebastian
a2a874dbd5
gtk.cfg: Add/enhance function configurations and tests. ( #2101 )
...
Add/enhance:
g_once_init_enter(), g_once_init_leave() and g_signal_emit_by_name()
2019-08-20 15:00:30 +02:00
Daniel Marjamäki
ef47d3d304
Fixed #9286 (FP: syntax error: { .abc.a = 1)
2019-08-20 13:56:38 +02:00
Sebastian
26dfee58f8
qt.cfg: Add QLinkedList container configuration and some tests. ( #2099 )
2019-08-20 07:09:43 +02:00
Paul Fultz II
1f747d0b14
Add regression test for 9281 ( #2097 )
2019-08-19 09:09:07 +02:00
Daniel Marjamäki
a5ba82c2d3
Fixed #9260 (--template=gcc does not work correctly with -j)
2019-08-18 16:33:32 +02:00
Daniel Marjamäki
d95f29b23a
Fixed test/cli
2019-08-18 12:51:32 +02:00
Daniel Marjamäki
2d9a131817
Refactoring: Rename variables. Do not use leading _. Renamed 'col' to 'column'
2019-08-18 12:19:05 +02:00
Daniel Marjamäki
5f2379f3d1
astyle formatting
...
[ci skip]
2019-08-18 09:07:57 +02:00
Daniel Marjamäki
de9b928d98
ErrorLogger: add 'column' in serializer/deserializer
2019-08-18 09:06:40 +02:00
Daniel Marjamäki
016647d1d5
Fix testrunner
2019-08-18 09:02:13 +02:00
Daniel Marjamäki
2471266f12
test/cli: test unmatchedSuppression handling separately
2019-08-17 17:51:48 +02:00
Daniel Marjamäki
1fdae247b3
test/cli: ensure that there is unmatchedSuppression warning
2019-08-17 17:49:22 +02:00
Daniel Marjamäki
530a1a1c68
Remove test/cfg/unmatchedSuppressionTest.c: This testing belongs better in test/cli.
2019-08-17 17:18:44 +02:00
Daniel Marjamäki
eaf7224f6a
testrunner: Fix assertion error
2019-08-17 15:12:49 +02:00
Daniel Marjamäki
a17f2a6f05
Compiling/Installing : The CFGDIR parameter was removed. Use FILESDIR instead.
2019-08-17 10:53:07 +02:00
IOBYTE
04bb6c0d1f
template simplifier: fix new daca crashes ( #2093 )
2019-08-17 07:38:07 +02:00
Paul Fultz II
ee7fe3aaa1
Fix FP: Unitialized variable when using a pointer
...
This fixes the FP in cases like this:
```cpp
void f() {
bool b;
bool * x = &b;
if (x != nullptr)
x = 1;
}
```
It tracks the indirection of the uninit value in valueflow.
2019-08-17 07:36:41 +02:00
Paul Fultz II
3e0d1141d3
Fix issue 9277: FP: Dont warn for knwon conditions in if constexpr ( #2085 )
2019-08-16 07:56:39 +02:00
Paul Fultz II
3aef0c9bd3
Fix issue 8715: regression uninitvar not detected ( #2092 )
2019-08-16 07:48:54 +02:00
Paul Fultz II
ef714225bb
Use library to track container lifetimes
2019-08-15 21:14:54 +02:00
Sebastian
544bedc6ee
qt.cfg: Add QByteArray container configuration (similar to QString) ( #2088 )
...
Reference: https://doc.qt.io/qt-5/qbytearray.html
2019-08-15 16:14:17 +02:00
Paul Fultz II
af214e8212
Fix issue 8825: ValueFlow: uninitialized struct member ( #2087 )
...
* Pass uninit value across pointers
* Add more testing
2019-08-15 10:44:55 +02:00
Sebastian
81edb23c16
qt.cfg: Fix and enhance Qt container configuration ( #2055 )
...
-Add iterator end patterns
-Add/fix size and access functions
-Remove marking QList and QStringList as std-like strings
-QStringList configuration now inherits from QList like it is actually the case
-Add tests
2019-08-15 10:23:05 +02:00
orbitcowboy
4b41f19c87
insecureCmdLineArgs: Added more test cases to ensure 'const'-qualifiers are handled correctly.
2019-08-15 08:45:31 +02:00
Rikard Falkeborn
fc1d5b187f
leakNoVarFunctionCall: Use AST more ( fix #9252 ) ( #2086 )
...
Use the AST a little bit more to improve the check. In order to do so,
rewrite the check to work from the outer function first and then check
the arguments, instead of the other way around.
It also fixes Trac ticket #9252 , no warning is now given for
void* malloc1() {
return(malloc1(1));
}
This FP seems to be common in daca results.
It also makes it possible to improve handling of casts, for example
cppcheck now warns about
void f() {
strcpy(a, (void*) strdup(p));
}
But not for
char* f() {
char* ret = (char*)strcpy(malloc(10), "abc");
return ret;
}
These FP/FN were introduced when the check was switched to use the
simplified token list.
2019-08-14 22:01:40 +02:00
Paul Fultz II
4f76588f98
Fix issue 9275: False positive: Non-local object uses local variable ( #2084 )
2019-08-14 20:09:33 +02:00
Paul Fultz II
0c1dff5c93
Fix issue 9268: false negative: (style) Condition '...' is always true ( #2080 )
...
* Fix issue 9268: false negative: (style) Condition '...' is always true
* Fix copy and paste mistake
2019-08-14 06:34:27 +02:00
Paul Fultz II
13df5b2413
Fix FP with negative index and negated condition ( #2081 )
2019-08-14 06:32:31 +02:00
Daniel Marjamäki
d4549217d0
Renamed safeClassRefMember => unsafeClassRefMember
2019-08-13 20:58:31 +02:00
Daniel Marjamäki
41f8c1b281
Fixed #9271 (Safe classes: Class that store references)
2019-08-13 20:40:48 +02:00
Paul Fultz II
c0c6f92221
Fix issue 8431 and 8776: Size of constant string
...
Fixes these cases:
```cpp
void f(void) {
const std::string msg="xyz";
if(!msg.empty()){} // Always true
}
```
And out of bounds access:
```cpp
#include <string>
char fstr1(){const std::string s = "<a><b>"; return s[42]; }
wchar_t fwstr1(){const std::wstring s = L"<a><b>"; return s[42]; }
```
2019-08-12 20:24:16 +02:00
Paul Fultz II
68e8253920
Fix issue 8313 and 7326: Track values of pointer aliases in valueflow
2019-08-12 12:58:53 +02:00
Rikard Falkeborn
cd36f8ed0a
Fix #9253 : leakNoVarFunctionCall: do not warn if freopen opens standard stream ( #2076 )
...
This fixes false positives from daca@home where freopen is used to
reopen a standard stream. There is no longer a warning for
void f() {
assert(freopen("/dev/null", "r", stdin));
}
2019-08-12 12:53:59 +02:00
Paul Fultz II
aadc404958
Issue 8634: false negative: (style) Condition '...' is always true ( #2075 )
2019-08-12 11:04:01 +02:00
Paul Fultz II
9aa97cbb95
Fix issue 8296: ValueFlow: value not set in conditional scope in subfunction ( #2071 )
...
* Fix issue 8296: ValueFlow: value not set in conditional scope in subfunction
* Refactor condition checkingg
* Make test case TODO
2019-08-11 15:39:37 +02:00
Paul Fultz II
bd02ca5ccb
Fix issue 9207: Not detected 'always true' and unreachable code
2019-08-08 07:46:47 +02:00
Daniel Marjamäki
9fa1a5a540
astyle formatting
...
[ci skip]
2019-08-07 08:05:46 +02:00
IOBYTE
c6c50567cf
Fix #9250 (Regression: crash in gcc testsuite) ( #2067 )
...
* Fix #9250 (Regression: crash in gcc testsuite)
* fix cppcheck warning
2019-08-07 08:05:02 +02:00
Ken-Patrick
cb0b057595
8706 ( #2066 )
...
* 8706
* Add test case for #8706
2019-08-07 08:04:10 +02:00
Paul Fultz II
aaeec462e6
Re-enable valueFlowSubFunction ( #2063 )
...
* Re-enable valueFlowSubFunction
* Formatting
* Skip ternary operators in subfunctions
* Fix test with iostreams
* Fix FP with multiple parameters
2019-08-05 16:26:32 +02:00
Daniel Marjamäki
20278d9c92
Clarify signConversion warning message
2019-08-05 12:41:08 +02:00
Paul Fultz II
ffdd2dc793
Fix issue 8924: Re-enable valueFlowTerminatingCondition
2019-08-05 07:18:06 +02:00
IOBYTE
7ebc9d1b5f
Fix #9249 (Syntax error on valid C++) ( #2062 )
2019-08-04 10:24:44 +02:00
Daniel Marjamäki
510748134f
Fixed #9234 (FP unreadVariable - assignment via iterator)
2019-08-04 10:21:16 +02:00
Daniel Marjamäki
ce53931d00
Fixed #9251 (False positive: unininitialized variable (multi variables))
2019-08-03 21:12:34 +02:00
Daniel Marjamäki
cdc602e1be
Fixed #9137 (Tokenizer: Wrong handling of volatile pointer)
2019-08-03 12:28:50 +02:00
Daniel Marjamäki
c03df8e6b4
SymbolDatabase: Improved matchParameter for containers
2019-08-03 10:10:40 +02:00
IOBYTE
2da83df37b
Fix #9246 (Syntax error on C++ code) ( #2061 )
2019-08-03 08:15:06 +02:00
Daniel Marjamäki
e66e6549ee
SymbolDatabase: Improved ValueType::matchParameter handling of containers
2019-08-02 15:59:22 +02:00
versat
2519a1aed5
gnu.cfg: Add more __builtin_* functions and some tests
...
Most of them were detected by daca@home
2019-08-02 12:27:46 +02:00
Daniel Marjamäki
41549f4801
Try to fix Cppcheck warning to make Cppcheck happy
2019-08-02 07:57:34 +02:00
IOBYTE
0d1685cd29
Fix #9178 example with instantiation ( #2059 )
2019-08-02 07:53:39 +02:00
Sebastian
5390588cda
gnu.cfg: Add xfree() ( #2051 )
...
It is hard to find good references, one that describes it a bit can
be found here:
https://manpages.ubuntu.com/manpages/bionic/man3/xmalloc.3pub.html
xfree() can be used instead of free().
A check, to verify that a memory leak is found if the memory allocated
via xmalloc() is not freed, has also been added.
2019-08-02 07:41:32 +02:00
amai2012
29596baa92
Refactoring: Convert enum Direction to enum class
2019-08-01 20:56:02 +02:00
Rikard Falkeborn
f6726b76ae
Fix 9215 (add tilde for missing destructor override warning) ( #2057 )
2019-08-01 10:43:45 +02:00
amai2012
b0fbbb5aa7
Convert SHOWTIME_MODES to enum class
2019-07-31 22:35:51 +02:00
Daniel Marjamäki
8deb855b41
Fix ValueType::matchParameter for 'const float *' => 'signed long long'
2019-07-31 18:55:55 +02:00
Daniel Marjamäki
c51f44ce4c
SymbolDatabase: extend usage of ValueType::matchParameter for variable parameters
2019-07-31 18:24:15 +02:00
Daniel Marjamäki
1eb5f2266c
ValueType::matchParameter: Fix matching of char** and void*
2019-07-31 16:23:50 +02:00
Sebastian
549452b7b9
qt.cfg: Add container and function configurations for QVector ( #2052 )
...
Reference: https://doc.qt.io/qt-5/qvector.html
2019-07-31 13:58:55 +02:00
Daniel Marjamäki
a3dc2db77a
SymbolDatabase: Use ValueType::matchParameter for variable address parameters
2019-07-31 12:38:36 +02:00
Daniel Marjamäki
039d49bcb1
Improve ValueType::matchParameter for pointers with different types
2019-07-31 12:12:17 +02:00
Daniel Marjamäki
728ac6ae2e
SymbolDatabase: Use ValueType::matchParameter for char literal parameters
2019-07-31 09:35:32 +02:00
IOBYTE
9436f72a94
Fix daca dnsdist crash ( #2053 )
2019-07-31 09:18:43 +02:00
Daniel Marjamäki
e58e51ee14
SymbolDatabase::findFunction: For string literal, a std::string parameter is a better match than a void* parameter
2019-07-30 21:20:01 +02:00
Daniel Marjamäki
d5d50d9b17
ValueType::matchParameter: Improved constness matching
2019-07-30 09:19:51 +02:00
Daniel Marjamäki
3066c0653c
Fixed #8668 (SymbolDatabase: Wrong findFunction match for const pointer argument)
2019-07-29 18:14:23 +02:00
Daniel Marjamäki
607b3daca8
ValueFlow: Improve bailout for structs etc in loops
2019-07-29 15:51:48 +02:00
Daniel Marjamäki
a1214348c0
Fixed #8974 (false negative regression about never used variable)
2019-07-29 08:49:19 +02:00
Daniel Marjamäki
602911cfca
Activate a TODO test case
2019-07-29 08:06:57 +02:00
Daniel Marjamäki
a178d05cc5
Changed TODO test case, I do not see why it should warn.
2019-07-29 07:51:00 +02:00
IOBYTE
07ac6c5f08
Fix ternary operator simplification to accept template parameters. ( #2048 )
...
Also simplify decltype of bool and numeric literals in template
arguments.
2019-07-28 21:52:52 +02:00
IOBYTE
badc573b80
Fix #9224 (Performance regression in template parsing: 250x - 1200x slower) ( #2046 )
2019-07-28 09:25:18 +02:00
Daniel Marjamäki
e8ec6e6f11
Fixed #8349 (Noisy nullPointerRedundantCheck)
2019-07-27 20:03:06 +02:00
Daniel Marjamäki
1c75257212
Token::hasKnownIntValue: Fix when there is one possible int value and one known BUFFER_SIZE value, it should return false.
2019-07-27 08:25:07 +02:00
Rikard Falkeborn
f95d193e22
Fix #8282 (memleak FP when returning std::pair) ( #2039 )
2019-07-26 07:03:58 +02:00
Paul Fultz II
ee28a45db4
Fix issue 9235: new crash in astutils isVariableChanged from endless recursion ( #2040 )
2019-07-26 07:03:21 +02:00
Paul Fultz II
b049fd9303
Improve propogation of lifetimes of function arguments
...
This will now warn for cases like this:
```cpp
int* f(int * x) {
return x;
}
int * g(int x) {
return f(&x);
}
````
2019-07-26 07:02:07 +02:00
Rikard Falkeborn
a69a570505
Fix FP leakVarNotUsed with freopen() and stdin ( #2034 )
...
One usecase for freopen() is to redirect input and output streams to
files. For that, the return value is not needed.
2019-07-25 21:09:23 +02:00
Paul Fultz II
744a94ad5a
Fix issue 9231: FP constParameter - argument passed parent ctor ( #2032 )
2019-07-24 20:59:58 +02:00
IOBYTE
999d2f797c
Fix #9225 (Crash on valid C++14 code) ( #2031 )
...
* Fix #9225 (Crash on valid C++14 code)
This only fixes the crash. Specialization of nested templates is still
broken.
* fix cppcheck warnings
* fixed another cppcheck warning
2019-07-24 19:20:19 +02:00
Daniel Marjamäki
bbcffce529
Fixed #9062 (False positive "condition is always true")
2019-07-24 19:16:35 +02:00
Daniel Marjamäki
e11dcc609b
Fixed #7758 (Function array is seen as Uninitialized)
2019-07-24 18:20:23 +02:00
Daniel Marjamäki
7c0b011c05
Fixed #9230 (Improve check: integer conversion overflow in return)
2019-07-24 16:17:52 +02:00
Daniel Marjamäki
2da75d5af4
Split up Cppcheck attribute. low and high values can be specified separately and they can be used for variables also.
2019-07-24 15:08:26 +02:00
Daniel Marjamäki
cab9f61b79
safe checks: Handle float parameters
2019-07-24 12:09:13 +02:00
Daniel Marjamäki
10be2a1941
Safe checks: container parameters
2019-07-24 11:39:35 +02:00
Daniel Marjamäki
8959c5a9d0
Rename valueFlowAllFunctionParameterValues => valueFlowSafeFunctionParameterValues
2019-07-24 10:57:35 +02:00
Paul Fultz II
bb52a63c4e
Add check for const variables
...
When a local reference is declared, this will check if that local reference can be declared as `const`.
2019-07-24 09:59:01 +02:00
Paul Fultz II
3ec3bd52e0
Fix FP when using a pointer to a container ( #2029 )
2019-07-24 00:04:49 +02:00
Paul Fultz II
ab0fcc7640
Fix issue 9216: reset() method confusion ( #2025 )
...
* Fix issue 9216 with smart pointer reset
* Check for arrow
2019-07-23 22:45:58 +02:00
Paul Fultz II
60b670babd
Fix issue 9219: False positive, returnDanglingLifetime ( #2026 )
...
* Check for pointer deref for container methods
* Formatting
2019-07-23 21:59:05 +02:00
IOBYTE
5ad5cfcc29
Fix #9217 (Regression: Memory explodes in simplifyTemplateAliases) ( #2021 )
...
* Fix #9217 (Regression: Memory explodes in simplifyTemplateAliases)
* fix use after free when nothing was copied
2019-07-23 21:28:24 +02:00
Daniel Marjamäki
4fb6c27276
Modernize: Use enum class
2019-07-23 14:29:02 +02:00
Daniel Marjamäki
c8bc88e7e2
Fix compiler error
2019-07-23 13:14:08 +02:00
Rikard Falkeborn
8cd1d5a47d
Use library for memleak checks ( #2002 )
...
* Use library for memleak checks
Change memleakOnRealloc and leakReturnValNotUsed to use library
configuration instead of hardcoding "realloc".
In order to do so, some care needs to be taken when matching for a
reallocation function, since it can no longer be assumed that the input
to be allocated is the first argument of the function. This complicates
getReallocationType() and checkReallocUsage() but is necessary in order
to handle for example freopen() properly.
Also, refactor memleakOnRealloc check to reduce duplicated code when
checking "a" and "*a". When doing so, extending the check to look for
arbitrary number of "*" can be done for free (just change an if
statement to a while statement). Most likely, this is an unusual case in
real world code.
* Remove redundant whitespace in Token::Match()
* Run on simplified checks
* Fix cppcheck warning
2019-07-22 10:37:36 +02:00
Rikard Falkeborn
06337cedf5
Run more tests on full token list ( #2020 )
...
Since all checks are run on the full token list and not the simplified
one, run the tests on the full token list as well.
2019-07-22 10:26:55 +02:00
Rikard Falkeborn
abea580b78
Fix FP memory leak with unknown function call in condition ( #2012 )
...
* Fix FP memory leak with unknown function call in condition
This was introduced in 8513fb81d2
when
fixing memory leaks for global variables allocated in condition. The
refactored code had an inconsistency where c and c++ code behaved
slightly differently when `var` is NULL. This seemed to not have an
impact as the code was written prior to 8513fb81d2
,
but when the same code was used for conditions, FPs were introduced.
The introduced FPs were memleak warnings when there should have been an
information message about missing configurations for code like
void f() {
char *p = malloc(10);
if (set_data(p)) {}
}
Fix this by always returning true if varTok->Variable() is NULL for
both c and c++ code.
* Improve function name
2019-07-18 15:23:19 +02:00
Paul Fultz II
a08a9c1349
Switch to use lifetime analysis for iterators and pointers to invalid containers
...
This will diagnose more issues such as:
```cpp
void f(std::vector<int> &v) {
auto v0 = v.begin();
v.push_back(123);
std::cout << *v0 << std::endl;
}
```
2019-07-18 10:56:44 +02:00
Daniel Marjamäki
421a8da6a8
Try to clarify signConversion message
2019-07-17 22:41:24 +02:00
Daniel Marjamäki
d11d6f112e
Detect shadowed arguments
2019-07-17 17:08:42 +02:00
Daniel Marjamäki
90a215af0e
Rephraze performance message. /would be faster/could be faster/ to indicate that Cppcheck is not _sure_ that it would be faster
2019-07-17 16:06:10 +02:00
Daniel Marjamäki
64ef879ebf
Fix syntaxError for struct initialization
2019-07-17 15:21:17 +02:00
Daniel Marjamäki
9973db3a71
Modernize: Use enum class for Library::Action and Library::Yield
2019-07-17 11:39:30 +02:00
Daniel Marjamäki
5800692fa1
Move and refactor the CheckMemoryLeak::isclass
2019-07-17 08:59:09 +02:00
Rikard Falkeborn
8513fb81d2
Fix #9206 (FP with global variable allocated in condition) ( #2007 )
2019-07-17 07:43:07 +02:00
Daniel Marjamäki
b3688f22e8
Unknown macro: Detect and warn about unknown macro before throw/return
2019-07-16 20:32:46 +02:00
Daniel Marjamäki
5a6b89100d
Removed casts
2019-07-16 09:14:44 +02:00
Rikard Falkeborn
e19068504d
Configure xrealloc and adjust gnu memory functions ( #2003 )
...
Remove <noreturn> tag, since the functions do not return unless there
was no error.
2019-07-16 08:12:21 +02:00
Rikard Falkeborn
dcc375ca64
Update gtk memory functions ( #2000 )
...
* Improve configuration of g_try_realloc and g_try_realloc_n
* Mark g_realloc and similar functions as realloc functions
* Remove g_new, g_new0, etc as <alloc> functions, these are defined as
macros and handled as the functions they're expanded to.
* Add tests. TODO tests will be resolved by using the library
configuration in the checker.
2019-07-15 14:51:58 +02:00
IOBYTE
6d6bb31926
fix crash in daca gcc-avr from intentional bad instantiation test ( #1994 )
...
* fix crash in daca gcc-avr from intentional bad instantiation test
* fix cppcheck warning
2019-07-15 12:41:06 +02:00
IOBYTE
c2ccfd5f8b
Increase Windows stack size to 8M ( #1998 )
...
* Increase Windows stack size to 8M
* try to add stack size cmake
2019-07-15 12:39:58 +02:00
Daniel Marjamäki
af051a3787
astyle formatting
...
[ci skip]
2019-07-15 09:29:47 +02:00
Denis
68e6a440ff
Fix adding unescaped slash token when splitting gcc case range. ( #1987 )
...
* Fix adding unescaped slash token when splitting gcc case range.
Construction like case '!'...'~' converted to a list of separate case
tokens. When slas '\' symbol appears as a part of this list it was added
"as is", but it should be escaped like '\\' to be valid c++ code.
* Add test for switch-case range with slash
2019-07-15 09:29:31 +02:00
Daniel Marjamäki
d2284ddbcd
Fix false positives in self check: Variable t is assigned a value that is never used. Classes with destructors was not handled properly.
2019-07-14 16:20:45 +02:00
Daniel Marjamäki
1cadd9398a
Fixed #8933 (false negative: (style) Variable is assigned a value that is never used (std::string))
2019-07-14 09:44:30 +02:00
Daniel Marjamäki
cf06acae08
Fixed #5995 (False negative selfAssignment regression from 1.65)
2019-07-13 21:45:54 +02:00
IOBYTE
526a86dc60
Fix recursiveCount in CheckLeakAutoVar to really be recursive count. ( #1988 )
2019-07-13 07:40:24 +02:00
Daniel Marjamäki
f9bd589abb
testrunner: Make a few tests more 'proper'
2019-07-13 07:29:23 +02:00
Daniel Marjamäki
ae933c20c7
Fixed #1765 (Improve check: delete not handled well when there are extra parentheses)
2019-07-12 18:25:20 +02:00
Daniel Marjamäki
8ad3e43f92
Add handling of a simple C++ contract
2019-07-12 16:05:35 +02:00
Daniel Marjamäki
68cc7516a1
Annotations: Add annotation __cppcheck_in_range__(low,high)
2019-07-12 11:09:54 +02:00
IOBYTE
74e3114a64
Fix #9097 (Crash on thousands of "else ifs"s in gcc-avr package) ( #1982 )
...
* Fix #9097 (Crash on thousands of "else ifs"s in gcc-avr package)
* increase recursion count maximum to 512 because cppcheck was hitting the 256 limit
* 512 was too much for windows
2019-07-12 07:56:05 +02:00
Daniel Marjamäki
783f7f1648
Rename safeValues to unknownValues
2019-07-11 16:05:48 +02:00
Daniel Marjamäki
05d35b063d
Function return: Extra check of safe function return values
2019-07-10 20:00:21 +02:00
Daniel Marjamäki
c9906125de
Safe functions: Check more possible function argument values
2019-07-10 16:59:05 +02:00
Daniel Marjamäki
9f548efbd3
Refactoring: enum class
2019-07-10 15:27:07 +02:00
Rikard Falkeborn
a1a14b8465
Fix FP with cast pointer to free() ( #1961 )
...
This fixes false positives when the pointer passed to free() (or similar
deallocation functions) is cast using a c-style cast.
2019-07-10 09:13:59 +02:00
IOBYTE
7ac22677b8
regression test for daca codeblocks crash ( #1974 )
2019-07-10 07:16:16 +02:00
Daniel Marjamäki
58076bc672
SymbolDatabase: Better handling of smart pointers
2019-07-09 17:32:19 +02:00
Daniel Marjamäki
b68f50ea25
appveyor: check that cmake builds work also. run test/cli tests.
2019-07-09 07:46:53 +02:00
Daniel Marjamäki
a0b22410cf
SymbolDatabase: Better handling of smart pointers
2019-07-07 21:52:49 +02:00
IOBYTE
e551057f59
Refactor Tokenizer::simplifyUsing to use continue to reduce indentation ( #1967 )
...
* Refactor Tokenizer::simplifyUsing to use continue to reduce indentation
added function findTemplateDeclarationEnd to skip template declarations
to reduce duplicate code
* fix travis build
2019-07-07 18:33:33 +02:00
Sebastian
db43dcd601
posix.cfg: Add `<use-retval/>` to pthread_mutex_trylock ( #1959 )
...
Ignoring the return value of pthread_mutex_trylock is always a bug.
There is no other way to check if the mutex is locked or not after the
call.
2019-07-07 12:57:02 +02:00
IOBYTE
c902c5f688
Fix #9197 (Template name cache: Assertion `tok && tok->str() == ">"' failed.) ( #1964 )
2019-07-07 10:20:43 +02:00
Paul Fultz II
b0d10273ed
Fix issue 3695: Handle class pointers
...
This switches to use lifetime analysis to check for assigning to non-local variables:
```cpp
class test
{
public:
void f()
{
int x;
this->ptr = &x;
}
protected:
int *ptr;
};
```
2019-07-07 10:16:19 +02:00
IOBYTE
9569fa1374
Partial fix for #9191 (simplifyTypedef: Problem when namespace is used) ( #1952 )
...
* Partial fix for #9191 (simplifyTypedef: Problem when namespace is used)
This fixes simplifyUsing which has the same problem as simplifyTypedef.
simplifyUsing was designed to support using namespace but it was never
implemented. The changes are minor to add it.
simplifyTypedef requires much more work to support using namespace.
* reduce scope of variable
* make idx const
2019-07-06 20:22:13 +02:00
PKEuS
ae86536128
Updated to Visual Studio 2019
2019-07-06 12:11:19 +02:00
Paul Fultz II
65af02f0cf
Fix crash with lambda capture ( #1960 )
2019-07-06 10:46:17 +02:00
Rikard Falkeborn
2bd026dd2a
Add tests of std.cfg buffer size ( #1958 )
...
Includes a testcase for trac ticket #1379 which was fixed in
839fcddd8a
.
2019-07-06 08:55:17 +02:00
Rikard Falkeborn
839fcddd8a
Fix #6115 (Add support to realloc to cfg files) ( #1953 )
...
* Allow to configure realloc like functions
* memleakonrealloc: Bring back tests.
The old memleak checker was removed, and the tests for it was removed in
commit 9765a2dfab
. This also removed the
tests for memleakOnRealloc. Bring back those tests, somewhat modified
since the checker no longer checks for memory leaks.
* Add realloc to mem leak check
* Add tests of realloc buffer size
* Configure realloc functions
* Add test of freopen
* Allow to configure which element is realloc argument
* Fix wrong close in test
cppcheck now warns for this
* Update manual
* Update docs
* Rename alloc/dalloc/realloc functions
Naming the member function realloc caused problems on appveyor. Rename
the alloc and dealloc functions as well for consistency.
* Change comparisson order
* Remove variable and use function call directly
* Create temporary variable to simplify
* Throw mismatchError on mismatching allocation/reallocation
* Refactor to separate function
* Fix potential nullptr dereference
As pointed out by cppcheck.
2019-07-05 12:44:52 +02:00
Paul Fultz II
e0ced1c415
Parse lambdas as functions ( #1955 )
...
* Parse lambdas as functions
* Fix issue with missing paren
* Fix error when parsing non-existent args
* Remove unused function variable
2019-07-05 12:30:42 +02:00
Rikard Falkeborn
2a17e624d9
Overlapping sprintf, improve handling of casts ( #1945 )
...
* Overlapping sprintf, improve handling of casts
If there is a cast of the argument buffer, cppcheck would print out the
expression including the cast, which looks a bit strange to talk about
Variable (char*)buf is used as...
Instead, only print the variable name without the cast.
Also, handle arbitrary many casts (the previous code only handled one).
Multiple casts of the input arguments is probably an unusual case in
real code, but can perhaps occur if macros are used.
* Fix printing of variable
... and add a test.
* Simplify testcase
2019-07-05 12:27:39 +02:00
Paul Fultz II
5801fb26f0
Fix syntax error with lambda captures ( #1954 )
...
* Fix syntax error with lambda captures
* Fix issue when using initializer in lambdas
2019-07-05 12:26:01 +02:00
Sebastian
c45dff1e1d
openmp.cfg: Add library configuration for OpenMP ( #1956 )
...
See https://www.openmp.org/
2019-07-05 03:00:52 +02:00
shaneasd
7e54f989f9
Update symbol database such that the override keyword implies that the function is also virtual ( #1907 )
...
* Update symbol database such that the override keyword implies that the function is also virtual
* Add test case for implicit override
* change isVirtual to hasVirtualSpecifier
* fix method documentation for getVirtualFunctionCalls and getFirstVirtualFunctionCallStack
* Fix isImplicitlyVirtual to consider the override keyword and document logic
* Fix getFirstVirtualFunctionCallStack and getVirtualFunctionCalls to use isImplicitlyVirtual instead of isVirtual so new test case passes
2019-07-04 12:32:32 +02:00
Rikard Falkeborn
60a213e6a5
Fix #9047 (c-style casts before malloc) ( #1930 )
...
* Fix #9047 (c-style casts before malloc)
Note that there are still no warnings for c++-style casts
* Fix memleak check with casts of assignments in if-statements
* Fix possible null pointer dereference
As pointed out by cppcheck.
* Add check of astOperand2 when removing casts
This is similar to how it is done in other checks.
2019-07-03 08:39:44 +02:00
IOBYTE
c4933acb5a
Fixed #9147(SymbolDatabase bailout: unhandled code) ( #1948 )
...
* Fixed #9147(SymbolDatabase bailout: unhandled code)
* add test for #9183
2019-07-03 08:35:48 +02:00
Daniel Marjamäki
f84dcc4738
astyle formatting
...
[ci skip]
2019-07-03 08:29:47 +02:00
Paul Fultz II
8f4cb36e1e
Check for more garbage code ( #1949 )
...
* Check for garbage commas
* Find garbage dot operator
2019-07-03 08:28:24 +02:00
Ken-Patrick
d6f6e68fa2
Fix false positive 9167 ( #1904 )
...
Skip returns from local class/struct definition in FwdAnalysis.
2019-07-03 08:17:06 +02:00
Scott Furry
da213d1534
More Zero/Null as pointer constant corrections ( #1947 )
...
Further to pull request #1938 . Changes were missed in previous commit.
Resolve warnings `warning: zero as null pointer constant` in code by
using C++ 11 recommended `nullptr`.
2019-07-02 20:37:44 +02:00
IOBYTE
5642778206
Fixed #9193 (functionStatic false positive (inconclusive)) ( #1943 )
2019-07-02 11:40:57 +02:00
IOBYTE
bf4e1ef790
template simplifier: consistently handle templates with no arguments ( #1939 )
...
this fixes daca boost1.67 crashes
2019-07-01 07:01:14 +02:00
Daniel Marjamäki
0eedcfc160
Fixed #7464 (warn about opposite if and else-if conditions)
2019-06-30 23:26:49 +02:00
Scott Furry
a195477470
Correct Zero/Null as pointer constant ( #1938 )
...
Building with enhanced clang warnings indicated a large number of
instances with the warning:
`warning: zero as null pointer constant`
Recommended practice in C++11 is to use `nullptr` as value for
a NULL or empty pointer value. All instances where this warning
was encountered were corrected in this commit.
Where warning was encountered in dependency code (i.e. external library)
no chnages were made. Patching will be offered upstream.
2019-06-30 21:39:22 +02:00
Daniel Marjamäki
56df6169fb
Fixed #8356 (ValueFlow: variable is not changed in for loop)
2019-06-30 17:50:35 +02:00
Rikard Falkeborn
d1d622b74c
Valueflow: support global static const variables ( #1861 )
2019-06-29 14:33:55 +02:00
Daniel Marjamäki
84cc09d17c
Update Copyright
2019-06-29 07:49:14 +02:00
Rikard Falkeborn
0d69a86bf8
Remove debug printout ( #1933 )
2019-06-28 22:08:32 +02:00
IOBYTE
8b347aed42
Fixed #8663 (Stack overflow with template disambiguator) ( #1932 )
2019-06-28 22:07:21 +02:00
IOBYTE
16788df055
template simplifier: various small fixes ( #1916 )
...
* fix adding instantiation of first argument to an instantiation
* add support for function pointer template variables
* fix more cases where templates ending in ">>" are changed to end in "> >"
* fix travis build
* standard types can't be a template parameter name
* remove redundant level == 0 checks
* fix lambda in template variable
* fix a test
2019-06-28 11:14:20 +02:00
Ken-Patrick
927d139488
Fix FP #9165 ( #1928 )
...
Properly check the type of the expressions, instead of using the type
of the tokens
2019-06-27 07:48:44 +02:00
Sebastian
d745dcc0eb
gtk.cfg: Add g_error_*() functions ( #1922 )
2019-06-25 19:19:10 +02:00
Paul Fultz II
66e0f06494
Fixx issue 9163: FP returnDanglingLifetime - returning std::string::find ( #1912 )
...
* Fixx issue 9163: FP returnDanglingLifetime - returning std::string::find
* Use simpleMatch
2019-06-24 18:52:17 +02:00
Daniel Marjamäki
175070ca50
Revert "Fixed #8938 (FP identicalInnerCondition)"
...
This reverts commit 0edf0b5628
.
This bailout seems to cause many false negatives
2019-06-22 21:57:19 +02:00
Daniel Marjamäki
de9c999d79
Better handling of spaces in paths
2019-06-22 19:20:15 +02:00
Daniel Marjamäki
7ceb51a952
Try to improve 'clarifyStatement' warning message
2019-06-22 08:44:41 +02:00
Daniel Marjamäki
16bed07c60
Clarify tests
2019-06-22 07:50:43 +02:00
Daniel Marjamäki
cf79830afd
Revert "Remove bailout. It hides lots of warnings for real code to avoid FP in unused templates."
...
This reverts commit 2a4be5ae1c
.
When I look at daca@home now there are still lots of false negatives. So this bailout did not cause as much false negatives as I thought.
2019-06-19 22:29:00 +02:00
Ken-Patrick
44d6066c6f
FP on assignment through pointer ( #1887 )
...
* Fix FP when assigning through pointers
* Add test case for false positive
cppcheck would faulty warn:
"Condition '*b>0' is always true"
2019-06-17 21:25:15 +02:00
IOBYTE
246576fceb
Fixed #9178 (Assertion `brackets1.empty() == false' failed on valid C++ code) ( #1905 )
...
This fixes a nasty intrinsics related bug causing instantiations that
shouldn't happen.
2019-06-17 21:18:27 +02:00
Rikard Falkeborn
b1c8d81bcc
Refactoring; Use range for loop ( #1900 )
2019-06-17 13:17:45 +02:00
Daniel Marjamäki
2a4be5ae1c
Remove bailout. It hides lots of warnings for real code to avoid FP in unused templates.
2019-06-16 19:01:45 +02:00
Rikard Falkeborn
d909ac8565
Bugfix buffer size for strdup like functions ( #1893 )
...
strdup() allocates the string length plus one for a terminating null
character. Add one to compensate for this.
Fixes false positive buffer out of bounds on code like this:
void f() {
const char *a = "abcd";
char * b = strdup(a);
printf("%c", b[4]); // prints the terminating null character
free(b);
}
Also, add a testcase for valueFlowDynamicBufferSize() and add tests for
strdup(), malloc() and calloc().
2019-06-16 16:02:27 +02:00
Ken-Patrick
66ebc187f6
Cleanup some const_cast of Token* ( #1886 )
...
* Add non const version of some methods of Token
The aim is to reduce the (ab)use of const_cast.
* Cleanup some more const_cast in valueflow
* Remove useless const_cast
* Remove some const_cast from templatesimplifier
* Remove some const_cast from valueflow
2019-06-16 10:09:38 +02:00
Daniel Marjamäki
6d982d4320
Testing: comment/naming
2019-06-15 13:01:34 +02:00
Rikard Falkeborn
b970606c93
Add regression test for #7798 ( #1847 )
...
Trac ticket #7798 was fixed in 3f1e2b4270
(More conservative fallback for function overload matching). Add a test
to avoid regressions.
2019-06-15 11:34:06 +02:00
Paul Fultz II
b466415bb4
Fix syntax error in issue 9155 ( #1885 )
2019-06-15 09:48:22 +02:00
IOBYTE
75720528b0
template simplifier: add 2 new template parameter simplifications ( #1884 )
...
* template simplifier: add 2 new template parameter simplifications
int{} -> 0
decltype(int{}) -> int
This fixes reduced test cases like #9153 . I'm not sure they will help
real world code that much.
It was necessary to increase the pass count to 4 to get #9153 completly
simplified.
* relax decltype(type{}) simplification to any type
2019-06-15 09:46:32 +02:00
IOBYTE
c0d8990e8b
Fix up a few more cases where templates ending in ">>" should be changed to end in "> >". ( #1883 )
2019-06-13 13:37:55 +02:00
IOBYTE
2a4b28c267
Fixed #9155 (Syntax error on valid C++ code) ( #1880 )
...
Refactored simplifyTemplateAliases to iterate over template type aliases
rather than instantiations. This fixed template type aliases that were
not templates.
Don't instantiate templates in template type aliases. They will get
instantiated once the type alias is instantiated. This required
increasing the template simplifier pass count to 3 so one of the
existing tests continued to work.
2019-06-12 07:44:48 +02:00
Paul Fultz II
b863c18e1d
Fix crash in issue 9007 ( #1878 )
2019-06-10 08:24:09 +02:00
Paul Fultz II
169510bd3a
Fix issue 9171: Endless recursion ( #1877 )
2019-06-10 08:22:48 +02:00
IOBYTE
5af8beecf6
template simplifier: specialized member class not recognized causing wrong instantiation ( #1876 )
...
Specialized member classes declared outsize the class were not
recognized. This caused the the member class to be instantiated rather
than the specialized class. We already had a test for this but it was
wrong so it went unnoticed.
2019-06-09 08:11:59 +02:00
Paul Fultz II
1f24aa778b
Fix issue 9156: Analysis failed because square brackets arent linked correctly ( #1871 )
2019-06-09 08:10:57 +02:00
IOBYTE
7a87786cbc
template simplifier: class or typename can't be a name ( #1875 )
...
* template simplifier: class or typename can't be a name
* struct can't be a name
2019-06-08 07:27:53 +02:00
IOBYTE
f02e45bf3d
fix syntax error for std::literals::complex_literals::operator""if ( #1870 )
2019-06-05 10:15:22 +02:00
IOBYTE
41cf865947
template simplifier: add links to expanded return type in function forward declaration ( #1868 )
...
This crash was seen in daca capnproto but I could only get creduce to
generate garbage code so the test is in checkgarbage.
2019-06-03 07:06:04 +02:00
Daniel Marjamäki
7ca35d181b
uninitStructMember: Fixed FP shown in daca@home
2019-06-02 20:19:53 +02:00
Daniel Marjamäki
7a3302b3e3
CheckLeakAutoVar: Fixed FP seen in daca@home
2019-06-02 15:25:54 +02:00
IOBYTE
ce9fdd181d
Add regression test for #9146 (Syntax error on valid C++ code) ( #1867 )
2019-06-02 10:23:47 +02:00
Paul Fultz II
676a241137
Add regression tests for syntax errors ( #1866 )
2019-06-02 10:23:27 +02:00
Paul Fultz II
8a1c0dd017
Fix FP with non-local variable referencing a non-local variable ( #1864 )
2019-06-02 10:21:26 +02:00
Paul Fultz II
6ae7be0f53
Fix FP with lifetime containers ( #1865 )
2019-06-02 10:14:48 +02:00
IOBYTE
bee248b2de
token simplifier: fix namespace, token link and syntax error support for template type aliases ( #1863 )
2019-06-01 10:52:29 +02:00
Daniel Marjamäki
5d10b57b04
Fixed #8997 (False positive redundantAssignment when pointer is updated with +=)
2019-05-31 12:24:31 +02:00
Paul Fultz II
f75c15af56
Fix issue 6821: New check: access heap/stack data using address of variable
...
This fixes errors with:
```cpp
int f() {
int i;
return (&i)[1];
}
```
It uses the lifetime analysis to detect the issues.
2019-05-31 12:24:31 +02:00
Paul Fultz II
108cdaa485
Fix FP with unreadVariable ( #1859 )
2019-05-31 08:06:36 +02:00
Paul Fultz II
33130bdff6
Fix issue 9145: Syntax error on valid C++14 code ( #1860 )
2019-05-31 08:05:01 +02:00
Daniel Marjamäki
66a61fe5e8
SymbolDatabase: Improved findFunction
2019-05-30 20:26:45 +02:00
Daniel Marjamäki
36b6fb9f4d
Fixed #8558 (False portability positive caused by incorrect method resolution)
2019-05-30 19:24:51 +02:00
Daniel Marjamäki
4da50942b0
Fixed #8120 (False positive: Memory pointed to by 'p' is freed twice)
2019-05-30 16:22:41 +02:00
orbitcowboy
55df395a4e
Running astyle [ci skip]
2019-05-30 14:41:14 +02:00
Ken-Patrick
3cdc236e10
Fix false positive with several ! (not) operators ( #1856 )
...
With the following code
int f(int x, int y) {
if (!!(x != 0)) {
return y/x;
}
cppcheck would wrongly warn that there might be a division by zero in
"return y/x;".
2019-05-29 09:45:15 +02:00
IOBYTE
1e7f5010eb
template simplifier: fix expansion of template arguments in default parameter instantiation ( #1857 )
2019-05-28 21:32:37 +02:00
IOBYTE
e8692b012f
template simplifier: partial fix for instantiation of templates with type trait parameters ( #1855 )
2019-05-27 20:51:52 +02:00
Paul Fultz II
312fdf157b
Fix issue 9144: Syntax error with type intrinsics ( #1852 )
...
* Fix issue 9144: Syntax error with type intrinsics
* Only run when using cpp
2019-05-27 06:54:21 +02:00
Paul Fultz II
61935802d1
Fix issue 9141: Syntax error ( #1853 )
2019-05-27 06:50:43 +02:00
orbitcowboy
02d307a231
posix.cfg: Added partial support for scandir() and a TODO comment.
2019-05-25 23:32:28 +02:00
orbitcowboy
4d223a70dc
MathLib: Added robustness tests for 'MathLib::divide()'.
2019-05-25 23:06:50 +02:00
Paul Fultz II
cb7f925f5e
Fix issue 9109: Syntax error for valid C++ code
2019-05-24 10:44:08 +02:00
IOBYTE
5efb23ffff
template simplifier: fix instantiation of variadic template with no arguments ( #1848 )
...
* template simplifier: fix instantiation of variadic template with no arguments
* fix white space change
* add support for <class...>
* add variadic template flag
2019-05-23 20:53:26 +02:00
Daniel Marjamäki
cd05f4eefc
test/cli/test-helloworld: Fix misra warning 17.7
2019-05-23 14:31:55 +02:00
Daniel Marjamäki
de4a33167d
astyle formatting
...
[ci skip]
2019-05-21 10:43:33 +02:00
Paul Fultz II
9838bfa79f
Fix false positive in constArgument when passing struct member ( #1845 )
2019-05-21 10:41:16 +02:00
Paul Fultz II
9949ae1b4f
Fix issue 8995: False Positive: Redundant code with initializer-list created object ( #1844 )
2019-05-21 10:40:36 +02:00
Paul Fultz II
9055682fdc
Fix synax error in issue 9057 and 9138 ( #1843 )
2019-05-21 08:47:10 +02:00
Daniel Marjamäki
29e5992e51
Fixed #9045 (FP operatorEqRetRefThis - recent regression)
2019-05-20 21:30:20 +02:00
IOBYTE
592ff56b90
template simplifier: fix single parameter template with default value ( #1842 )
...
* template simplifier: fix single parameter template with default value
* fix derived class with single default argument
2019-05-19 19:19:57 +02:00
Paul Fultz II
ce96ec2773
Fix issue 9136: Syntax error on valid C++14 code: createLinks2() failed
2019-05-19 19:06:12 +02:00
Paul Fultz II
8cbd9b03aa
Fix issue 8890: AST broken calling member function from templated base class ( #1836 )
...
* Fix issue 8890: AST broken calling member function from templated base class
* Format
* Check for double bracket
* Add test to createLinks2
* Remove extra test
* Reduce test case for links
2019-05-19 10:05:34 +02:00
Rikard Falkeborn
ada881ccdf
Fix #9130 (FP memory leak with NULL pointer cast) ( #1839 )
2019-05-18 06:22:25 +02:00
Paul Fultz II
cf3515ee61
Fix issue 7372: False positive uninitMemberVar - on template specialization
...
This fixes the issue by skipping diagnostics when the symbols are incomplete in the constructor.
2019-05-17 20:24:41 +02:00
orbitcowboy
4a9176f83c
std.cfg: Added a test for tmpfile().
2019-05-17 16:02:48 +02:00
Daniel Marjamäki
e80181d35a
astyle formatting
...
[ci skip]
2019-05-17 09:32:14 +02:00
Daniel Marjamäki
57c6628732
Revert 'Cleaning up unsimplified templates'. This fix caused problems.
2019-05-16 21:11:04 +02:00
orbitcowboy
e48d785ea4
gnu.cfg: Added tests for mkostemp(), mkstemps() and mkostemps() functions. The test script 'test/cfg/runtests.sh' is now loading posix.cfg when checking gnu.cfg. Otherwise 'close()' was not available to Cppcheck, which lead to an error when 'make checkcfg' was executed.
2019-05-16 17:49:33 +02:00
orbitcowboy
719eb25ba9
posix.cfg: Improved configuration for 'mkstemp()' and added test cases to ensure resource leaks are caught.
2019-05-16 15:53:22 +02:00
Daniel Marjamäki
0144db2490
Fixed 'Syntax Error' when < link is not set properly
2019-05-15 21:34:56 +02:00
Daniel Marjamäki
2e7725dfa7
Fix test case, my change is reverted
2019-05-15 07:06:04 +02:00
Daniel Marjamäki
79bb22f038
Fixed #9131 (Tokenizer::createLinks2; using std::list; list<config_option*> stack;)
2019-05-14 20:30:02 +02:00
Paul Fultz II
4e94c64da8
Fix issue 9099 and 9102: Incorrect valueflow for global variables ( #1832 )
2019-05-14 08:58:27 +02:00
Paul Fultz II
195da2b3d2
Fix issue 8993: False positive duplicateCondition related to auto ( #1831 )
2019-05-14 08:57:36 +02:00
Rikard Falkeborn
dc0e8c214e
Fix #9128 (FP in return non bool with class declared in function) ( #1830 )
...
Also break up the tests to smaller tests.
2019-05-14 08:56:28 +02:00
Daniel Marjamäki
9f00149674
Fixed #9127 (ast: wrong ast after using and template instantiation)
2019-05-12 17:24:42 +02:00
Daniel Marjamäki
27fad38e00
Fixed #9084 (Tokenizer::setVarId: Same varid for member variable and argument, unknown template type)
2019-05-12 09:10:37 +02:00
Daniel Marjamäki
4d9b1e6c3d
Fixed #9094 (Tokenizer::createLinks2 problem with 'x%x<--a==x>x')
2019-05-11 19:11:40 +02:00
Daniel Marjamäki
1e2f1bac1f
Fixed #8921 (Broken AST - mem = (void*)(new char))
2019-05-11 15:50:30 +02:00
Daniel Marjamäki
d58d4273f9
Cleaning up unsimplified templates
2019-05-11 13:00:03 +02:00
IOBYTE
eade2bb2c2
Add support for simplifying user defined literal operator. ( #1827 )
2019-05-09 09:52:18 +02:00
Daniel Marjamäki
e4c178d5c0
bump simplecpp
2019-05-07 19:15:31 +02:00
IOBYTE
baeae95bac
template simplifier: fix a template alias TODO test ( #1823 )
2019-05-06 19:06:46 +02:00
Daniel Marjamäki
f6527fcd9b
fixed tests, unused templates are removed by default
2019-05-05 19:40:58 +02:00
Daniel Marjamäki
9947774ab7
Removed test case with unused templates
2019-05-05 19:15:42 +02:00
Daniel Marjamäki
7efcb3cfe3
astyle formatting
...
[ci skip]
2019-05-05 11:41:29 +02:00
Paul Fultz II
8c03be3212
Fix issue 9077: False positive: Returning pointer to local variable ( #1821 )
...
* Avoid implicit conversion for lifetimes
* Fix issue 9077
* Add more tests
* Rename function
* Fix implicit conversion with containers
* Format
* Fix crash
2019-05-05 11:40:59 +02:00
Daniel Marjamäki
fe04c15c9e
CheckStl: Modernize the recommendations. string::starts_with is more intuitive than string::compare
2019-05-05 10:35:44 +02:00
Paul Fultz II
a688df0ea1
Fix issue 9120: crash in valueflow ( #1822 )
2019-05-05 09:51:36 +02:00
Daniel Marjamäki
45a343ac2d
Fixed #8795 (Syntax Error: AST broken, binary operator '||' doesn't have two operands)
2019-05-04 19:05:03 +02:00
Daniel Marjamäki
5e9b7a6749
Cleanup AST tests. The best would be if 'operators' in declarations was not included at all in the AST.
2019-05-04 07:31:59 +02:00
Daniel Marjamäki
7900902ad9
Renamed 1-helloworld helloworld
2019-05-03 20:22:35 +02:00
Daniel Marjamäki
e8c0345a51
Fixed #7999 (Inline suppressions do not work under weird circumstances)
2019-05-03 20:19:28 +02:00
Daniel Marjamäki
bbb5bfd432
Preprocessor: Test case has been moved to simplecpp
2019-05-03 19:27:08 +02:00
Sebastian
b1cb03b560
posix.c: Add test to avoid regression of already fixed ticket #9118 ( #1820 )
...
Trac ticket: https://trac.cppcheck.net/ticket/9118
Commit that likely fixed it already:
1b74bca973
2019-05-03 16:35:15 +02:00
Paul Fultz II
091f4bcf8d
Add check for unnecessary search before insertion
...
This will warn for cases where searching in an associative container happens before insertion, like this:
```cpp
void f1(std::set<unsigned>& s, unsigned x) {
if (s.find(x) == s.end()) {
s.insert(x);
}
}
void f2(std::map<unsigned, unsigned>& m, unsigned x) {
if (m.find(x) == m.end()) {
m.emplace(x, 1);
} else {
m[x] = 1;
}
}
```
In the case of the map it could be written as `m[x] = 1` as it will create the key if it doesnt exist, so the extra search is not necessary.
I have this marked as `performance` as it is mostly concerning performance, but there could be a copy-paste error possibly, although I dont think thats common.
2019-05-02 11:04:23 +02:00
Rikard Falkeborn
4edc248dae
Fix 8840: Don't warn when returning a bitmask as bool ( #1818 )
...
A common pattern is to have a function like similar to this:
bool isFlagSet(uint32_t f) {
return f & 0x4;
}
Warning that the function returns a non-boolean in this case is too
noisy, it would be better suited for a Misra check, so remove the
warnings in the most obvious cases.
2019-05-02 07:00:27 +02:00
Rikard Falkeborn
68869438be
Refactoring: Use range based for loops ( #1817 )
2019-05-02 06:53:07 +02:00
Daniel Marjamäki
202d38b9eb
Revert "Fixed #7999 (Inline suppressions do not work under weird circumstances)"
...
This reverts commit 0cc41f44b8
.
2019-05-02 06:50:08 +02:00
Daniel Marjamäki
0cc41f44b8
Fixed #7999 (Inline suppressions do not work under weird circumstances)
2019-05-01 20:37:36 +02:00
Daniel Marjamäki
c4c847b952
Remove test case, ValueFlow will truncate and sign-extend values
2019-05-01 19:33:47 +02:00
Daniel Marjamäki
6c3c090403
Fixed #6317 (wrong simplification: int i = 1.5; return i; get simplified to: return 1.5;)
2019-05-01 17:05:16 +02:00
Rikard Falkeborn
1cc5f3abe7
Set wchar_t type ( #1807 )
...
This is necessary for valueflow to know the size, for example when
calculating sizeof(wchar_t).
2019-05-01 16:34:28 +02:00
Daniel Marjamäki
6da42a3d63
Fixed #9112 (false positive: (error) Array index out of bounds; buffer 'x' is accessed at offset n.)
2019-05-01 13:00:14 +02:00
Daniel Marjamäki
b3a46e72dc
Fix and test syntaxError suppression
2019-05-01 11:54:13 +02:00
Paul Fultz II
71bd7f68d4
Fix bug in lifetime constructors ( #1816 )
2019-05-01 07:52:52 +02:00
Daniel Marjamäki
7260bdd6d8
Fixed Cppcheck shadowVar warnings
2019-04-30 21:01:18 +02:00
Daniel Marjamäki
66064fb2bb
Disable valueFlowGlobalConstVar until #9099 is fixed
2019-04-30 20:51:59 +02:00
Rikard Falkeborn
c7d7f8738c
Optimize astStringVerbose() for large arrays ( #1815 )
...
Change the astStringVerbose() recursion to extend a string instead of
returning one. This has the benefit that for tokens where the recursion
runs deep (typically large arrays), the time savings can be substantial
(see comments on benchmarks further down).
The reason is that previously, for each token, the astString of its
operands was constructed, and then appended to this tokens astString.
This led to a lot of unnecessary string copying (and with that
allocations). Instead, by passing the string by reference, the number
of temporary strings is greatly reduced.
Another way of seeing it is that previously, the string was constructed
from end to beginning, but now it is constructed from the beginning to
end. There was no notable speedup by preallocating the entire string
using string::reserve() (at least not on Linux).
To benchmark, the changes and master were tested on Linux using the
commands:
make
time cppcheck --debug --verbose $file >/dev/null
i.e., the cppcheck binary was compiled with the settings in the
Makefile. Printing the output to screen or file will of course take
longer time.
In Trac ticket #8355 which triggered this change, an example file from the
Wine repository was attached. Running the above cppcheck on master took
24 minutes and with the changes in this commmit, took 22 seconds.
Another test made was on lib/tokenlist.cpp in the cppcheck repo, which is
more "normal" file. On that file there was no measurable time difference.
A synthetic benchmark was generated to illustrate the effects on dumping
the ast for arrays of different sizes. The generate code looked as
follows:
const int array[] = {...};
with different number of elements. The results are as follows (times are
in seconds):
N master optimized
10 0.1 0.1
100 0.1 0.1
1000 2.8 0.7
2000 19 1.8
3000 53 3.8
5000 350 10
10000 3215 38
As we can see, for small arrays, there is no time difference, but for
large arrays the time savings are substantial.
2019-04-30 13:35:48 +02:00
Daniel Marjamäki
37656cdca1
Fix comment
2019-04-30 08:54:41 +02:00
IOBYTE
505b7f7ebd
Fixed #9110 (Syntax error on valid C++ code) ( #1813 )
2019-04-29 15:17:37 +02:00
Paul Fultz II
ae8a3aae8d
Fix FP with unused variable ( #1814 )
2019-04-29 11:50:19 +02:00
Daniel Marjamäki
0e8f2cdf63
Use multiline in testing
2019-04-28 07:48:38 +02:00
Daniel Marjamäki
004d7d5333
Fixed #8580 (False positive: unused function (lambda))
2019-04-27 17:17:51 +02:00
Paul Fultz II
c4325bbec3
Fix issue 9103: False positive duplicateConditionAssign ( #1808 )
...
* Fix issue 9103: False positive duplicateConditionAssign
* Update conditional message
2019-04-26 12:30:41 +02:00
Paul Fultz II
e856920488
Fix false positive with ignoredReturnValue with std::move ( #1809 )
2019-04-26 12:22:31 +02:00
Paul Fultz II
39f4374446
Improve diagnostics with null smart pointers ( #1805 )
...
* Warn when dereferencing null smart pointers
* Improve tracking of smart pointer values
* Use library isSmartPointer
2019-04-26 11:30:09 +02:00
Daniel Marjamäki
76e13c45c7
temporarily disable duplicateConditionalAssign
2019-04-25 07:44:19 +02:00
Rikard Falkeborn
0ca217daef
TestToken: Add more tests ( #1806 )
2019-04-25 07:08:13 +02:00