Paul Fultz II
f16d9d7d90
Issue 6175: Check lifetime of a variables stored in containers and member variables
...
Cppcheck will now warn for all cases here:
```cpp
#include <vector>
class CCluster {};
class MyClass
{ public:
std::vector<CCluster*> m_cluster;
void createCluster()
{
CCluster cl;
CCluster* pcl=&cl;
m_cluster.push_back(pcl);
}
void createCluster2()
{
CCluster cl;
m_cluster.push_back(&cl);
}
CCluster* Cluster()
{
CCluster cl;
CCluster* pcl=&cl;
return pcl;
}
CCluster* Cluster2()
{
CCluster cl;
return &cl;
}
};
```
2018-11-21 08:43:57 +01:00
Daniel Marjamäki
9d8e5e36eb
Added a few TODO comments
2018-11-20 22:57:01 +01:00
Paul Fultz II
7ef119cbfc
Fix FPs in lifetime checker
...
This fixes several FPs in the lifetime checker. It also fixes issue [8846](https://trac.cppcheck.net/ticket/8846 ):
```cpp
int * f(int a[])
{
return a;
}
```
2018-11-17 09:41:59 +01:00
Paul Fultz II
d376e9f245
Track variable lifetime through function calls ( #1481 )
2018-11-16 06:12:28 +01:00
Daniel Marjamäki
39c04b650d
astyle formatting
...
[ci skip]
2018-11-14 19:10:52 +01:00
Paul Fultz II
54453c5802
Fix FP when copying pointer to string ( #1479 )
2018-11-14 06:59:25 +01:00
Paul Fultz II
f0c86b9d14
Fix issue 8842: Crash in valueFlowTerminatingCondition on incomplete code ( #1480 )
2018-11-14 06:23:45 +01:00
Daniel Marjamäki
f096d7f474
astyle formatting
...
[ci skip]
2018-11-12 10:08:57 +01:00
Paul Fultz II
0e11bb07c8
Extend lifetime analysis to pointer usage ( #1477 )
...
* Use lifetime analysis for pointers as well
* Fix issue 1143: Pointer to local array
* Update message when using pointers
* Avoid infinite loop in tracing lifetimes
2018-11-12 10:08:17 +01:00
Daniel Marjamäki
717a2d370c
astyle formatting
...
[ci skip]
2018-11-12 06:32:02 +01:00
Paul Fultz II
5bda102897
Fix warnings ( #1476 )
2018-11-12 06:08:57 +01:00
Paul Fultz II
68d6b96878
Diagnose invalid lifetimes ( #1475 )
...
* Add check for invalid lifetimes
* Fix FP with member variables
* Dont forward lifetime values in subfunction
* Update message to use out of scope
2018-11-11 16:43:54 +01:00
Daniel Marjamäki
bdd4623124
valueFlowLibraryFunction: fix crash found with daca@home
2018-11-11 16:41:01 +01:00
Paul Fultz II
e46691597e
Fix issue 8841: FP knownConditionTrueFalse - Dont treat unknown function as noreturn ( #1474 )
...
* Fix issue 8841: Dont treat unknown function as noreturn
* Add a parameter to set default value when the function is unknown
2018-11-11 08:04:01 +01:00
Daniel Marjamäki
d5a478d5c5
astyle formatting
...
[ci skip]
2018-11-10 21:30:01 +01:00
Paul Fultz II
1ffcc6b730
Add initial lifetime checker ( #1448 )
...
* Inital valueflow lifetime checker
* Forward values
* Add initial tests
* Fix deplicate messages
* Fix traversing nested lambdas
* Turn test case into a todo
* Skip if returning a container
* Fix FP when using references
* Add missing header
* Fix FP from broken scopes
* Fix FP with static variable
* Add test for more FPs
* Parse lambda functions
* Check for capture by value
* Add tests for using a container and lambda together
* Fix cppcheck errors
* Add test for nextAfterAstRightmostLeaf
* Add valueflow tests
* Update error message
* Check for correct lambda token
* Improve error path reporting
* Fix hang when parsing arrays that look almlost like lambdas
2018-11-10 16:40:40 +01:00
Paul Fultz II
36e663e250
Fix issue 8839: FP knownConditionTrueFalse - condition inside a while-clause ( #1469 )
2018-11-09 06:09:51 +01:00
Paul Fultz II
7373be2bfa
Add a pass in valueflow for terminating conditions ( #1323 )
...
* Add valueflow for terminating conditions
* Add valueflow test
* Dont check for same expressions for now to avoid double diagnostics
* Check nesting
* Add more tests
* Ensure conditions happen in order
* Check for null
* Add error path
* Support same expression check as well
* Use early continue
* Skip checking the same token
* Avoid double condtion diagnosis
* Fix FP when in switch statements
* Fix FP when time function
* Skip conditional escapes
* Use simpleMatch
* Fix naming
* Fix typo
2018-11-07 06:49:07 +01:00
Daniel Marjamäki
35d18be311
ValueFlow: Refactoring, removed redundant assignment
2018-11-06 07:02:20 +01:00
Daniel Marjamäki
00340efc57
ValueFlow: Refactoring valueFlowCallFunction
2018-11-06 06:38:26 +01:00
Daniel Marjamäki
ca19894a04
ValueFlow: In evaluate handle correlated values
2018-11-05 18:07:35 +01:00
Daniel Marjamäki
da44ce0b5d
ValueFlow: evaluate strlen and char literals better
2018-11-05 16:52:12 +01:00
Daniel Marjamäki
977fdd88a9
ValueFlow: Fix a few issues in 'evaluate'
2018-11-05 06:53:48 +01:00
Daniel Marjamäki
8a54420274
ValueFlow: Try to handle multiple argument values in <returnValue> evaluation
2018-11-04 20:52:12 +01:00
Daniel Marjamäki
dd9a1e890b
valueFlowRightShift: Do not perform analysis when rhs is negative
2018-11-04 17:13:23 +01:00
Daniel Marjamäki
6878de2c5e
ValueFlow: getExpressionRange, valueFlowRightShift
2018-11-03 23:25:46 +01:00
Daniel Marjamäki
ef35b86b4a
Multipass Valueflow
2018-11-03 15:53:24 +01:00
Daniel Marjamäki
614a252704
Fix Match warning
2018-11-02 20:14:34 +01:00
Daniel Marjamäki
5de683ec49
Container size: Fix false positive
2018-11-02 20:10:40 +01:00
Daniel Marjamäki
16cc20a232
ValueFlow: Better handling of container size values
2018-11-02 18:28:32 +01:00
Daniel Marjamäki
c03d32b429
ValueFlow: Improve containerSize handling of string like classes
2018-10-28 19:14:00 +01:00
Daniel Marjamäki
06ede9c239
ValueFlow: handle x+=y for containers
2018-10-27 18:38:04 +02:00
Paul Fultz II
16c62281d0
Use followVar in checking duplicateBranch ( #1423 )
...
* Use isSameExpression for duplicate branches
* Add errorPath
* Add another test
2018-10-18 11:56:23 +02:00
Paul Fultz II
f65cf220ba
Fix false positives in unknownEvaluationOrder when using followVar ( #1391 )
...
Fix false positives in unknownEvaluationOrder when using followVar
2018-09-28 08:38:24 +02:00
orbitcowboy
d08b39c915
Improved const correctness of local variables. There are no functional changes intended. ( #1392 )
2018-09-23 20:24:51 +02:00
Daniel Marjamäki
d7de46f50e
ValueFlow: Fix false positive for container size
2018-09-08 10:43:08 +02:00
Daniel Marjamäki
c6d43506b6
ValueFlow: Fix FP in switch
2018-09-04 20:28:48 +02:00
Daniel Marjamäki
cc402869a6
Fixed #8689 (False positive: containerOutOfBounds after function call)
2018-09-02 14:08:34 +02:00
Daniel Marjamäki
6223204a06
Fixed #8708 (FP: Accessing an item in container that is empty)
2018-08-27 13:49:47 +02:00
Daniel Marjamäki
2f834c3c3b
Fixed #8688 (False positive: containerOutOfBounds)
2018-08-13 21:27:29 +02:00
Daniel Marjamäki
55ab842083
valueFlowSizeForward: Bailout when function calls modify the container size
2018-08-13 06:54:18 +02:00
Daniel Marjamäki
183345a939
valueFlowContainerSize: Fix FP when container size is changed
2018-08-12 22:23:19 +02:00
Daniel Marjamäki
7074eeb869
valueFlowContainerSize: assignment of string-like containers
2018-08-12 22:01:58 +02:00
Daniel Marjamäki
189ea5003a
valueFlowContainerSize: empty container variables
2018-08-12 14:41:00 +02:00
Daniel Marjamäki
811a71aa06
valueFlowContainerSize: Handle guard logic
2018-08-11 15:08:54 +02:00
Daniel Marjamäki
6008bbdfb4
valueFlowContainerSize: Fix wrong value after condition if conditional code escapes
2018-08-11 13:49:42 +02:00
Daniel Marjamäki
10461e5429
valueFlowContainerSize: forward analysis inside conditional code
2018-08-10 22:18:38 +02:00
Daniel Marjamäki
4a502a7f6b
valueFlowContainerSize: add simple forward analysis
2018-08-10 22:06:23 +02:00
Daniel Marjamäki
2b10e38eec
valueFlowContainerSize: handling of 'v.size() == 10'
2018-08-10 21:43:47 +02:00
Paul Fultz II
3947c23290
Fix issue 8369: False negative: Condition 'condition' is always true ( #1325 )
...
* Fix issue 8369: False negative: Condition 'condition' is always true
* Use simpleMatch
* Add iterator header
* Cleanup
* Remove unused variable
2018-08-10 18:05:23 +02:00
Daniel Marjamäki
3805af18a2
valueFlowContainerSize: Fix crash when container pointer is null
2018-08-10 12:53:16 +02:00
Daniel Marjamäki
f37434cd1d
valueFlowContainerReverse: Fix FPs when there is assignment
2018-08-10 12:26:53 +02:00
Daniel Marjamäki
907f81d059
ValueFlow: Improved analysis of container size
2018-08-10 11:53:56 +02:00
Daniel Marjamäki
81f54f7094
Fixed #8681 (ValueFlow: Container size)
2018-08-10 11:29:16 +02:00
Daniel Marjamäki
c666f74755
astyle formatting
...
[ci skip]
2018-07-25 23:02:16 +02:00
Paul Fultz II
f093692551
ValueFlow: Set values in else branch even when the first branch modifies the value ( #1309 )
...
* Set values in else branch even when the first branch modifies the value
* Move tests
* Add check for goto
* Remvoe todo
* Also check scope is noreturn
* Use isEscapeScope when variables are changed
2018-07-25 22:59:54 +02:00
Paul Fultz II
9895ea5ff2
Fix issue 470: Condition is always true or false on logical operators ( #1294 )
...
* Fix issue 470: Condition is always true or false on logical operators
* Dont warn on literals
* Compute logical operators using valueflow
* Fix FP when using literals
* Always warn on subconditions that are always true
* Use percent matches first
* Add test for logical operators
* Check if parent is null
2018-07-23 08:51:59 +02:00
Daniel Marjamäki
991300ac54
Clarify code with Token::isUnaryOp()
2018-07-14 22:36:08 +02:00
Daniel Marjamäki
1e824330c0
Refactoring: Use range for loops
2018-07-14 22:26:22 +02:00
Daniel Marjamäki
0f3cc56c59
Refactoring: Use range for loops
2018-07-14 13:19:41 +02:00
Daniel Marjamäki
d603a811bb
Clarify code with Token::hasKnownValue()
2018-07-14 13:09:53 +02:00
orbitcowboy
de66eedd54
Improved const correctness of local variables.
2018-05-29 17:33:43 +02:00
Daniel Marjamäki
8e8919e906
Fix comment
2018-05-07 22:06:23 +02:00
Daniel Marjamäki
8c2a5c9813
astyle formatting
...
[ci skip]
2018-05-06 09:50:53 +02:00
Paul Fultz II
0561877182
Fix false positive with negative array index in issue 8536 ( #1202 )
...
* Fix FP with negative array index in valueflow
* Remove values when valueflow fails
* Add valueflow test
2018-05-06 08:35:29 +02:00
Daniel Marjamäki
858e055c0e
ValueFlow: Wrote a few basic comments
2018-05-05 23:03:04 +02:00
Daniel Marjamäki
f336c2efe7
Refactoring; Renamed Scope::classStart and Scope::classEnd
2018-04-27 22:36:30 +02:00
Daniel Marjamäki
dbcdb19b73
Refactoring; Use range for
2018-04-24 18:02:36 +02:00
Daniel Marjamäki
7ee636b934
Refactoring: Reuse isLikelyStreamRead in isVariableChanged
2018-04-18 17:46:10 +02:00
Daniel Marjamäki
7825eb8670
Refactoring; reuse isLikelyStreamRead
2018-04-17 19:51:27 +02:00
Daniel Marjamäki
c84628c28a
Fixed #8494 (False positive: serialization class overloads operator)
2018-04-17 14:23:04 +02:00
PKEuS
d2146844dd
Refactorizations:
...
- Replace several push_back-calls by emplace_back
- Replace some x = x.substr(0, y) calls by x.erase(y)
2018-04-11 09:44:35 +02:00
Daniel Marjamäki
c5923fbdd3
astyle formatting
2018-04-09 22:21:17 +02:00
Paul Fultz II
d8b3fa5c70
Fix #8482 : Regression with valueflow ( #1159 )
...
* Fix regression with valueflow
* Simplify test case
2018-04-09 16:13:17 +02:00
PKEuS
b15cc3f236
Refactorization: Replace several push_back-sequences by initializer lists
2018-04-09 09:54:39 +02:00
Daniel Marjamäki
ee5c60e8f6
Refactoring, use early continue
2018-04-08 09:30:13 +02:00
Daniel Marjamäki
795b9f5e0f
astyle formatting
2018-04-08 09:25:59 +02:00
Paul Fultz II
aed84abfd5
Extend valueflow comparison ops ( #1153 )
...
* Handle else clause when doing a compare
* Break early
* Fix bug in checking no return else
* Escape quotes
* Add equal sign
* Simplify the logic
2018-04-08 09:24:01 +02:00
Matthias Krüger
5a104cab6e
remove weird "#line 2" from valueflow.cpp
2018-04-06 23:26:08 +02:00
Daniel Marjamäki
3ad6c7ebce
Refactoring, use early continue
2018-04-05 08:21:43 +02:00
Paul Fultz II
b871c85b67
Improve valeflow analysis with comparison operators ( #1131 )
...
* Improve valeflow analysis with comparison operators
* Use simple match
* Dont add 0 on comparisons
* Check reverse comparisons
* Use nullptr
* Remove duplicate code tests
2018-04-05 06:51:31 +02:00
jrp2014
b6504c70ca
Improve constness
2018-04-04 21:51:31 +02:00
IOBYTE
5bc039b7da
Fix #6367 and #8439 (improve sizeof value flow support) ( #1132 )
2018-03-23 08:28:12 +01:00
Daniel Marjamäki
7699f6432b
Fixed #8288 (valueFlowGlobalVar: compound assignments)
2018-03-18 19:53:33 +01:00
Daniel Marjamäki
ec6133aea2
Fixed #8182 (False positive uninitvar - variable initialized in function in ternary expression)
2018-03-16 19:13:48 +01:00
Daniel Marjamäki
1628405869
Fix internal warning
2018-02-24 22:35:37 +01:00
Daniel Marjamäki
7701e4594a
ValueFlowBeforeCondition: Fix wrong value in do-while condition when there is a break in the loop body
2018-02-24 22:07:34 +01:00
Daniel Marjamäki
69b50b274c
Try to make Travis happy
2018-02-11 22:54:14 +01:00
Daniel Marjamäki
e62b9bdc77
Fixed #8348 (ValueFlow: wrong Uninit value with abort() in else-branch)
2018-02-11 22:14:44 +01:00
Matthias Krüger
f009cfc845
fix some typos found by codespell.
2018-02-04 20:53:43 +01:00
Daniel Marjamäki
c4caee6b18
Updated copyright year
2018-01-14 15:37:52 +01:00
Daniel Marjamäki
6fd157e93b
ValueFlow: Template arguments have 'possible' values
2018-01-11 14:22:27 +01:00
PKEuS
c8010fdf42
Fixed crash on garbage code ( #8307 )
2018-01-07 13:11:56 +01:00
Daniel Marjamäki
8fe4852b98
Refactoring, reuse and improve isVariableChangedByFunction()
2017-11-18 11:02:52 +01:00
Daniel Marjamäki
9191e6f112
Fixed #8246 (ValueFlow: known value, function pointer argument)
2017-11-17 23:04:54 +01:00
Daniel Marjamäki
4a9984d73b
Fixed #8233 (FP uninitvar found in bash:lib/readline/display.c)
2017-11-06 10:28:07 +01:00
Ayaz Salikhov
19af9bc216
Fix UB when converting float to int ( #984 )
2017-11-03 14:05:23 +01:00
Daniel Marjamäki
002f6679d5
Fix syntax error
2017-10-21 22:17:07 +02:00
Daniel Marjamäki
c4c76aa1ad
Use MathLib::bigint_bits
2017-10-21 22:08:34 +02:00
Ayaz Salikhov
64e61d28ba
Add an ability to use address sanitizer ( #979 )
2017-10-21 21:04:14 +02:00