Commit Graph

10518 Commits

Author SHA1 Message Date
Daniel Marjamäki a4afcb5995 Revert "Fixed #8818 (AST broken: restrict)"
This reverts commit e7d61f399a.
2018-11-02 21:07:37 +01:00
Daniel Marjamäki 0cc4555337 Revert "Tokenizer: Do not remove 'constexpr'"
This reverts commit 2f400b40ba.
2018-11-02 21:07:24 +01:00
Daniel Marjamäki 2f400b40ba Tokenizer: Do not remove 'constexpr' 2018-11-02 20:32:12 +01:00
Daniel Marjamäki e7d61f399a Fixed #8818 (AST broken: restrict) 2018-11-02 20:28:49 +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 3798feecad TemplateSimplifier : Remove 'class|struct' in template arguments 2018-11-02 14:49:40 +01:00
rikardfalkeborn 869e4ba6ab Add check for return value of boolean function (#1451)
* Add check for return value of boolean function

The rule for converting an integer to a boolean is that 0 is mapped to
false and everything else is mapped to true. There is nothing wrong with
the following code (according to the standards):

    bool f()
    {
        return -1;
    }

and neither gcc nor clang will warn about it. However, it's a bit
confusing. This commit adds a check that warns when a value other than 0
or 1 is returned from a boolean function (similar to the existing check
that functions with boolean arguments are only passed 0 or 1). Since the
code is perfectly legal, set the severity to "Style".

* Use early continue and remove some braces

* Add testcase with multiple returns

* Avoid null pointer dereference in case of return without operand

* Skip lambdas

Add TODO-test cases that shows FPs when the return type of lambdas are
specified explicitly (this is a problem with findLambdaEndToken).

* Enable testcases
2018-11-01 11:08:16 +01:00
rikardfalkeborn 88008fedb1 findLambdaEndToken handle explicit type (#1458)
* findLambdaEndToken: Add tests

* Add handling of explicit return in findLambdaEndToken()

* Use AST in findLambdaEndToken()

* Fix ast when lambda is mutable
2018-10-31 12:36:08 +01:00
Paul Fultz II fafd0742d4 Fix FPs with return conditions (#1455)
* Fix 8815: FP with identical inner conditions

* Fix issue 8801: FP when not returning a bool

* Fix FP

* Add missing semicolon

* Move returnVar
2018-10-31 09:47:48 +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 8beb42cc90 astyle formatting
[ci skip]
2018-10-28 17:37:19 +01:00
Paul Fultz II 2b6cc33dc6 Fix issue 8757: Throw syntax error on invalid code (#1378)
* Fix issue 8757: Throw syntax error on invalid code

* Fix FP with lambda returns

* Remove double percent

* Check more keywords

* Skip preprocessor directives

* Check for valid PP directive

* Fix preprocessor check

* Dont check for preprocessor directives
2018-10-28 17:17:53 +01:00
Paul Fultz II f5811c6818 Fix issue 8732: Syntax error when using enable_if (#1453)
* Fix issue 8732: Syntax error when using enable_if

* Fix FPs

* Use simpleMatch
2018-10-28 17:16:31 +01:00
Daniel Marjamäki 06ede9c239 ValueFlow: handle x+=y for containers 2018-10-27 18:38:04 +02:00
IOBYTE adbbadec7f Fixed #8798 (template simplifier: wrong simpifications for namespaces) (#1452) 2018-10-26 14:20:13 +02:00
Kamil Dudka d206047b84 Fixed #8794 - Memory leak false positive triggered by !(x != NULL) (#1450) 2018-10-26 06:21:45 +02:00
Daniel Marjamäki 86782af43c Fix Cppcheck warning 2018-10-25 07:15:32 +02:00
Daniel Marjamäki 044c4b7fbb Refactoring: Use range for loop 2018-10-25 06:14:27 +02:00
Daniel Marjamäki b8e8b12783 Fixed #8797 (exprDependsOnThis handle method call in non-inline method) 2018-10-24 20:17:00 +02:00
Daniel Marjamäki 2348dcde6c #8801: Quick fix for false positives 2018-10-24 19:57:50 +02:00
IOBYTE ea4e6a60f7 Fix template simplifier from deleting the same declaration multiple times (#1449)
Found by running valgrind on testrunner. May fix #8808.
2018-10-24 19:32:37 +02:00
IOBYTE 0763fdbfad Copy template default argument values from forward declaration to declaration. (#1447)
It is possible to define default template parameter values in forward
declarations and not define any in the actual declaration.  Cppcheck
ignores forward declarations and only uses the default values in the
actual declaration so default values in forward declarations are copied
to the actual declaration when necessary.
2018-10-24 14:38:59 +02:00
Daniel Marjamäki be1ff268c0 Refactoring: Use range for loops 2018-10-24 11:29:15 +02:00
Daniel Marjamäki 2e4f317c0b Revert "Remove FIXME"
This reverts commit 749699c632.
2018-10-22 21:03:30 +02:00
Daniel Marjamäki 15160f1691 Fixed #8788 (AST Broken error from assigning lambda to variable) 2018-10-22 17:25:01 +02:00
Daniel Marjamäki 749699c632 Remove FIXME 2018-10-22 12:45:34 +02:00
Daniel Marjamäki dc38681a56 Remove FIXME in AST validation. Ticket #8749 2018-10-22 11:37:24 +02:00
Daniel Marjamäki c483bcb12b Fixed testrunner 2018-10-22 00:28:09 +02:00
Daniel Marjamäki f9b132e831 Tokenizer::simplifyTypedef: Fix bug with arrays 2018-10-21 21:15:34 +02:00
Daniel Marjamäki 64fbffc90d astyle formatting
[ci skip]
2018-10-21 20:28:46 +02:00
Paul Fultz II edde0eedaa Fix FP issue 8801: Condition 'a+b' is always true (#1444) 2018-10-21 08:04:00 +02:00
Paul Fultz II 2989c44f59 Enable checking duplicate expressions across associative operators (#1445)
* Enable checking duplicate expressions across associative operators

* Remove bitshift operators and check for streamRead
2018-10-21 07:09:20 +02:00
Daniel Marjamäki 14afc3fd3a Fixed #8796 (Tokenizer::simplifyCompoundAssignment: Wrong simplification of return) 2018-10-20 21:33:43 +02:00
Daniel Marjamäki 277e0f1a8f Fix Cppcheck error message 2018-10-20 15:28:34 +02:00
Daniel Marjamäki 29feaa5a51 Tokenizer: Avoid constant folding 2018-10-20 10:51:50 +02:00
Daniel Marjamäki d265a0d6ab Fixed #8798 (SymbolDatabase: Inner unnamed union) 2018-10-20 09:43:08 +02:00
Daniel Marjamäki e2ea8bc2b0 astyle formatting
[ci skip]
2018-10-20 09:28:28 +02:00
orbitcowboy 0858488825
insecureCmdLineArgs: Fixed FN in case strdup() copies argv[]. (#1438)
* insecureCmdLineArgs: Fixed FN in case strdup() copies argv[].

* Formatted the code. There are no functional changes intended.

* Changes due to review comments from Daniel.
2018-10-19 11:04:15 +02:00
rikardfalkeborn 402d0c565f Fix false positive: Invalid string argument with array (#1439) 2018-10-19 07:48:47 +02:00
Paul Fultz II 40cb9cb1bc Check conditions in return statements (#1411)
* Identify return conditions in multiconditions

* Improve error messages

* Check return statements are always true or false

* Add more tests for FPs

* Fix FP when returning const like variables

* Fix FP when returning pointers or classes

* Fix FP with member variable access

* Check non-local variables

* Use simplematch

* Check for null
2018-10-18 21:01:47 +02:00
Daniel Marjamäki 465db2dff7 Fixed #8786 (internalAstError on valid code with C style cast) 2018-10-18 20:17:23 +02:00
Daniel Marjamäki 4983a6a5dc astyle formatting 2018-10-18 20:08:32 +02:00
Daniel Marjamäki 58b21e3071 Refactoring: Reuse Token::expressionString() logic for finding right-most leaf in tree 2018-10-18 12:09:55 +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 58d1de5814 Expand the duplicate variable assignment warnings when the inconclusive flag is used (#1433)
* Warn for more duplicate var expressions when inconclusive is set

* Fix issue with missing function name
2018-10-17 06:57:33 +02:00
Igor 0a9be3e734 Improve STL iterators checking (#1380)
* Improve STL interators checking

* Improve error messages for container iterators from different scopes

* Mini refactoring

* Replace hardcoded pattern to ValueType::Type::ITERATOR

* Error messages improvements, more tests and refactoring

* Refactoring after code review

* Put getting operand data into separate function

* Update getErrorMessages and iterator errors ids

* Refactoring

* Fix error

* Refactoring, early return implementation

* Delete redundant code

* Tiny changes in comments
2018-10-17 06:36:51 +02:00
Daniel Marjamäki 1245a036f7 Add check for shadow variables 2018-10-16 20:17:27 +02:00
rikardfalkeborn f1074ea1ab Fix false positive: Invalid string argument with pointer to pointer (#1427)
If the address is taken inside an array, the address is not of a single
character, so do not warn about this.
2018-10-16 06:54:25 +02:00
IOBYTE 290563b964 Fix specialized template regression. (#1425)
* Fix specialized template regression.

Only check for instantiation of template being processed rather than
count of all instantiations.

* Add 2 more tests.
2018-10-15 19:35:26 +02:00
orbitcowboy a6e8270474
insecureCmdLineArgs: Fixed false negatives in case arguments are const. (#1419)
* insecureCmdLineArgs: Fixed false negatives in case arguments are const.

* Formatted the code, there are functional changes.

* Simplified matching as suggested by Daniel.
2018-10-15 10:05:43 +02:00
rikardfalkeborn 613dc19b68 #4241: Check for address of single character passed as string (#1381)
* #4241: Check for address of single character passed as string

Add a check that address of a single character is not passed as argument
to argument marked as strings (using strz). The check does not warn if
the address of a character with known value '\0'.

Since ValueFlow currently does not handle global constants (see #7597),
do not warn if the variable is global to avoid FPs when the address of
a global variable assigned to '\0' is passed to a function expecting a
string.

Remove comment in docs saying strz is unused.

* Change asdf to Hello world

* Add test of address to first element in string

* Add error reporting function to getErrorMessages

* Fix strings in test
2018-10-14 18:49:34 +02:00
IOBYTE 0a30768b59 Fixed #8693 (Template specialization: Constructor detected as normal … (#1418)
* Fixed #8693 (Template specialization: Constructor detected as normal function (functionStatic error))

Refactor template simplifier to remove the existing full specialization
function expandSpecialized and allow full specializations to use the
existing function expandTemplate.  The function expandTemplate was
modified to either expand the template like it originally did by copying
it or to modify the template in place.  Both instantiated and
uninstantiated full specializations are modified in place.  This also
fixes #8692 and probably other related tickets as well.

The function simplifyTemplates now tries twice to simplify templates so
more templates can be simplified.  We should try as many times as
necessary to find all possible templates.  We can't do that now because
uninstantiated templates are left unchanged.  It is relatively straight
forward to have the new code also expand in place uninstantiated
templates with their symbolic types but namespaces are not handled
properly (ticket #8671) and it would introduce regressions.

* Fix travis warnings.
2018-10-14 16:57:07 +02:00
Daniel Marjamäki 895772711a 1.85: Set version 2018-10-13 18:55:19 +02:00
Paul Fultz II 9cf092657c Skip some ast errors to avoid regressions (#1422)
* Skip some ast errors to avoid regressions

* Use simpleMatch

* Skip operator functions

* Add a test for issue 8788
2018-10-13 18:38:44 +02:00
Daniel Marjamäki 7833ade128 Updated copyright year 2018-10-13 18:20:31 +02:00
Daniel Marjamäki 936c627307 Fix --doc output. * must be escaped. 2018-10-11 13:59:21 +02:00
Daniel Marjamäki 7eb5ebe17e Fixed #7887 (User function 'search' is wrongly mixed with std function) 2018-10-10 17:35:53 +02:00
Daniel Marjamäki 25cbfe27cf Partial fix for #7887, Improved tokenizer simplification of 'using namespace std;' - do not simplify user functions 2018-10-10 14:28:53 +02:00
Daniel Marjamäki 053b0d1654 STL: enable inconclusive warnings with --inconclusive 2018-10-09 20:10:43 +02:00
alex babafd75e3 Added support for -U option to the GUI. 2018-10-09 15:05:05 +02:00
rikardfalkeborn 75caf8e4de Fix #8230: FP unknown evaluation order on comma expression in while clause (#1415)
The while part of a do-while loop looks almost like a function call, so
extend the check for function calls to ignore while-statements.

Note that there was only an FP when checking c-code, since the check is
disabled for c++-code. Therefore, make sure the test cases are run on a
c-file.
2018-10-09 14:44:01 +02:00
Daniel Marjamäki 20121b34d8 Fixed #7718 (False positive: out of bounds of already resized std::string) 2018-10-09 06:53:26 +02:00
Daniel Marjamäki aa58f41e6d Fixed #7152 (False positive for redundantAssignment after calling a lambda function) 2018-10-08 21:07:21 +02:00
PKEuS 86a1b84b0c Fixed handling of macros with known value defined in header file in configuration splitting (#8404)
Added proper unit test for configuration validation to ensure that it actually works when cppcheck is executed
2018-10-08 16:38:47 +02:00
orbitcowboy c312bbad78 Fixed a typo. There are no functional changes intended. 2018-10-08 13:58:21 +02:00
Daniel Marjamäki c3e6e7c338 Fixed #8664 (setVarId: Wrongly set varid for lambda argument) 2018-10-07 20:40:59 +02:00
Daniel Marjamäki f961324d45 Fixed #8735 (FP oppositeInnerCondition - regression) 2018-10-07 18:30:29 +02:00
Carlo Marcelo Arenas Belon d66c92edc3 Remove unused parameters for CheckOther::oppositeExpressionError (#1412) 2018-10-05 08:36:49 +02:00
Paul Fultz II 26a8435d76 Use knownConditionTrueFalse when is duplicate expression is true or false (#1410) 2018-10-05 06:00:24 +02:00
Paul Fultz II e170a45230 Enable followVar for opposite expressions (#1404)
Enable followVar for opposite expressions
2018-10-04 21:17:47 +02:00
orbitcowboy c98c7a2ebf suppressions: Avoid duplicate comparison. 2018-10-04 17:13:11 +02:00
Daniel Marjamäki a31db92918 Fixed #8669 (operator>> causes wrong style message) 2018-10-03 13:00:11 +02:00
Daniel Marjamäki de621eab99 Refactoring; use range for loop 2018-10-03 12:54:59 +02:00
Paul Fultz II 1fe1ec09a8 Reenable follow var for logical conjunction (#1400) 2018-10-01 14:40:03 +02:00
Paul Fultz II 2c91b95d2a Reenable followVar for multicondition (#1401) 2018-10-01 14:34:55 +02:00
Paul Fultz II 4598995564 Enable followVar for duplicate ternary expressions (#1406) 2018-10-01 14:31:06 +02:00
rikardfalkeborn b3fef7957a Fix FP with fclose after comma (#7525) (#1407) 2018-10-01 11:58:27 +02:00
Daniel Marjamäki 3a186b5bff astyle formatting 2018-10-01 11:53:32 +02:00
Paul Fultz II 4ed22f1ff8 Fix some FPs in mismatchingContainerExpression (#1402) 2018-09-30 14:49:58 +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
Daniel Marjamäki 9dccc4037b Fixed #8747 (Syntax error, AST broken (a = --*b)) 2018-09-27 19:26:08 +02:00
Daniel Marjamäki b79d829cfc Use for arithOperationsOnVoidPointer messages 2018-09-26 17:58:22 +02:00
orbitcowboy e25bf187ad Attempt to fix regression for pcre_free_study(). 2018-09-26 08:07:26 +02:00
IOBYTE 33b74a04ab Add union support to template simplifier. (#1398) 2018-09-26 06:23:12 +02:00
rikardfalkeborn 5e120b567c isVariableDeclaration: Handle pointer to const pointer (#1395)
isVariableDeclaration did not handle pointer to const pointer, or
pointer to volatile pointer. This resulted in FPs in examples like the
following:

    class Fred {
        public:
        const char *const *data;
        const char *const *getData() { return data; };
    }

where cppcheck would say getData could be static, since it didn't
recognize const char *const *data as a variable declaration.
2018-09-25 06:19:26 +02:00
Daniel Marjamäki ca5542131a Travis: Fix xml validation by readding the line attribute in <location>. 2018-09-25 06:14:26 +02:00
orbitcowboy 2f032d8fa7
Improved const correctness of local variables. (#1396)
* Improved const correctness of local variables.

* Running astyle [ci-skip].

* Removed duplicate 'const'-keyword.
2018-09-24 15:08:16 +02:00
orbitcowboy bdb136de02 PCRE: Fixed unintended message when HAVE_RULES=yes was set. 2018-09-24 09:00:09 +02:00
IOBYTE 01f9ce2c4a Improve debug printing of type qualification when declaration and definition are in different scopes. (#1394) 2018-09-24 06:40:20 +02:00
Paul Fultz II 5bebeec224 Fix issue 8775: Dont follow aliased variables (#1390) 2018-09-24 06:37:47 +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 6ceab1f245 New fix for #8771. Remove line attribute in <location> when there is no line. This is more 'proper'. 2018-09-23 17:27:38 +02:00
Daniel Marjamäki 83e8465d18 Fixed #8771 (Invalid line number on unmatchedSuppression) 2018-09-23 17:05:32 +02:00
Daniel Marjamäki 3a007cbcbf astyle formatting
[ci skip]
2018-09-23 17:04:52 +02:00
Daniel Marjamäki 7f255c9e6f Refactoring: Use range for loop 2018-09-23 17:02:54 +02:00
Daniel Marjamäki 7db671fee6 Suppressions::NO_LINE : fixed comparisons 2018-09-23 16:50:51 +02:00
Daniel Marjamäki afe09f4d7a Temporarily comment out the followVariable() handling 2018-09-23 16:03:18 +02:00
orbitcowboy 29d7872440
Improvements for PCRE API usage (HAVE_RULES=yes) (#1384)
* PCRE: added pcre_study to improve regex matching speed.

* PCRE: catch return values from pcre_exec and return an error message in case it fails.

* Formatted the code. There are no functional changes intended.

* PCRE: decode internal PCRE error messages.

* Integrating comments from PR.

* PCRE: Use pcre_study() only in case PCRE_CONFIG_JIT is defined.

* PCRE: Fixed potential resource leak. In case prce_compile worked, but pcre_study() returns an error, the allocated resources by pcre_compile() can be freed.

* Make travis happy.

* PCRE: Improved output message format.

* PCRE: Attempt to be compliant to older PCRE versions and fix travis build.
2018-09-23 14:27:46 +02:00
Simon Martin 6bde2445a6 Ticket #8632: Parenthesize ternary operator operands containing < to avoid wrongly thinking a template instantiation is met. (#1389) 2018-09-23 10:27:38 +02:00
Matthias Krüger f965e5873d checkstl: remove uused variable 'beginCondTok'
Was:
lib/checkstl.cpp:2022:30: warning: unused variable 'beginCondTok' [-Wunused-variable]
                const Token *beginCondTok = condBodyTok->previous()->link();
                             ^

also run dmake to update Makefile
2018-09-22 21:10:21 +02:00
Simon Martin 915acac0b8 Ticket #8734: Skip static member variables in CheckUninitVar. (#1388) 2018-09-22 16:52:34 +02:00
Paul Fultz II d43cd56afd Show line number when suggesting std::transform (#1385) 2018-09-21 10:38:30 +02:00
orbitcowboy a26ac4d266 Running astyle. There is no functional change intended. 2018-09-21 08:53:09 +02:00
Paul Fultz II 1e347f6cde Initial check for recommending algorithms (#1352)
Add initial check for loop algorithms
2018-09-19 18:58:59 +02:00
shikamu 83cb0b3394 --suppress on line 0 (#1354)
Fixed --suppress on line 0
2018-09-18 12:58:14 +02:00
orbitcowboy a812da2cf1 Formatted the code. 2018-09-17 17:16:32 +02:00
IOBYTE e9a44f70b2 Remove out of line member functions of instantiated template classes. (#1377)
* Remove out of line member functions of instantiated template classes.
2018-09-14 14:16:34 +02:00
Paul Fultz II 4e7ed9ea6e More robust checking for crashes in followVar (#1375)
More robust checking for crashes in followVar
2018-09-13 09:19:15 +02:00
Paul Fultz II eb07280075 Fix issue 8743: FP when derefencing iterators (#1376) 2018-09-12 17:33:53 +02:00
Paul Fultz II 90a29d986b Fix issue 8730: Dont follow variables with unknown symbols (#1374) 2018-09-12 17:30:18 +02:00
amai2012 9f5e648b9f Enhance debug output for AST syntax error (inspired by #8747) 2018-09-10 08:55:46 +02:00
Daniel Marjamäki 0dfedd977e CppCheck: Minor tweak. Do no clear internalErrorFound, instead ensure that it's not written upon suppression 2018-09-10 06:02:01 +02:00
Daniel Marjamäki 523a9c1c4a Fixed #8746 (Syntax error, AST broken (using a::operator=)) 2018-09-09 21:11:45 +02:00
Daniel Marjamäki 1bb1c4cc8e Use early continue 2018-09-09 20:58:30 +02:00
Daniel Marjamäki 404eb6c746 Fixed #8745 (Syntax error: AST broken (or)) 2018-09-09 16:41:06 +02:00
Daniel Marjamäki 772939476d Remove inconclusive warnings about reading empty stl container. We have better ValueFlow-based checking. 2018-09-09 11:25:04 +02:00
Paul Fultz II f4f3f81e8f Fix issue 8741: Require pure when following variables in isSameExpression (#1373) 2018-09-09 07:08:32 +02:00
Paul Fultz II fa40b821e6 Fix issue 8740: Add a pass to check for valid operators (#1372) 2018-09-08 21:10:34 +02:00
Daniel Marjamäki 509cb35168 astyle formatting
[ci skip]
2018-09-08 15:19:32 +02:00
tam do thanh 7ad09b44c3 Ticket 7792: Suppression both exit_code and syntaxError when call cppcheck suppressions (#1345) 2018-09-08 11:09:49 +02:00
Daniel Marjamäki d7de46f50e ValueFlow: Fix false positive for container size 2018-09-08 10:43:08 +02:00
Daniel Marjamäki 738fb1b23a Disabled CheckClass::checkCopyCtorAndEqOperator because of FP (#8388) 2018-09-08 09:14:02 +02:00
Daniel Marjamäki df9df70ba7 astyle formatting
[ci skip]
2018-09-08 09:07:59 +02:00
Paul Fultz II cb03b9883f Fix issue 8737: FP with identical inner condition due to followVar (#1371) 2018-09-07 20:16:38 +02:00
Paul Fultz II 5a2362b2a0 Fix issue 8738: Dont warn about multiconditions when value is known (#1369) 2018-09-07 15:02:34 +02:00
Paul Fultz II f7e7e9bd3c Fix issue 8736: Iterators to containers from different expressions (a.begin().x == b.begin().x) (#1370) 2018-09-07 07:08:02 +02:00
Paul Fultz II 2da958efb5 Fix issue 8722: Avoid duplicate messages due for followVar (#1367) 2018-09-06 06:55:36 +02:00
Paul Fultz II b46e25c18e Fix issue 8730: False positive: Opposite expression on both sides of && (#1366) 2018-09-05 18:07:01 +02:00
Simon Martin 1d85a78874 Ticket #8654: Properly setup links for variadic template bases. (#1357) 2018-09-05 14:10:56 +02:00
Paul Fultz II 08f301a0de Reenable followVar (#1363)
Reenable followVar
2018-09-05 05:53:33 +02:00
Daniel Marjamäki c6d43506b6 ValueFlow: Fix FP in switch 2018-09-04 20:28:48 +02:00
Daniel Marjamäki 3a8bdad20a Fixed #8232 (segmentation fault on valid C++ code in isOppositeCond()) 2018-09-04 18:10:31 +02:00
Daniel Marjamäki 5afb755a3c SymbolDatabase: Fix variable matching 2018-09-04 06:39:02 +02:00
Paul Fultz II 93be440f92 Fix issue 8709: crash with switch statement with followVar (#1362)
* Fix crash with switch statement

* Update comment
2018-09-03 19:54:14 +02:00
Paul Fultz II 0e5fabf4dc Dont follow volatile variables (#1365) 2018-09-03 19:51:48 +02:00
Daniel Marjamäki 756c1d8de7 Fixed #8341 (error:iterators not correct) 2018-09-02 21:04:45 +02:00
IOBYTE 7224ee27d9 Fixed #8122 (simplifyTemplates: constructor outside template class not simplified properly) (#1361) 2018-09-02 17:49:13 +02:00
Daniel Marjamäki cc402869a6 Fixed #8689 (False positive: containerOutOfBounds after function call) 2018-09-02 14:08:34 +02:00
Paul Fultz II ab55b9eccb Check for same expression in condition check to avoid duplicate messages (#1359) 2018-09-02 08:43:17 +02:00
IOBYTE 341dee4a07 Fixed #8725 (Template out of line function return type missing when instantiated.) (#1360) 2018-09-02 08:35:05 +02:00
Paul Fultz II 8353f94b93 Fix crashes in followVarExpression (#1358)
* Fix crashes in followVarExpression

* Add a regression test for issue 8717

* Skip reference declarations
2018-09-02 08:28:53 +02:00
Daniel Marjamäki 0a9d417266 add comments 2018-09-01 16:45:14 +02:00
Daniel Marjamäki 3cad3c901f Another patch to temporarily disable the followVariableExpression 2018-09-01 11:39:21 +02:00
IOBYTE 508e8c234b Fixed #8683 (Using deleted token with multiple template instantiations.) (#1353)
* Fixed #8683 (Using deleted token with multiple template instantiations.)

* Fixed #8321 (heap use after free: templatesimplifier)

* Add a flag to Token indicating that it has a pointer to it.

* Run dmake

* Fix one source of list pointers to deleted tokens.

Refactor TemplateSimplifier class to get access to template lists.
Remove many function parameters now that they are class variables.
Fix one source of list pointers to deleted tokens.
Add tests with no output to catch crashes.

* Run dmake again.

* Make 2 more functions private.

* Make requested changes.

* Missed one change request.

* Use TokenList rather than Tokenizer.

* Move TokenAndName constructor to cpp file so token.h is not needed in header file.
2018-09-01 11:26:10 +02:00
Daniel Marjamäki 12b7c9e597 Fix Cppcheck warning 2018-09-01 08:41:41 +02:00
Daniel Marjamäki a331206b44 Temporarily disable followVariableExpressions(), there are problems that should be fixed. 2018-09-01 08:32:06 +02:00
Daniel Marjamäki f388c77042 Fixed #8721 (Regression: False positive array index out of bounds) 2018-08-31 18:25:43 +02:00
Daniel Marjamäki c7e5176284 Fixed #8061 (Problems with handling of --project argument) 2018-08-31 16:06:52 +02:00
Armin Müller b9cd7368f5 Typos found by running "codespell" (#1355)
* Update astutils.cpp

* Update checksizeof.cpp
2018-08-30 19:51:39 +02:00
Daniel Marjamäki 7591616f43 Fixed #8710 (Update message duplicateExpression when operand is integer literal) 2018-08-30 18:28:34 +02:00
Daniel Marjamäki 27aae8d032 Fixed #8644 (crash (CheckBufferOverrun::checkGlobalAndLocalVariable): local function) 2018-08-30 10:04:07 +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 4378327c43 astyle formatting
[ci skip]
2018-08-27 13:48:46 +02:00
Paul Fultz II fc135e1087 Check if member function modifies the variable (#1350)
* Check if member function modifies the variable

* Check for const pointer

* Add test for const condition

* Add more null checking

* Add todo assert for FN
2018-08-27 11:09:09 +02:00
Simon Martin acb0b9f07e Ticket #8679: Add support for C++11 thread_local and GCC's (among others) __thread extension. (#1351) 2018-08-26 19:46:36 +02:00
Daniel Marjamäki ad0ebd8f1a astyle formatting
[ci skip]
2018-08-25 21:32:52 +02:00
Paul Fultz II a5f4c5d0eb Improve message for same expressions (#1349)
* Improve message for same expressions

* Update message
2018-08-25 14:25:31 +02:00
Daniel Marjamäki 4d0262fd0a astyle formatting
[ci skip]
2018-08-23 06:06:58 +02:00
Kamil Dudka 0ca6ab1a71 ErrorLogger: add {cwe} (#1341) 2018-08-21 13:58:19 +02:00
Paul Fultz II f79849f6ba Diagnose mismatching iterators used together in operators (#1343)
* Diagnose mismatching iterators used together in operators

* Fix fp getting iterator expression in function call
2018-08-21 06:34:30 +02:00
Daniel Marjamäki 866d198756 Fixed #8697 (noreturn output stream) 2018-08-21 06:32:33 +02:00
Daniel Marjamäki a30941d885 Refactoring; Use range for loops 2018-08-19 17:27:41 +02:00
Daniel Marjamäki 4d78a2e178 Fixed #7790 (Wrong order of <location> XML-elements for error duplInheritedMember) 2018-08-19 14:13:58 +02:00
Daniel Marjamäki 212af76367 astyle formatting
[ci skip]
2018-08-18 15:45:50 +02:00
Paul Fultz II fd49112196 Avoid duplicates in the error path (#1346) 2018-08-18 07:32:30 +02:00
Daniel Marjamäki 43233e72b2 Fixed #8691 (False negative for uselessAssignmentArg) 2018-08-17 19:56:36 +02:00
Daniel Marjamäki e442bc47b1 astyle formatting
[ci skip]
2018-08-17 19:55:21 +02:00
Kevin Kendzia c5ebf26f9f cppcheck.cpp: fix suppression of syntaxError (#1333)
* cppcheck.cpp: fix suppression of syntaxError

* test: add supression test for syntaxError while file read
2018-08-17 10:05:25 +02:00
Paul Fultz II bbf876256c Add error path to more diagnostics that rely on isSameExpression (#1342) 2018-08-17 09:25:07 +02:00
Sylvain Joubert 13617375df missingOverride: False positive with cv-ref mismatch (#1340) 2018-08-17 08:42:22 +02:00
Konrad Grochowski 0e70c8a916 Added '-' and '.' to allowed chars in error ids for suppressions. (#1338)
Those chars are used for example in misra.py
2018-08-17 08:20:39 +02:00
tam do thanh f33c09f1a7 Allow syntax "typedef 'typename' unsigned 'typename' (functon_name)()" (#1334)
* Allow syntax "typedef 'typename' unsigned 'typename' (functon_name)()" for some old libraries
https://trac.cppcheck.net/ticket/7792

* Unnecessary check of "tokOffset", match-function already checks if it is null

* add testcase ticket #7792: simplifyTypedef124
2018-08-16 14:30:28 +02:00
Daniel Marjamäki fc97a5b11c Uninitalized variables: Fixed false positive 2018-08-15 18:04:36 +02:00
Daniel Marjamäki 2f834c3c3b Fixed #8688 (False positive: containerOutOfBounds) 2018-08-13 21:27:29 +02:00
Paul Fultz II c5154286da Fix issue 8687: false positive with same expression (#1336) 2018-08-13 12:55:41 +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 be4ae66e36 Fix wrong message 2018-08-12 08:01:15 +02:00
Matthias Krüger a9ae897f8c checkstl: fix inconsistent-missing-override warning reported by clang.
Warning was:

lib/checkstl.h:57:18: warning: 'runChecks' overrides a member function but is not marked 'override' [-Winconsistent-missing-override]
    virtual void runChecks(const Tokenizer *tokenizer, const Settings *settings, ErrorLogger *errorLogger) {
                 ^
lib/check.h:67:18: note: overridden virtual function is here
    virtual void runChecks(const Tokenizer *, const Settings *, ErrorLogger *) {
                 ^
2018-08-11 21:33:44 +02:00
Daniel Marjamäki 0e30bdef9d containerAccessOutOfBounds: Fix FPs for maps etc 2018-08-11 18:57:21 +02:00
Daniel Marjamäki 811a71aa06 valueFlowContainerSize: Handle guard logic 2018-08-11 15:08:54 +02:00
Daniel Marjamäki f0c1d49abf Fix Cppcheck warning 2018-08-11 14:45:12 +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 1f427eda8f CheckStl: rewrite and refactor out of bounds checker 2018-08-11 11:40:48 +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 8032f64c15 Refactoring; Use range for loops 2018-08-10 10:04:10 +02:00
Daniel Marjamäki b707f6e476 Refactoring; use range for loops 2018-08-10 06:47:18 +02:00
Daniel Marjamäki 223a116f24 The checksum in analyzer info files will now depend on the suppressions 2018-08-09 09:27:26 +02:00
Daniel Marjamäki f2e7071922 Fix FP, conversion of char literal '\0' to boolean is not true 2018-08-08 19:04:10 +02:00
Daniel Marjamäki 1f1c44a04f Fixed #8677 (False positive: unused method) 2018-08-08 11:31:35 +02:00
Paul Fultz II 80290a15e0 Fix FP with duplicate assign (#1330) 2018-08-08 08:31:31 +02:00
Daniel Marjamäki c3a44ce56b astyle formatting
[ci skip]
2018-08-07 18:06:51 +02:00
Daniel Marjamäki 78df7f98dd Fixed #8674 (False positive: Method that returns const should not be const) 2018-08-07 18:06:14 +02:00
Paul Fultz II f603b529df Fix issue 8413: Condition is always false 'i=expr; if (i != expr) {}' (#1295)
* Follow variables when comparing same expression

* Remove assert include

* Dont follow function arguments

* Improve the checking to check more cases

* Add more tests

* Check if the variable is used inside a loop

* Follow both variables

* Only skip loops when variable is modified in scope

* Fix FP when followed variable is modified

* Dont follow arrays

* Skip pointer indirection

* Make recursive

* Improve checking more variables

* Fix test with sizeof

* Skip following operators

* Fix test when using sizeof

* Dont check every step

* Use early returns

* Update test to use a loop instead of conditional

* Add static

* Check variables are global

* Check local variables in another scope

* Fix issue with const pointers

* Distinguish between pointer indirection and multiply

* Use simple match

* Prevent crash with uniform initialization

* Use unary op and ast to detect pointer indirection

* Expand error message when expression do not match exactly

* Add errorpath to issameexpression

* Revert "Clarify warning message for 'Same expression on both sides of operator'"

This reverts commit 0e491b41a8.

* Check if the tokens are the same

* Report the operator and not the expressions
2018-08-07 09:32:16 +02:00
Daniel Marjamäki 1b933f4dd1 astyle formatting
[ci skip]
2018-08-05 22:40:21 +02:00
Paul Fultz II b839ad60dd Fix issue 6856: add checks in isOppositeCond when using == and < or > (#1298)
* Fix issue 6856: add checks in isOppositeCond when using == and < or >

* Move tests to testcondition

* Fix some more tests

* Fix test messages

* Remove the float check
2018-08-05 22:39:40 +02:00
Daniel Marjamäki ddbe4b89b5 Renamed --debug to --debug-simplified 2018-08-05 11:19:20 +02:00
Daniel Marjamäki bcdd58de0b astyle formatting
[ci skip]
2018-08-05 10:48:28 +02:00
Daniel Marjamäki 0e491b41a8 Clarify warning message for 'Same expression on both sides of operator' 2018-08-05 10:48:02 +02:00
Paul Fultz II ed197f235a Fix issue 4693: Diagnostic when using the same iterators to an algorithm (#1326)
* Fix issue 4693: Diagnostic when using the same iterators to an algorithm

* Update classinfo
2018-08-05 09:10:54 +02:00
rikardfalkeborn 710d7ce015 Add checks of log2 and log1p range (#1324)
* Add tests for log10{,f,l} valid arguments

* Add log2{,f,l} to checkfunctions

* Add log1p{,f,l} to checkfunctions

* checkfunctions: Simplify check for log function limit out of range

The conditions for negative and non-negative int and float were
identical so the call to isNegative can be removed and the if-statements
be simplified.
2018-08-03 12:14:39 +02:00
Daniel Marjamäki 0a66f5c4f9 astyle formatting
[ci skip]
2018-07-26 22:24:00 +02:00
Daniel Marjamäki e2a4b1706c Refactoring CheckStl::mismatchingContainers; Use AST 2018-07-26 22:23:37 +02:00
Daniel Marjamäki 86721f5b91 small refactorings 2018-07-26 22:08:05 +02:00
Daniel Marjamäki d471c27502 astyle formatting
[ci skip]
2018-07-26 22:03:49 +02:00
Paul Fultz II 0d35a96594 Improve checking of mismatch iterators (#1293) 2018-07-26 22:00:48 +02:00
Daniel Marjamäki 54e2726bf3 Fixed #8636 (Misleading verbose message if virtual method called from destructor) 2018-07-26 09:16:17 +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
firewave 01ceb9bae7 fixed issue 8661: Misleading error message when compilation database is not recognized 2018-07-25 16:26:25 +02:00
Daniel Marjamäki 58c91c4645 Revert "Refactoring endsWith utility function"
This reverts commit d300d1f61b.
2018-07-25 16:14:43 +02:00
Daniel Marjamäki f9a5a114bb astyle formatting
[ci skip]
2018-07-25 07:44:06 +02:00
Daniel Marjamäki d300d1f61b Refactoring endsWith utility function 2018-07-25 07:43:50 +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
lordylike 12e58c8521 fix ticket 8570: passedByValue with member initializer list and std::move (#1316)
* fix ticket 8570

allow member initializer list variables that are moved to be non-const

* review feedback

* replace tabs with spaces in test code
2018-07-22 15:01:18 +02:00
Daniel Marjamäki 77b653bf94 Clarify warnings when char literals are converted to bool in conditions 2018-07-21 18:40:06 +02:00
Daniel Marjamäki 417670d947 Clarify code with continue 2018-07-20 21:44:23 +02:00
rikardfalkeborn 30a8d953e3 Move sqrt{,f,l} argument checks to cfg file (#1313) 2018-07-20 20:56:39 +02:00
Daniel Marjamäki 7c4820e047 Rename Library::isargvalid() 2018-07-15 23:05:48 +02:00
rikardfalkeborn 491ee577c6 Support floats in valid config (#1297)
* Add tests for invalid ranges

* Refactor loadLibErrors

This reduces the amount of code slightly and will simplify adding
more tests.

* Handle empty valid field

Before this change, the sequence <valid></valid> in a config file would
result in a segmentation fault. Now an empty field results in the error
message:

cppcheck: Failed to load library configuration file 'mycfg.cfg'. Bad attribute value '""'

* Add support for valid for floating point arguments

Previously, it was not possible to add valid ranges to floating point
arguments since it only handled integers. This made ranges not work well
for floating point arguments since arguments were cast to integers
before the ranges were handled.

Fix this by using doubles instead of integers if the argument is a float.
Add some tests for this and make sure errors are printed with enough
precision (somewhat arbitrarily chosen).

Note that it is still only possible to add integer ranges (i.e. -1:1).

* Add support for floats in configuration valid range

Now that it is possible to handle decimal arguments, there is no reason
to not allow non-integer ranges. Take care to not allow broken
configurations.

* Move check to within if-clause

* Move asin{,f,l} and acos{,f,l} input checks to config file
2018-07-15 22:47:56 +02:00
Daniel Marjamäki 39857220ce Refactoring: Use range for loops 2018-07-15 15:08:35 +02:00
Daniel Marjamäki cc5f00c252 Refactoring; use range for loops 2018-07-15 15:03:08 +02:00
Daniel Marjamäki 518dd8bfa3 Refactoring: Use range for loops 2018-07-15 14:51:33 +02:00
Daniel Marjamäki 1c4fb47582 astyle formatting
[ci skip]
2018-07-15 14:45:33 +02:00
Daniel Marjamäki faea8e1c02 Refactoring: Use range for loops 2018-07-15 14:45:15 +02:00
Paul Fultz II 5d1fdf7958 Fix issue 7904: Handle double nots in isSameExpression (#1305)
* Fix issue 7904: Handle double nots in isSameExpression

* Skip checking double nots in assignments

* Use ast to check for double not
2018-07-15 11:30:02 +02:00
Daniel Marjamäki 60485df762 Refactoring; Use range for loops 2018-07-14 22:49:31 +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
Daniel Marjamäki d00e522856 Clarify the code with Token::isUnaryOp and Token::isBinaryOp 2018-07-14 13:01:24 +02:00
Daniel Marjamäki c9a2071420 Refactoring: Use range for loop 2018-07-14 12:28:57 +02:00
Daniel Marjamäki 0c84475aac Clarify code with Token::isUnaryOp() 2018-07-14 10:26:22 +02:00
Daniel Marjamäki 449c48f6a7 Refactoring: Use range for loops 2018-07-14 10:23:41 +02:00
Daniel Marjamäki c7b787888a Refactoring: Use range for loops 2018-07-14 10:09:12 +02:00
Daniel Marjamäki 7dda8e2a2d Refactoring: Use range for loops 2018-07-14 10:02:32 +02:00
Daniel Marjamäki eeda082a2f Refactoring: use range for loops 2018-07-14 09:54:52 +02:00
Daniel Marjamäki bb36adb432 Refactoring; Use range for loops 2018-07-14 09:49:03 +02:00
Daniel Marjamäki c60763bc14 Refactoring; Use range for loop 2018-07-14 08:18:10 +02:00
Daniel Marjamäki 5b1d96b346 Clarify code with Token::isUnaryOp() 2018-07-14 08:04:08 +02:00
Daniel Marjamäki 4429ee55c3 Refactoring; Use range for loop 2018-07-14 07:55:18 +02:00
Daniel Marjamäki 1dd647ae84 Refactoring; Use range for loop 2018-07-14 07:49:04 +02:00
Daniel Marjamäki d759015d99 Refactoring; Use range for loops 2018-07-13 23:51:22 +02:00
Daniel Marjamäki 594e07acaa Refactoring; Use range for loop 2018-07-13 23:45:34 +02:00
Daniel Marjamäki 58ac8a9982 Refactoring; Use range for loops 2018-07-13 23:43:03 +02:00
Daniel Marjamäki ed76f06ca7 Refactoring; use range for loop 2018-07-13 23:32:49 +02:00
Daniel Marjamäki b2403c36cd Refactoring; Use Token::isUnaryOp() to clarify code 2018-07-13 23:17:24 +02:00
Daniel Marjamäki 54cfdb731e Refactoring; Use Token::isUnaryOp() to clarify code 2018-07-13 23:12:20 +02:00
Daniel Marjamäki 2c90a83695 Refactoring; Use Token::isBinaryOp() to clarify code, use early continue in loop 2018-07-13 23:06:45 +02:00
Daniel Marjamäki a4fdef8d9e Refactoring; Use Token::isUnaryOp() to clarify code 2018-07-13 23:02:52 +02:00
Daniel Marjamäki 5712366a8f refactoring; use range for loops 2018-07-13 22:56:20 +02:00
Daniel Marjamäki 93903d96c4 Refactoring, use Token::isUnaryOp and Token::isBinaryOp 2018-07-13 18:52:03 +02:00
Daniel Marjamäki 435888f82e Refactoring; use range for loop 2018-07-13 16:57:17 +02:00
Daniel Marjamäki 4d52949be6 Refactoring: Use ranged for loop 2018-07-13 16:50:12 +02:00
Daniel Marjamäki e552737028 Refactoring: Use range for loop 2018-07-13 16:46:29 +02:00
Daniel Marjamäki 2c49732eb8 Added Token::isUnaryOp() 2018-07-13 16:40:32 +02:00
Daniel Marjamäki 2963522d5f Refactoring: Use ranged for loops 2018-07-13 16:40:15 +02:00
Daniel Marjamäki 2b125e013a Code refactoring, no functional change intended 2018-07-13 09:20:53 +02:00
Paul Fultz II 42f075c3fa Skip literals for always true/false (#1304) 2018-07-12 23:06:47 +02:00
Daniel Marjamäki b398398dec Fixed #8360 (false positive "Ineffective call of function 'empty()'") 2018-07-10 22:58:02 +02:00
umanamente 44416862c0 Fixed Visual Studio Natvis file after recent refactoring (#1299) 2018-07-09 08:27:26 +02:00
Daniel Marjamäki 03faa25d12 Conditions: Better handling of function calls 2018-07-08 15:58:04 +02:00
Daniel Marjamäki 24dd4c9c26 Restore code in checkVariableScope. Fixes false negative 2018-07-01 22:31:45 +02:00
Daniel Marjamäki 4c6270f9b2 Refactoring: use range for loop 2018-06-30 15:34:48 +02:00
Daniel Marjamäki 60ac463a79 CheckClass: Restore a few warnings about member initialization of classes 2018-06-29 22:54:12 +02:00
Daniel Marjamäki 61c56eda44 Tweak the CheckClass::constructors() check 2018-06-27 14:02:57 +02:00
Daniel Marjamäki 79664abf2a Refactoring: Use range for loop 2018-06-27 09:14:03 +02:00
Daniel Marjamäki 10e693a8c3 Revert "SymbolDatabase: Improved lookup of function calls"
This reverts commit 3c87d60d5d.
2018-06-26 23:14:12 +02:00
Daniel Marjamäki 3c87d60d5d SymbolDatabase: Improved lookup of function calls 2018-06-26 22:12:12 +02:00
Daniel Marjamäki c583fb9186 Revert "SymbolDatabase: Improved lookup of function calls"
This reverts commit e4a70f87e6.
2018-06-26 13:05:33 +02:00
Daniel Marjamäki e4a70f87e6 SymbolDatabase: Improved lookup of function calls 2018-06-26 11:38:45 +02:00
PKEuS 009287f912 Set version to 1.84.99/1.85 dev 2018-06-25 21:03:43 +02:00
Daniel Marjamäki 3155f15325 CheckClass: Use Variable::valueType() 2018-06-24 16:14:11 +02:00
Daniel Marjamäki 9fab15bb53 CheckClass: Use Variable::valueType() instead of Variable::typeStartToken 2018-06-24 15:41:16 +02:00
Daniel Marjamäki cb48aae594 buffer overrun: Remove bailout. There is no test case and I fail to produce false positives. 2018-06-24 09:50:55 +02:00
Daniel Marjamäki d0819e4792 Reuse isVariableChanged() in auto variables 2018-06-24 08:55:23 +02:00
Daniel Marjamäki cde63c7573 Use Variable::valueType instead of Variable::typeStartToken in auto variables 2018-06-24 08:25:19 +02:00
Daniel Marjamäki 2beeca3ca2 Refactoring; use early continue 2018-06-23 23:26:37 +02:00
Daniel Marjamäki 655a8b21b6 Fix false positive 'passedByValue' when address of argument is used 2018-06-23 23:25:06 +02:00
Daniel Marjamäki 697aee143f CheckOther: Use Variable::valueType() instead of Variable::typeStartToken 2018-06-23 16:52:40 +02:00
Daniel Marjamäki fc78530b3f CheckOther: Use Variable::valueType() instead of Variable::typeStartToken 2018-06-23 16:49:26 +02:00
Daniel Marjamäki 2a8296879c CheckOther: Use Variable::valueType() instead of Variable::typeStartToken 2018-06-23 16:42:36 +02:00
Daniel Marjamäki ee335e5151 Fix compiler error 2018-06-23 16:07:02 +02:00
Daniel Marjamäki 911020f601 Refactoring, use range for loop 2018-06-23 15:58:44 +02:00
Daniel Marjamäki d811a07aa3 CheckOther: Use Variable::valueType() instead of typeStartToken etc 2018-06-22 23:04:36 +02:00
Daniel Marjamäki d0614b9b36 varScope: Fix false negatives for references 2018-06-22 22:51:03 +02:00
Daniel Marjamäki d90c38802f Fixed Cppcheck warnings (variable scope can be reduced) 2018-06-21 06:54:56 +02:00
Daniel Marjamäki 439d4a4900 Use Variable::valueType() instead of Variable::typeStartToken() 2018-06-20 19:08:09 +02:00
Daniel Marjamäki 10fc070f44 SymbolDatabase: Better handling of type aliases in ValueType 2018-06-20 14:49:55 +02:00
Daniel Marjamäki b62c562a89 Try to make Travis happy 2018-06-20 14:13:04 +02:00
Sebastian 0b65a52224 Add some missing errors to --errorlist output. (#1292)
Partly fixes https://trac.cppcheck.net/ticket/7772.
2018-06-20 10:43:13 +02:00
Daniel Marjamäki 929725f3aa Code cleanup 2018-06-20 10:39:21 +02:00
Daniel Marjamäki b4cb2505c3 SymbolDatabase: Add Variable::valueType(). First step to reuse ValueType handling in Variable 2018-06-20 10:00:15 +02:00
Daniel Marjamäki eb978ee192 Refactoring: delete assignment operator 2018-06-19 14:00:50 +02:00
Daniel Marjamäki 9edcae97fc Fixed #8578 (Argument scope as global) 2018-06-19 08:50:32 +02:00
Daniel Marjamäki 13cf93a322 Rename private variable maxtime 2018-06-18 09:49:00 +02:00
Daniel Marjamäki 86872f81ba Refactorings in CheckMemoryLeak 2018-06-18 09:40:27 +02:00
Daniel Marjamäki 4ba9437bd5 Rename private member variables 2018-06-17 23:09:41 +02:00
Daniel Marjamäki 96fc8efb4b Refactoring: Use C++11 '=delete' to delete methods 2018-06-17 19:36:09 +02:00
Daniel Marjamäki 9717a5afad Rename private member variables 2018-06-17 19:24:40 +02:00
Daniel Marjamäki e962f57a99 Rename private member variables 2018-06-17 19:20:07 +02:00
Daniel Marjamäki a25461919c Rename private member variables 2018-06-17 19:04:06 +02:00
Daniel Marjamäki 2a495184d2 Rename private member variables 2018-06-17 18:58:27 +02:00
Daniel Marjamäki 965fcf9303 Rename private member variables 2018-06-17 18:55:41 +02:00
Daniel Marjamäki e90c04cff9 Rename private member variable 2018-06-17 18:43:54 +02:00
Daniel Marjamäki 19cf0d1fa4 Refactoring; use range for loop 2018-06-17 18:37:40 +02:00
Daniel Marjamäki ad4ce84cf7 Rename private member variables 2018-06-17 17:20:16 +02:00
orbitcowboy 0b74a90e75 symboldatabase: removed duplicate keywords in C++-keyword list. 2018-06-17 17:05:36 +02:00
Daniel Marjamäki aa17b1f79a Rename private member variables 2018-06-17 17:04:34 +02:00
Daniel Marjamäki 610b26bfbc Rename private member _platform_types 2018-06-17 16:58:28 +02:00
Daniel Marjamäki 074177fc6e Rename private member variables 2018-06-17 16:55:02 +02:00
Pavel Pimenov c25ab16f5d V817 It is more efficient to seek '\t' character rather than a string. errorlogger.cpp 448 (#1290)
V817 It is more efficient to seek '}' character rather than a string. errorlogger.cpp 484
V817 It is more efficient to seek '\r' character rather than a string. errorlogger.cpp 497
V817 It is more efficient to seek '\r' character rather than a string. errorlogger.cpp 528
V817 It is more efficient to seek ';' character rather than a string. suppressions.cpp 187
V817 It is more efficient to seek ';' character rather than a string. suppressions.cpp 188

full log: http://www.fly-server.ru/pvs-studio/cppcheck/
2018-06-17 16:39:28 +02:00
Daniel Marjamäki dbf89856c0 Renamed Library private member variables 2018-06-17 16:39:10 +02:00
Daniel Marjamäki fb8e970419 Rename _alloc 2018-06-17 16:32:08 +02:00
Daniel Marjamäki fa8911a7d2 Renamed _suffixes 2018-06-17 13:47:18 +02:00
Daniel Marjamäki 153838c254 Renamed _prefixes 2018-06-17 13:46:24 +02:00
Daniel Marjamäki 9f191cd2dc Renamed _blocks 2018-06-17 13:45:31 +02:00
Daniel Marjamäki fea58e5e54 Renamed _offset 2018-06-17 13:44:56 +02:00
Daniel Marjamäki 743dcff036 Renamed _start and _end 2018-06-17 13:44:10 +02:00
Daniel Marjamäki 0ca96f2a7d Renamed private member file0 2018-06-17 09:06:16 +02:00
Daniel Marjamäki 517d8f9684 Renamed private member tokenlists to mTokenLists 2018-06-17 08:58:56 +02:00
Daniel Marjamäki de0e22a1fb Renamed private member directives 2018-06-17 08:45:45 +02:00
Daniel Marjamäki c102638970 astyle formatting 2018-06-17 08:45:26 +02:00
Daniel Marjamäki f8e96307f7 Refactoring, use range for loop 2018-06-17 08:40:25 +02:00
Daniel Marjamäki 87b21f3e57 Renamed _terminated 2018-06-17 08:22:53 +02:00
Daniel Marjamäki bea6b32157 Renamed _enabled 2018-06-17 08:21:05 +02:00
Daniel Marjamäki 37bcec8804 Renamed _fileName 2018-06-17 08:19:10 +02:00
Daniel Marjamäki 8d66eecf47 Renamed _suppressions to mSuppressions 2018-06-17 08:16:37 +02:00
Daniel Marjamäki 7517371203 Renamed private member analyzerInfoFile 2018-06-17 08:11:48 +02:00
Daniel Marjamäki 9085373494 Rename private member fout 2018-06-17 08:09:59 +02:00
Daniel Marjamäki b12b7f93e4 Rename _symbolNames 2018-06-17 07:59:48 +02:00
Daniel Marjamäki d48876c3be Renamed _verboseMessage 2018-06-17 07:55:47 +02:00
Daniel Marjamäki 8d00c7ca81 Renamed _shortMessage 2018-06-17 07:54:50 +02:00
Daniel Marjamäki e8496f4fb5 Renamed _file and _info 2018-06-17 07:52:59 +02:00
Daniel Marjamäki fe0bd8ff6c Renamed exitcode to mExitCode 2018-06-17 07:43:25 +02:00
Daniel Marjamäki 6ff6f0ae45 Renamed cfg to mCurrentConfig 2018-06-17 07:40:13 +02:00
Daniel Marjamäki cb0bea1749 Renamed _simplify 2018-06-17 07:37:10 +02:00
Daniel Marjamäki b90d1bc020 Renamed member fileInfo to mFileInfo 2018-06-17 07:36:05 +02:00
Daniel Marjamäki c5e0576961 Renamed analyzerInformation 2018-06-17 07:31:34 +02:00
Daniel Marjamäki 54ba0e58c1 Renamed _useGlobalSuppressions 2018-06-17 07:29:07 +02:00
Daniel Marjamäki b992b4a4f0 Renamed _errorList 2018-06-16 23:31:16 +02:00
Daniel Marjamäki d9aeeb1d09 Renamed private member cpp to mIsCpp 2018-06-16 23:30:00 +02:00
Daniel Marjamäki 306b2a9810 Renamed private member defaultSignedness 2018-06-16 23:25:35 +02:00
Daniel Marjamäki 678e3271d4 Rename private flags member to mFlags 2018-06-16 23:11:45 +02:00
Daniel Marjamäki ac28ae5788 Renamed Token::_str 2018-06-16 23:03:15 +02:00
Daniel Marjamäki 33e718d59e Rename Timer::_str 2018-06-16 22:49:51 +02:00
Daniel Marjamäki 0e8a60f1ad Renamed _start 2018-06-16 22:43:25 +02:00
Daniel Marjamäki ce78245f38 Renamed _showtimeMode 2018-06-16 22:40:11 +02:00
Daniel Marjamäki 4b9c6a11a2 Renamed _stopped to mStopped 2018-06-16 22:34:50 +02:00
Daniel Marjamäki 4f34a5145f Renamed _clocks 2018-06-16 22:25:25 +02:00
Daniel Marjamäki 94c7e28835 Renamed _numberOfResults 2018-06-16 22:24:44 +02:00
Daniel Marjamäki 66785c238a Renamed _timerResults 2018-06-16 22:14:59 +02:00
Daniel Marjamäki 63e6d35cb6 Renamed _unnamedCount to mUnnamedCount 2018-06-16 22:09:18 +02:00
Daniel Marjamäki ef534c2d0d Renamed _codeWithTemplates 2018-06-16 22:03:04 +02:00
Daniel Marjamäki 5dc29a9a16 Renamed _configuration to mConfiguration 2018-06-16 21:57:48 +02:00
Daniel Marjamäki 598a984071 Renamed _typeSize to mTypeSize 2018-06-16 21:56:05 +02:00
Daniel Marjamäki 5e43366126 Rename members 2018-06-16 21:52:29 +02:00
Daniel Marjamäki 237314fb51 Rename _values to mValues 2018-06-16 21:45:53 +02:00
Daniel Marjamäki 0452c5a4e4 Renamed _bits to mBits 2018-06-16 21:43:44 +02:00
Daniel Marjamäki d468eca772 Renamed _valuetype to mValueType 2018-06-16 21:42:40 +02:00
Daniel Marjamäki 82169b6247 Renamed _originalName to mOriginalName 2018-06-16 21:40:25 +02:00
Daniel Marjamäki 15f7c26706 Renamed _blankTypes 2018-06-16 20:33:07 +02:00
Daniel Marjamäki 56126d6e2d Renamed _variableList to mVariableList 2018-06-16 20:31:47 +02:00
Daniel Marjamäki 759097301b Rename _link to mLink 2018-06-16 20:30:09 +02:00
Daniel Marjamäki e8a00a38ac Rename _scope to mScope 2018-06-16 20:29:17 +02:00
Daniel Marjamäki 7314fc7557 Rename _enumerator to mEnumerator 2018-06-16 20:27:49 +02:00
Daniel Marjamäki 3ca8372b37 Rename _variable to mVariable 2018-06-16 20:27:13 +02:00
Daniel Marjamäki 964841ba25 Rename _function to mFunction 2018-06-16 20:26:43 +02:00
Daniel Marjamäki 78974e9267 Rename _type to mType 2018-06-16 20:25:54 +02:00
Daniel Marjamäki fc6f17ed87 Rename _dimensions to mDimensions 2018-06-16 20:23:58 +02:00
Daniel Marjamäki 31f137f24d Renamed _fileIndex, _linenr, _col 2018-06-16 16:43:54 +02:00
Daniel Marjamäki a6e4663445 Renamed _progressValue to mProgressValue 2018-06-16 16:41:25 +02:00
Daniel Marjamäki aeea2e7427 Renamed _tokType to mTokType 2018-06-16 16:40:02 +02:00
Daniel Marjamäki 8e2b18a75a Rename _varId to mVarId 2018-06-16 16:38:50 +02:00
Daniel Marjamäki 23eb98d2ca Renamed Check::_name 2018-06-16 16:31:07 +02:00
Daniel Marjamäki 807fbfd318 Renamed _isC and _isCPP 2018-06-16 16:28:03 +02:00
Daniel Marjamäki d81fe83ca6 renamed _symbolDatabase to mSymbolDatabase 2018-06-16 16:25:27 +02:00
Daniel Marjamäki d08b6e02b7 renamed _files to mFiles 2018-06-16 16:23:55 +02:00
Daniel Marjamäki cc521bef99 renamed _tokensFrontBack to mTokensFrontBack 2018-06-16 16:22:35 +02:00
Daniel Marjamäki 26d58ddbb9 rename _astOperand1, _astOperand2, _astParent 2018-06-16 16:18:50 +02:00
Daniel Marjamäki 435aa70c3d rename _previous and _next 2018-06-16 16:16:55 +02:00
Daniel Marjamäki 363f4ca939 rename _flags to mFlags 2018-06-16 16:14:34 +02:00
Daniel Marjamäki 67b111f11e SymbolDatabase: rename _constness to mConstness 2018-06-16 16:13:26 +02:00
Daniel Marjamäki 5154eb10c6 SymbolDatabase: rename _access 2018-06-16 16:12:27 +02:00
Daniel Marjamäki 7dfd4f61a1 SymbolDatabase: rename _index 2018-06-16 16:11:40 +02:00
Daniel Marjamäki 79ffe1d4fc Rename _tokenizer, _settings, _errorLogger 2018-06-16 16:10:28 +02:00
Daniel Marjamäki 8209c4aebd SymbolDatabase: rename _start and _end 2018-06-16 16:03:36 +02:00
Daniel Marjamäki 311454669f SymbolDatabase: rename _name 2018-06-16 15:57:16 +02:00
Daniel Marjamäki 593f7eee38 Fixed #8624 (Crash below CheckOther::checkDuplicateExpression) 2018-06-14 22:39:26 +02:00
Daniel Marjamäki a21c05edfe 1.84: Set versions
[ci skip]
2018-06-10 22:21:57 +02:00
Daniel Marjamäki 45379a3aa6 Updated copyright year for modified files
[ci skip]
2018-06-10 22:07:21 +02:00
Daniel Marjamäki 3029606342 CheckClass: Fix Cppcheck warning about mismatching function parameters 2018-06-10 22:04:22 +02:00
Daniel Marjamäki b9d03d0e23 astyle formatting
[ci skip]
2018-06-10 21:59:24 +02:00
Paul Fultz II daacf27c2e Fix false positive from issue 8612 (#1285) 2018-06-10 00:05:23 +02:00
Daniel Marjamäki 03b2e0eee7 inline suppressions: treat arithmetic operators as start-of-comment 2018-06-09 22:50:51 +02:00
amai2012 db7d267c02 Refactoring: Add _ prefix to Token member variables (#1280) 2018-06-09 08:14:24 +02:00
Paul Fultz II 8d53bcfd63 Fix FP when using non-const members and also check return type of function (#1283) 2018-06-09 08:05:19 +02:00
Daniel Marjamäki 84f0a18053 passedByReference: avoid false positives for std::pair 2018-06-08 10:19:02 +02:00
Daniel Marjamäki 44c78d1770 passedByReference: avoid false positives for std::function 2018-06-08 08:40:14 +02:00
Daniel Marjamäki de09c117bf Fixed #8618 (False positive: shared_ptr is passed by reference by intention) 2018-06-07 22:39:21 +02:00
amai2012 f947b3b025 Fix some doxygen warnings 2018-06-07 08:33:32 +02:00
Daniel Marjamäki 1abc9008d8 Fixed #8573 (FP noCopyConstructor - derive from noncopyable class) 2018-06-06 16:02:25 +02:00
Sebastian 7c9b6d9bb0
checkother.cpp: Fix typo in symbol placeholder in error message. (#1276) 2018-06-05 10:24:19 +02:00
Daniel Marjamäki b9c1308a81 Fixed #8575 (false positive: longCastAssign) 2018-06-04 22:51:21 +02:00
Daniel Marjamäki 7b106c067a Fixed #8603 (SymbolDatabase: 2 scopes with same function) 2018-06-03 23:14:24 +02:00
Daniel Marjamäki df9b243227 Modernize: use ranged for loops in CheckNullPointer 2018-06-03 09:27:18 +02:00
Matthias Krüger 0771a81969 Revert "tokenlist::iscast(): save a few pointer dereferences."
This reverts commit e187fdb696.
2018-06-02 15:57:56 +02:00
rebnridgway d3b231214d TemplateSimplifier optimisation. measured time improvement for cryptopp/test.cpp is ~8.4s => ~8.35s 2018-06-02 13:49:14 +02:00
Matthias Krüger 558a2f0cc7 SymbolDatabase::createSymbolDatabaseFindAllScopes(): hoist _tokenizer->isC(PP) dereference out of loop. 2018-06-02 13:38:15 +02:00
Matthias Krüger e187fdb696 tokenlist::iscast(): save a few pointer dereferences. 2018-06-02 13:19:22 +02:00
Daniel Marjamäki 7163210f72 Fixed #8605 (Segmentation fault below TemplateSimplifier::simplifyCalculations) 2018-06-01 23:03:53 +02:00
Matthias Krüger be6c273e6b CheckBufferOverrun::checkScope_inner(): save a few pointer derefernces (NFC). 2018-05-31 12:28:34 +02:00
Daniel Marjamäki 02f9ab38b4 simplifyCalculations: Made this function ~30% faster when analysing lib/tokenize.cpp 2018-05-31 06:36:59 +02:00
amai2012 8d55d361ae #8602 Template default parameter without name yields syntax error 2018-05-30 17:09:31 +02:00
IOBYTE 7681bbf227 Fixed #8146 (false positive: enum initialized using class member initializer syntax in struct in struct) (#1270) 2018-05-30 15:40:16 +02:00
Daniel Marjamäki 4c9bde277a Refactoring: Use ranged for in TemplateSimplifier 2018-05-30 14:40:38 +02:00
Daniel Marjamäki f7148cbaa9 Refactoring: Renamed iterator 2018-05-30 14:33:55 +02:00
Daniel Marjamäki cc77a6aa62 Code refactoring 2018-05-29 22:41:37 +02:00
IOBYTE 3982c81394 Add support for C++ attribute nodiscard for functions. (#1269) 2018-05-29 21:43:56 +02:00
Daniel Marjamäki 14e60210c9 Optimize Tokenizer::setVarIdPass1 2018-05-29 18:41:05 +02:00
orbitcowboy 5861a3844a Running astyle [ci skip]. 2018-05-29 17:32:55 +02:00
orbitcowboy de66eedd54 Improved const correctness of local variables. 2018-05-29 17:33:43 +02:00
Daniel Marjamäki 7d4a80fbd2 astyle formatting
[ci skip]
2018-05-29 16:30:33 +02:00
orbitcowboy 33777c5b72 Improved const correcntess of local variables. 2018-05-29 13:24:48 +02:00
orbitcowboy b94e5ab9cb Fixed VS2017 C4101: unreferenced local variable. 2018-05-29 13:18:07 +02:00
orbitcowboy bf20aa2330 token.h: Added const-qualifiers to some functions. 2018-05-29 11:46:07 +02:00
Daniel Marjamäki d7dfa29864 Preprocessor: only throw errors upon request. 2018-05-28 14:11:59 +02:00
Daniel Marjamäki c2c43ce8a7 Code cleanup, use '= delete' 2018-05-28 12:44:18 +02:00
Daniel Marjamäki 02c8a1d61c Tokenizer::setVarIdPass1 optimization 2018-05-28 11:32:47 +02:00
IOBYTE 36f7585798 Fixed #8600 (false-positive/regression: confusion between copy constructors of internal classes and lack of explicit keyword) (#1266) 2018-05-27 10:53:34 +02:00
orbitcowboy 1914d5e630 Running astlye 2018-05-25 08:35:37 +02:00
rebnridgway 42a65c5160 Fix crash bug #8579 (#1238)
* Added declaration for deletePrevious function

* Added definition for deletePrevious function

* Fixed crash from deleteThis invalidating pointers

The crash was caused by deleteThis() invalidating the pointer to a constant variable usage.  This happened when a usage followed an assignment.  This fixes bug #8579.

* Added tokensFront to match tokensBack

This means deletePrevious can set the list's front if necessary.

* Initialised tokensFront in appropriate places

* Switched to using default Token constructor

* Switched to using Token default constructor

* Switched to using default constructor for Token

* Added missing argument to Token constructor

* Changed to use default constructor for Tokens

* Switched to using default constructor for Tokens

* Switched to using default constructor for Token

* Added new test for deleting front Token

Also made sure to use the correct constructor for Token in other tests.

* Syntax error

* Replaced tokensFront and tokensBack with a struct

This decreases the size of the Token class for performance purposes.

* Replaced tokensFront and tokensBack with a struct

* Added tokensFrontBack to destructor

* Reworked to use TokensBackFront struct

Also ran astyle.

* Reworked to use TokenList's TokensFrontBack member

* Reworked to use TokensFrontBack struct

* Reworked to use TokensFrontBack struct

* Reworked to work with TokensFrontBack struct

* Removed unnecessary scope operator

* Added missing parentheses

* Fixed syntax error

* Removed unnecessary constructor

* Default constructor now 0-initialises everything

This is safer for not using a temporary TokensFrontBack object, and doesn't use delegating constructors which aren't supported yet.

* Fixed unsafe null check

* Added missing explicit keyword

* Fixing stylistic nits

Removed default constructor as it has been superseded by the single-argument constructor with a default argument value.
Renamed listEnds to tokensFrontBack.
Fixed if statement that was supposed to be adding safety but would actually cause a crash if tokensFrontBack was null.

* Fixing stylistic nits

Removed default constructor and replaced it with a single-argument constructor with a default value.

* Fixing stylistic nits

Renamed _listEnds to _tokensFrontBack.

* Fixing stylistic nits

Renamed _listEnds to _tokensFrontBack.
2018-05-25 07:15:05 +02:00
orbitcowboy 9bf604c46c timer.h: Improved const correctness of local variable. 2018-05-24 17:07:40 +02:00
orbitcowboy d013cb2f0d library.h: Improved const correctness of some function arguments. 2018-05-24 17:06:20 +02:00
Daniel Marjamäki 2ffbb37cee modernize cppcheck.cpp, use range for loops 2018-05-22 23:22:46 +02:00
IOBYTE fc1d62fd45 Fixed #7406 (Tokenizer::simplifyTypedef: array typedef used as template parameter) (#1257) 2018-05-22 17:31:58 +02:00
umanamente a3b02d6ece Fixed #8262: false positive memleak (`shared_ptr` in function argument) (#1249)
* Fixed #8262.
checkleakautovar.cpp:
* added `isFunctionCall` (supports template functions)
* smart pointer check in `functionCall`
* updated test case

* Renamed "bracket" to "parenthesis"

* (#8262) Fixed broken test

* (#8262) Code review comments

* (#8262) Renamed `tokOpeningBr` to `tokOpeningPar`
2018-05-22 09:08:23 +02:00
IOBYTE 8320be203d Fixed #8258 (Incorrect diagnostics when using delegating consturctor with default values) (#1255) 2018-05-22 06:42:37 +02:00
IOBYTE 5c15cd3981 Fix DACA2 SymbolDatabase bailout; unhandled code for final class (#1253)
* Fix DACA2 SymbolDatabase bailout; unhandled code for final class

* Replace Match with simpleMatch
2018-05-21 21:23:21 +02:00
Paul Fultz II 406aa6cf1c Improve support of using a lambda as a deleter (#1246)
* Improve support of using a lambda as a deleter

* Use simple match
2018-05-21 08:22:18 +02:00
IOBYTE 42ed5a6b98 Fixed #8581 (Delegating contructor warns for unintialized variables) (#1250)
* Fixed #8581 (Delegating contructor warns for unintialized variables)

* Replace Token::Match with isStandardType
2018-05-20 22:58:05 +02:00
bwoester 9b28499412 Import BCB6 projects (#1245)
* added support for reading borland c++ builder 6 projects

* add: fetch sysdefines from project
add: start providing bcb6 predefines (WIP)

* configure all the internal defines for BCB6

* make sure define strings don't start with ';'

* improvements on bwoesters BCB6 project support

- improved `*.bpr` XML handling by reducing the number of loops
- added `const` where aplicable
- optimized compiler argument parser performance
- reformatted code with provided astyle config

* - undo looping (keep it the same as the other implementations)
- keep parsing of cflags simple and separate from the synonym cleanup (no need for micro optimization in this place)
- move input validation to FileSettings::setDefines
- re-run astyle

* use [] instead of at() when comparing characters
2018-05-20 18:19:20 +02:00
Daniel Marjamäki 2b14b71c93 Updated output when Cppcheck fails to find valid configurations 2018-05-17 10:27:05 +02:00
amai2012 7062df5d78 #8585 --check-config aborts due to unhandled simplecpp::Output exception 2018-05-17 08:59:10 +02:00
Matthias Krüger 2320034f4a fix -Winconsistent-missing-override warnings reported by clang 6.0. 2018-05-17 08:47:19 +02:00
Alexander Mai fe1b1d537e Fix compiler warning by useless semicolon 2018-05-16 21:33:26 +02:00
IOBYTE d567b878ba Fix template instantialion failure for qualified template type. (#1237) 2018-05-16 15:24:23 +02:00
IOBYTE ce50df8047 Fix override warnings. (#1234) 2018-05-15 16:37:40 +02:00
Daniel Marjamäki 6bd4bdb0f9 Updated 'noValidConfiguration' message. It should not write this message when there is no code. It should be possible to see the preprocessor errors otherwise it is hard to fix the configuration. 2018-05-15 15:42:54 +02:00
Daniel Marjamäki f7746e4fb6 Revert "Missing override specifier warning on a pure virtual function makes no sense. (#1230)"
This reverts commit 348eb1c5c9.
2018-05-15 10:48:34 +02:00
IOBYTE 348eb1c5c9 Missing override specifier warning on a pure virtual function makes no sense. (#1230)
This fixes a large number of false positives for cppcheck source code.
2018-05-14 23:08:40 +02:00
Daniel Marjamäki d8622ea5f8 simplifyCalculations: Removed redundant goback variable 2018-05-14 23:06:10 +02:00
Daniel Marjamäki 29dc42ff67 Removed unreachable code 2018-05-14 22:50:30 +02:00
PKEuS e8bc955023 Optimized Tokenizer::simplifyFunctionReturn(): Replaced nested loops by two consecutive loops; execute second one only if necessary. 2018-05-14 20:51:09 +02:00
PKEuS 20b2574da8 Fixed false positive unusedPrivateFunction caused by recent commit 2018-05-14 16:20:46 +02:00
PKEuS 0090ae5cf2 Optimization in CheckUninitVar::checkStruct(): Replaced expensive inner loop on all scopes by loop on child scopes for faster lookup for inner unions.
This speeds up checking of very large code files; for example, it reduces checking time for SQLite amalgamation by more than 20%
2018-05-14 15:48:57 +02:00
PKEuS c4b6beac4d Fixed calculation precedence warning introduced in recent commit 2018-05-14 15:24:32 +02:00
Matthias Krüger 4c8bb9ac6f fix a few typos 2018-05-14 13:11:59 +02:00
PKEuS 3d860e6f36 Bump simplecpp 2018-05-14 13:00:22 +02:00
PKEuS 090a178ed6 Refactorization in SymbolDatabase: Do not redundantly store name in FriendInfo, and store FriendInfo in vector instead of list 2018-05-14 12:18:59 +02:00
PKEuS 4d549553b0 Small optimization in checkmemoryleak.cpp: Allow passing literals to addtoken()
Ran AStyle
2018-05-14 10:15:50 +02:00
Paul Fultz II 7ef714b0c6 Fix FP with duplicate assignments by checking if the expression is unique (#1223)
* Fix FP with duplicate assignments by checking if the expression is unique

* Use array of pointers

* Reorder scope condition
2018-05-13 20:20:55 +02:00
IOBYTE 5c06d08bfb Fix many DACA2 SymbolDatabase bailout; unhandled code false positives (#1225) 2018-05-13 19:00:42 +02:00
PKEuS 513cdc144c Optimization: Save up to 2 of 3 token list iterations in Tokenizer::simplifyKeyword() 2018-05-13 10:12:50 +02:00
IOBYTE 9ee6068e20 Remove duplicate namespace aliases so they don't produce syntax errors. (#1222)
* Remove duplicate namespace aliases so they don't produce syntax errors.

DACA2 results showed new SymbolDatabase syntax errors when duplicate
namespace aliases were simplified improperly. The solution is to remove
them in the tokenizer when found.

* Add tests for deleting namespace aliases at end of token list.

* Use eraseTokens to delete multiple tokens at once.
2018-05-13 08:29:40 +02:00
PKEuS 723bacbf09 Fixed hang introduced in previous commit and further optimized Tokenizer::simplifyStaticConst(): Avoid redundant Token swapping 2018-05-12 21:35:54 +02:00
PKEuS a16e99c710 Optimization: Save 2 of 3 token list iterations in Tokenizer::simplifyStaticConst() 2018-05-12 19:19:48 +02:00
Simon Martin 16e1e1d8f9 Ticket #8550: Properly simplify "typedef class A B;". (#1224) 2018-05-12 10:20:33 +02:00
Daniel Marjamäki 98e3f373e9 Revert "Optimize usage of TemplateSimplifier::simplifyCalculations"
This reverts commit 3044612fe9.

I got a report about a significant slowdown for a code.
2018-05-11 21:26:28 +02:00
Daniel Marjamäki a3f1d28fa5 astyle formatting
[ci skip]
2018-05-11 21:25:41 +02:00
rebnridgway cf6e72b150 Optimised simplifyKnownVariables (#1205)
* Optimised simplifyKnownVariables

Changed the check for references to constant variables so instead of iterating through all tokens looking for references (which is very slow for large files), usages of each known variable are recorded so each usage can be checked for whether or not it is a reference.  Just checking known usages is a lot quicker than checking through all tokens.

* Fixed test error caused by incorrect code

* Fixes to constant variable simplification optimisation

Indexing variables by varId is easier than by Token pointer, but means we also have to store a reference to the constant variable Token in another collection.
Switched to using unordered_map over map as it has slightly better find performance.

* Fixed incorrect simplification behaviour

This should remove constant variables correctly and efficiently.  Requires additional functions, Token::deleteThisInPlace() and TokenList::front(Token*).

* Added setter for TokenList::first

This allows code that adds and removes Tokens from the list to do so without copying nodes into other nodes, which sometimes create difficulties.

* Added deleteThisInPlace function

This allows a token to delete itself without invalidating pointers to the node after it.  If this token is the first or last in a list the calling code will have to remember to change the list's front or back.

* Added declaration for deleteThisInPlace()

* Removed premature MatchCompiler optimisation

* Added and removed some functions

Added declaration for deleteToken(Token*) which deletes a single token from the list
Removed public front(Token*) because it broke encapsulation

* Implemented deleteToken(Token*) function

* Removed 'delete this' from deleteThisInPlace

* Switched to using safer function

TokenList::deleteToken is better than calling straight into Token::deleteThisInPlace because it doesn't call delete this and doesn't break the TokenList's encapsulation.

* Replace constant variables in reverse order

This fixes the problem where you have two constant value assignment statements in a row.  Replacing and deleting them in reverse order means we avoid the problem of deleteThis() potentially invalidating the pointer to the start of the next assignment statement

* Removed unneeded and unsafe deleteThisInPlace

* Removed unneeded and unsafe deleteThisInPlace

* Removed unneeded deleteToken

* Removed unneeded deleteToken

* Removed extra whitespace
2018-05-11 21:14:04 +02:00
Daniel Marjamäki ce30a3ca71 astyle formatting
[ci skip]
2018-05-11 14:49:31 +02:00
Daniel Marjamäki 3044612fe9 Optimize usage of TemplateSimplifier::simplifyCalculations 2018-05-11 14:48:59 +02:00
Paul Fultz II c520735009 Improve checking of size condition against empty to avoid FPs (#1213)
* Improve checking of size condition against empty to avoid FPs

* Add const and todo for reverse conditions
2018-05-11 10:22:06 +02:00
Daniel Marjamäki 1e7c1841f7 Fixed #8515 (Wrong info message about unmatched suppression) 2018-05-11 09:01:24 +02:00
Daniel Marjamäki 7b6ddc50ae astyle formatting
[ci skip]
2018-05-10 17:57:16 +02:00
IOBYTE 184537884f Don't remove the volatile keyword so we can properly overload functions. (#1218)
* Don't remove the volatile keyword so we can properly overload functions.

I fixed all the checks that had tests that use volatile.  There will
probably be more changes needed due to lack of test coverage for
volatile in some checks.

* Fix unused private function warning.
2018-05-10 07:40:01 +02:00
IOBYTE 5452c4dc4a Fixed #8560 (Symboldatabase lacks entry for C++11 overloaded member function) (#1217) 2018-05-09 20:16:08 +02:00
Daniel Marjamäki 129bdb2752 SymbolDatabase::createSymbolDatabaseSetTypePointers: Optimize ~90% 2018-05-09 13:48:55 +02:00
Daniel Marjamäki ab6167e3e6 TokenList::validateAst: optimised ~25% 2018-05-09 12:36:58 +02:00
Daniel Marjamäki ecccce0608 Tokenizer::setVarId: Made it ~5% faster 2018-05-09 10:25:29 +02:00
Paul Fultz II 0197343e0c Fix false positive when using null arithmetic with class type (#1214) 2018-05-09 09:06:49 +02:00
Paul Fultz II f5dbfce8ff Fix false positive with oppositeExpression when using binary op (#1211)
* Fix false positive with oppositeExpression when using binary op

* Simplify conditional
2018-05-08 20:43:57 +02:00
Daniel Marjamäki c266688784 Fix syntax error 2018-05-08 10:21:03 +02:00
Daniel Marjamäki 315dc2ad8a only show information message when information messages are enabled 2018-05-08 09:47:14 +02:00
IOBYTE 8b0b659965 Add support for namespace aliases and C++17 nested namespaces. (#1210)
* Add support for namespace aliases and C++17 nested namespaces.

These are implemented as tokenizer simplifications so changes are not
needed to the tokenizer and symbol database.

* Fix codacy warning.
2018-05-08 06:35:51 +02:00
Daniel Marjamäki 8e8919e906 Fix comment 2018-05-07 22:06:23 +02:00
Daniel Marjamäki 0bff08ca44 Fixed #1378 (#error macro makes unrelated errors undetectable) 2018-05-06 22:02:23 +02:00
Daniel Marjamäki 3b8a3aa4ba Fixed crashes in daca 2018-05-06 09:52:04 +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
IOBYTE 5d417bbfa1 SymbolDatabase: harden code for missing links (#1207)
* SymbolDatabase: harden code for missing links

Missing links for templates are common so check links before using them
to prevent crashes.

* SymbolDatabase: replace link check and single token match with match of two tokens
2018-05-06 08:23:07 +02:00
Daniel Marjamäki 858e055c0e ValueFlow: Wrote a few basic comments 2018-05-05 23:03:04 +02:00
Paul Fultz II 067d82f0ea Check for smart pointer release (#1206) 2018-05-05 18:06:49 +02:00
Daniel Marjamäki 4408628107 Fixed #8538 (SymbolDatabase: wrong parsing of noexcept) 2018-05-05 08:31:56 +02:00
Daniel Marjamäki 64b85b474c Fixed #8542 (False positive: noOperatorEq) 2018-05-05 07:46:58 +02:00
Daniel Marjamäki 7fb28b05f6 Check Class: Try to clarify the warnings for noCopyConstructor/noOperatorEq/noDestructor. 2018-05-04 15:39:23 +02:00
Daniel Marjamäki 99003c2084 CheckClass: Better handling of defaulted and deleted functions in the noCopyConstructor/noOperatorEq/noDestructor 2018-05-04 14:58:38 +02:00
Daniel Marjamäki f2bb7397b3 astyle formatting
[ci skip]
2018-05-04 14:57:45 +02:00
Paul Fultz II cac68c6b81 Fix FP when using - as a binary operator (#1201) 2018-05-04 07:58:30 +02:00
IOBYTE f94e9c5447 Fix #8540 (Syntax error involving forward-declared 'enum class') (#1203) 2018-05-04 07:56:20 +02:00
Daniel Marjamäki 59cc479855 Save bitfield bit counts 2018-05-02 20:55:11 +02:00
Daniel Marjamäki 920b553ebf astyle formatting
[ci skip]
2018-05-02 12:58:10 +02:00
Daniel Marjamäki 7dfbe7389b Clarify null pointer arithmetic message 2018-05-02 12:57:24 +02:00
Paul Fultz II f191a3e753 Improve checking of opposite expressions (#1199)
* Improve checking of opposite expressions

* Fix some formatting
2018-05-02 06:32:33 +02:00
Daniel Marjamäki b2343a2d4b Fixed #8518 (Clarify warning for a NULL pointer which is received by a function call parameter.) 2018-05-01 17:30:29 +02:00
Daniel Marjamäki 31148fdfed Fixed #8523 (Clarify warning: noConstructor) 2018-05-01 15:50:03 +02:00
Daniel Marjamäki 40b6f6b3dd CheckClass: Fix the noDestructor warning 2018-05-01 15:31:13 +02:00
Daniel Marjamäki 9710e819be CheckClass: Disable noDestructor for now, we need to handle new better 2018-05-01 09:26:03 +02:00
Daniel Marjamäki 42100fdf11 CheckClass: Better handling of non-copyable classes in the noCopyConstructor check 2018-05-01 08:33:23 +02:00
Sebastian f0646d3754 checkunusedfunctions.cpp: Fix files.txt parsing (#1197)
On Windows searching for the last colon finds the colon which is part of
the path of the source file (e.g. "C:/projects/a.cpp"). Thus the path is
saved incomplete. This fix searches for the second instead of the last
colon and uses the data after the second colon as the path of the source
file.
2018-05-01 08:09:11 +02:00
IOBYTE c3c1abd05e SymbolDatabase: improve checking of uninstantiated templates (#1196)
* SymbolDatabase: improve checking of uninstantiated templates

* Add bailout and debug warning for '>' token without a link in SymbolDatabase::findFunction()..

Don't crash on bad code simplification from tokenizer.
2018-05-01 07:32:19 +02:00
Daniel Marjamäki 73b41455dd CheckClass: If class has memory management it should have copy constructor, operator= and destructor 2018-04-30 23:13:33 +02:00
Daniel Marjamäki eb1571af81 Refactoring: use range for 2018-04-30 22:10:54 +02:00
Daniel Marjamäki fce7a0a128 dump: add Function::type 2018-04-30 16:52:51 +02:00
Daniel Marjamäki 7015fb097e SymbolDatabase::isFunction: better handling of return types 2018-04-29 15:35:31 +02:00
Daniel Marjamäki 45c4456c24 Tokenizer: Code cleanup 2018-04-29 15:05:13 +02:00
Daniel Marjamäki ff732e41ac SymbolDatabase: Remove unused Function constructor 2018-04-29 14:57:02 +02:00
Paul Fultz II e571e598b6 Fix false positive with inner conditions when using pointers (#1195) 2018-04-28 18:56:13 +02:00
Markus Elfring 521e3495b7 Adjustment for implementation of Token::insertToken() (#1194)
Three attributes are reset in this member function even if their values
are stored in the same token object.
Move a corresponding sanity check so that less assignments could be
performed eventually.
Link: https://trac.cppcheck.net/ticket/8532
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
2018-04-28 17:17:40 +02:00
Daniel Marjamäki ca8e19c96d SymbolDatabase: Refactor SymbolDatabase: variable list 2018-04-28 09:38:33 +02:00
Daniel Marjamäki 1a9e8c158d CheckClass::copyconstructors: Use library to determine if function is a allocation function 2018-04-27 23:20:04 +02:00
Daniel Marjamäki c80c44ab20 Refactoring: use range for loop, early continue 2018-04-27 23:04:48 +02:00
Daniel Marjamäki f336c2efe7 Refactoring; Renamed Scope::classStart and Scope::classEnd 2018-04-27 22:36:30 +02:00
Daniel Marjamäki ed79f300f0 Refactoring; use range for loop, use early continue/break 2018-04-27 22:18:26 +02:00
Daniel Marjamäki e6a37ec0b7 Fixed #8531 (false positive: (style) The function 'foo' overrides a function in a base class but is not marked with a 'override' specifier.) 2018-04-27 21:49:18 +02:00
Daniel Marjamäki 25599a76a7 Handle 'final' specifier better. 2018-04-27 14:57:43 +02:00
Daniel Marjamäki b830f462e6 Added missingOverride checker; Function 'f' overrides function in base class but does not have the 'override' keyword. 2018-04-27 11:12:09 +02:00
Daniel Marjamäki c7e5b941be Symbol database: Minor tweaks 2018-04-27 10:35:11 +02:00
Daniel Marjamäki 8304290f06 astyle formatting
[ci skip]
2018-04-27 10:29:27 +02:00
Daniel Marjamäki d15b945c9e SymbolDatabase::isFunction: Fix wrong detection function 2018-04-27 10:24:02 +02:00
Simon Martin 9fade65dbb Ticket #8281, #8417: Properly detect the end of "switch" statements to accept all legitimate uses of "case". (#1112) 2018-04-26 22:26:26 +02:00
Daniel Marjamäki 5384802e16 SymbolDatabase: Look for types in anonymous scopes 2018-04-26 17:55:04 +02:00
amai2012 55983e2a0b #8509 Uniform initialization ignored for iterator 2018-04-26 08:57:25 +02:00
Daniel Marjamäki d8634ca2a9 SymbolDatabase: Disable code for function pointers
This hopefully fixes all Travis crashes when running cppcheck:
[./test/Analysis/stack-addr-ps.c] (error) Internal error: Child process crashed with signal 11 [cppcheckError]
[./test/Index/complete-pointer-and-reference-to-functions.cpp] (error) Internal error: Child process crashed with signal 11 [cppcheckError]
[./test/SemaCXX/vararg-non-pod.cpp] (error) Internal error: Child process crashed with signal 11 [cppcheckError]
2018-04-25 18:48:26 +02:00
rebnridgway faf348306b Escaped filename, which can contain invalid xml (#1192) 2018-04-25 18:28:04 +02:00
Daniel Marjamäki e95c6e3038 Travis: Fix segmentation fault 2018-04-25 16:02:42 +02:00
Daniel Marjamäki bd54986017 SymbolDatabase: Refactoring parsing of ) ... in functions 2018-04-25 14:35:09 +02:00