Commit Graph

27031 Commits

Author SHA1 Message Date
keinflue 0a84ad874c
Fix case ranges with single quotes and escape sequences (#3248) 2021-05-08 11:24:07 +02:00
Georgiy Komarov 7a009fece0
misra: Add support for expected suppressions in header files in `-verify` mode (#3252)
This commit allows to specify expected suppressions in the included
header files. This is necessary to verify MISRA checkers, which make
requirements for header files. For example, Rule 8.2 requires adding
prototypes for each function to the header files.
2021-05-08 10:27:31 +02:00
keinflue bfa26b5a72
Fix FP leakNoVarFunctionCall with passthrough returns (#3249) 2021-05-08 10:26:10 +02:00
Daniel Marjamäki be95e2bf21 Fixed #10271 (AST; Token::astOperand2() cyclic dependency in static_assert) 2021-05-07 13:19:28 +02:00
keinflue c9a9b56e0e
Increase max AST depth and throw error if exceeded (#3250)
Co-authored-by: keinflue <>
2021-05-06 11:43:15 +02:00
Maksim Derbasov 14ea8d7e68
Align keywords with c++20 standard for CodeEditor (#3247) 2021-05-05 07:35:13 +02:00
Daniel Marjamäki b8de69489d Fixed #10079 (AST: switch does not have two operands) 2021-05-04 20:15:57 +02:00
Maksim Derbasov f0005665a8
Scratchpad using CodeEditor class (#3246) 2021-05-04 19:17:03 +02:00
Daniel Marjamäki 2f984b201a AST; Fix wrong AST for initializer list 2021-05-04 19:02:29 +02:00
Daniel Marjamäki 08184f4681 Fixed #10070 (FP warning: Logical disjunction always evaluates to true) 2021-05-04 13:47:09 +02:00
dummyunit 661ebd3a96
Fix AST for brace initialization after decltype() (#3245)
Currently sub-expressions like decltype(x){} break AST creation for
subsequent tokens in the whole expression. In some cases this triggers
validation checks in validateAst() and analysis on the file stops.
For example, code like this:
    int x = decltype(0){} ? 0 : 1;
currently produces internalAstError.

To fix the issue iscpp11init_impl() was changed to recognize { preceded
by decltype(expr) as a start of C++11 brace initialization expression.
2021-05-03 21:40:49 +02:00
Daniel Marjamäki 82636d4f07 AST: Fixed ast for a:🅱️:c.. 2021-05-03 20:33:03 +02:00
Daniel Marjamäki 70ab30e3c6 AST; Fixed problem with initializer list and cleanup of compileScope 2021-05-03 20:22:08 +02:00
Daniel Marjamäki 7fefdf2bf7 astyle formatting 2021-05-03 16:34:55 +02:00
keinflue f47fd20e14
Add test cases and improvements for PR #3240. (#3242) 2021-05-03 10:45:37 +02:00
Daniel Marjamäki cb8ee825fd AST; remove special handling of semicolon in if|switch as Tokenizer will simplify the code instead 2021-05-03 10:43:14 +02:00
keinflue 6b8029633f
Fix build warnings and checkcfg errors with musl and libc++. (#3244)
* Fix musl include warning.

* Fix test/cfg errors with musl/libc++.

* Use correct C++ include for PR #3244

Co-authored-by: keinflue <>
2021-05-03 09:39:33 +02:00
Daniel Marjamäki 1bce1cf83c astyle formatting
[ci skip]
2021-05-02 21:36:24 +02:00
dummyunit ac505afe69
Fixed #9729 (AST broken: lambda with noexcept keyword) (#3243)
The previous fix for the issue (43b58dbc9e) didn't seem to actually fix
it because it added a check for noexcept without a condition, but when
AST is created noexcept always has a condition due to simplification
from "noexcept" to "noexcept(true)" in Tokenizer::simplifyKeyword().
The issue from the ticket couldn't be reproduced neither on 43b58dbc9e
nor on the previous commit, so it is hard to tell whether the fix was
effective or not.

The issue appeared again after a refactoring of AST code in ac67049661.
Test added with the original fix was unable to catch that because it
used testAst() helper function which skips most simplification steps.

To fix the issue we now check for noexcept with a condition and add a
proper regression test that:
1. Uses tokenizeAndStringify() to ensure that all simplifications are
   performed before AST is created.
2. Parses the code snippet from the ticket, as having "if (cond)" is
   crucial to reproducing the original issue (internalAstError).

Also fix AST creation for lambdas that have both constexpr and mutable
keywords.
2021-05-02 21:34:28 +02:00
Daniel Marjamäki f7d0bf7a59 Refactoring; Reuse simplecpp::characterLiteralToLL 2021-05-02 13:44:37 +02:00
dummyunit da27159d7c
Fixed #9728 (Support function level try blocks) 2021-05-02 09:05:12 +02:00
keinflue d553df75c6
Fix FP unknownEvaluationOrder on __builtin_bswap*. (#3240) 2021-05-02 08:48:43 +02:00
Daniel Marjamäki 6f60c6d965 Revert "Refactoring; Reuse function in simplecpp"
This reverts commit dbe9eb2a27.
2021-05-01 19:54:14 +02:00
Daniel Marjamäki e1dd04c536 Fixed make checkcfg 2021-05-01 19:17:07 +02:00
Daniel Marjamäki e03ef93ed7 Fix compiler error 2021-05-01 18:57:10 +02:00
Daniel Marjamäki e6d1b44758 Revert "Remove unnecessary null check (#3213)"
This reverts commit 6d13975def.
2021-05-01 18:54:51 +02:00
Ken-Patrick Lehrmann 6d13975def
Remove unnecessary null check (#3213) 2021-05-01 18:51:51 +02:00
Daniel Marjamäki e78612d280 Refactoring; Use TinyXml methods to parse bool/int attribute values 2021-05-01 18:40:20 +02:00
Daniel Marjamäki dbe9eb2a27 Refactoring; Reuse function in simplecpp 2021-05-01 18:13:40 +02:00
Daniel Marjamäki 636387b31c AUTHORS: Added keinflue 2021-05-01 17:26:58 +02:00
keinflue 6541f52e61
Fix false positive invalidFunctionArg for zero arguments to calloc. (#3238) 2021-05-01 12:39:01 +02:00
Daniel Marjamäki a32d6257d5 Fix Cppcheck self-check, extra whitespace in match patterns 2021-05-01 12:15:54 +02:00
Daniel Marjamäki 0bd1b1c249 AUTHORS: Added DGarry82 2021-05-01 12:14:01 +02:00
Daniel Marjamäki 9b717b8835 Refactoring __attribute__ simplification 2021-05-01 11:39:26 +02:00
Daniel Marjamäki 07c1f28035 astyle formatting 2021-05-01 07:35:03 +02:00
DGarry82 d3035c246f
Attribute lists support (#3239) 2021-05-01 07:33:55 +02:00
Paul Fultz II 31e3e4d87b
Fix issue 10086: false positive: (style) constVariable: Variable 'x' can be declared with const (#3219) 2021-04-30 17:47:08 +02:00
Daniel Marjamäki f4e69b99d2 bump simplecpp 2021-04-30 17:41:59 +02:00
Daniel Marjamäki d2d2124238 Revert "Clang import; This experimental feature didn't "take off" much. After a lot of work we are still far fram the goal. I remove it now but don't rule out completely that it could ever be added again."
This reverts commit 207361b174.
2021-04-30 16:47:02 +02:00
Daniel Marjamäki 59ef06819a manual; Add chapter about cppcheck build dir 2021-04-29 19:52:25 +02:00
Robert Reif e1e822275d
fix daca2 paraview crash from uninstantiated recursive template (#3237) 2021-04-29 11:09:51 +02:00
Ken-Patrick Lehrmann 9aa131a12e
Remove unnecessary null check (#3215)
Spotted by coverity (as the condition in the `if` part `isArrayVar(tok)`
dereferences tok.
Tok can't be null here, because the condition in the `else if`on line
268 checks that there is a `%var%` following, and
`tok = Token::findmatch(tok->next(), "%var%");` simply gets this `%var%`
token.
2021-04-28 18:05:32 +02:00
keinflue d2184ac6a8
Fix UB on right-shift. (#3235) 2021-04-28 11:57:28 +02:00
Georgiy Komarov e1bfd369db
misra: Fix false positives for rule 7.3 (#3236)
Fix false positives for the identifiers that contain 'ul' in their names.

Reported on the forum: https://sourceforge.net/p/cppcheck/discussion/general/thread/c326538221/
2021-04-27 19:42:34 +02:00
Daniel Marjamäki bd97b8eb8a SymbolDatabase; Add variables when structured binding is used 2021-04-26 18:21:07 +02:00
Daniel Marjamäki 8aa9e448f5 Parser; Set varid for structured binding variables 2021-04-26 18:04:27 +02:00
Daniel Marjamäki 3a7979171c Set simplecpp std option 2021-04-26 16:32:44 +02:00
Daniel Marjamäki 659a03e754 Bump simplecpp 2021-04-26 16:25:39 +02:00
Daniel Marjamäki b798b99777 Parser; do not remove alignof and alignas in the same way 2021-04-26 11:44:08 +02:00
dummyunit b18e6f1e10
Fix varId assignment for uses of variables declared in the if condition (#3231)
Variables declared in the if condition (or in C++17 init-statement) are
visible not only in the if body but also in the else body. But logic in
Tokenizer::setVarIdPass1() handled such variables as if they were
declared in the if body.

As the result they were removed from variablesMap by the time the else
block was parsed and their uses in the else block were either given an
incorrect varId from variables in some outer scope or not given a varId
at all.

This then resulted in false positive unreadVariable errors for variables
declared in the if condition (or init-statement) and used only in the
else block.

Simplification from "else if ..." to "else { if ... }" was moved before
setVarId() to simplify detection for ends of blocks in if-else chains.
2021-04-26 07:38:03 +02:00