444 Commits

Author SHA1 Message Date
Georgy Komarov
b87aaaac52
Fix and impove MISRA 6.1 and 6.2 rules (#2863) 2020-10-28 20:54:43 +01:00
Lars Even Almaas
79b9dd5345
MISRA Rule 6.1/6.2 Bit field check (#2861) 2020-10-27 16:00:19 +01:00
amai2012
2fa837c716
threadsafety shall not warn about const vars (in C++11) (#2847)
threadsafety shall not warn about const vars (in C++11) 
For C++03 a new id threadsafety-const was created.
2020-10-23 11:58:25 +02:00
Georgy Komarov
3944e70e02
misra.py: Treat enum constants as constant known at compile time (#2823)
C89 standard defines enum members as enumeration contants at ch.
6.4.4.3, and they are always known at compile time.

This commit fix false positives for rule 18.8 (and possible other rules
that check "constentess") with enumeration members.

Fix Trac#9913
2020-09-25 21:02:34 +02:00
Daniel Marjamäki
687b44dbb7 Token: add flag for splitted variable declaration with initialization 2020-09-09 16:22:47 +02:00
Daniel Marjamäki
6e4085f3d8 Misra: Write 12.3 warnings in structs/classes 2020-09-08 09:29:57 +02:00
Daniel Marjamäki
f3fa7a6f5e misra: updated test addons/test/misra/misra-test.cpp 2020-09-06 13:25:37 +02:00
Daniel Marjamäki
9a943e7616 misra: rewrote rule 12.3 2020-09-06 11:33:37 +02:00
Daniel Marjamäki
7969bf7ae8 Token: Add 'isSplittedVarDecl attribute 2020-09-06 11:02:22 +02:00
Georgy Komarov
4738da3d69
misra.py: Fix R12.3 FP on calling functions in function arguments (#2778) 2020-09-05 07:53:56 +02:00
Georgy Komarov
e21bdb985c
misra.py: Fix 12.3 FP for variables defined in headers (#2773)
When we include the header file with variables definitions, Cppcheck
will write `variables` entries with line numbers from the header to the
dump file.

If the line number in the header file and the source file are equal,
misra.py performs an additional check what leads to false positives.

Minimal example that demonstrates the problem:

`misra_fp.c`:
```c
void test_12_3_fp(void)
{
    //Initialize the events queue
    QEQueue_init(&me->deferred_event_queue, me->deferred_events_queue_buf, Q_DIM(me->deferred_events_queue_buf));
}
```

`misra_fp.h`:
```c

static const uint32_t timer_max_blocking_call_us;
```

This commit closes trac ticket 9874.
2020-09-04 20:58:32 +02:00
Daniel Marjamäki
c6d2e0fae1 Fixed #9830 (Addons should return 0 when success) 2020-08-29 07:44:32 +02:00
Georgy Komarov
3bae716fd4
misra.py: Fix 20.7 false positive for multi-character arguments
See: https://trac.cppcheck.net/ticket/9633#comment:3
2020-08-08 13:03:19 +03:00
Georgy Komarov
dc1faa71ed
misra.py: Fix false negatives in string concatenation for rule 20.7
This will fix Trac#9633
2020-07-24 07:15:40 +03:00
Georgy Komarov
fc504ed6c3
misra.py: Fix false positives on macro expansion
This will fix Trac#9634
2020-07-21 20:03:04 +03:00
Richard A. Smith
41a846d8a7 misra.py: Squelch duplicate violation messages
When checking multiple files if the same violation is encountered from
an included file then the violation is both displayed and counted in the
error summary.

Track each violation by location and error number and if the violation
has been previously encountered then do not report it again.
2020-07-19 08:42:35 -03:00
Daniel Marjamäki
33388217a5 new default branch is main 2020-06-15 20:04:57 +02:00
Carl-Oskar Larsson
2abf542838
Misra severity (#2674) 2020-06-08 15:58:17 +02:00
Georgy Komarov
90550d24c4
misra.py: Fix crash on volatile macro argument (#2654) 2020-05-21 08:34:28 +02:00
Ken-Patrick Lehrmann
a96a879b6d
Fix crash in addons/test/test-misra.py (#2652) 2020-05-20 16:02:13 +02:00
Georgy Komarov
61926ed7c3
misra.py: Fix false positive for rule 15.6 (#2631) 2020-05-07 16:54:27 +02:00
felwolff
b65d72aeb6
misra.py: Fix 5.1 and 5.2 FP for c99 (#2625) 2020-04-28 07:18:54 +02:00
Georgy Komarov
20b02bff30
misra.py: Fix 20.7 FP for struct members (#2624)
This will close Trac#9673
2020-04-27 09:10:58 +02:00
Daniel Marjamäki
75a369d217 cppcheckdata: Set Function.nestedIn attribute 2020-04-16 12:25:03 +02:00
amai2012
3be79aee98
Cure invalid constant
https://lgtm.com/projects/g/danmar/cppcheck?mode=list poined out this "implicit string concatenation"
2020-04-14 15:47:44 +02:00
fuzzelhjb
9267182d8c
False positive fix (#2593)
* only report cert-STR07-C for C11

* fix false positive for checking c89/c99 code with cert-STR07-C
2020-04-07 07:29:49 +02:00
Georgy Komarov
4e5a8fac4a
misra.py: Handle stdint.h essential types (#2555)
Add stdint.h essential types to misra.py checks. This will fix false
negatives for rules 10.6 and 10.8.
2020-02-27 11:28:48 +01:00
Armin Müller
75b1ade316
Typos found by running "codespell" (#2542) 2020-02-17 18:28:58 +01:00
Georgy Komarov
9155f3a83a
misra.py: Check switch-clauses in R15.3 (#2538)
* misra.py: Check switch-clauses in R15.3

* break on violation
2020-02-16 00:03:18 +01:00
Georgy Komarov
2138091fa3
misra.py: Fix rule 20.2 false negative (#2534) 2020-02-12 17:11:56 +01:00
Georgy Komarov
403a61bc11
misra.py: Handle spaces in directive arguments (#2532) 2020-02-11 20:59:11 +01:00
Daniel Marjamäki
099dd57eb8 Fixed #9625 (false negative: misra-c2012-13.1) 2020-02-11 18:00:41 +01:00
Georgy Komarov
583d5e5958
misra.py: Add standard library functions for C90 and C99 (#2524)
This is required to add additional analysis for some MISRA rules.

This commit improve R21.1 check and close trac ticket 9603.
2020-02-11 11:10:54 +01:00
Georgy Komarov
0ff23dbd0b misra.py: Handle more cases in Rule 20.3 check (#2529)
This commit add two additional cases for rule 20.3:

1. Support violations in the following format: `#include file.h`
2. Better multiline include directives and inline comments support.

See added test cases for examples.
2020-02-10 08:56:26 +01:00
Georgy Komarov
f438cc6105
misra.py: Fix rule 21.1 false positives (#2526)
According MISRA standard, rule 21.1 should hanlde define/undef
directives only. There are no mentions of other C identifiers in the
standard document.
2020-02-09 16:22:26 +01:00
Georgy Komarov
6d4eff46be
misra.py: Fix false negative for rule 20.4 (#2528)
Define different sets of reserved keywords for C90 and C99.
This will fix false negative for compliant example, defined in MISRA
document, and close trac 9506.
2020-02-09 10:46:13 +01:00
Georgy Komarov
5eaf437c44
misra.py: Fix R5.4 false positives with C99 (#2516)
* parser: Parse standards node at start event

This required, because we can loose data at the end event.

* misra.py: Fix 5.4 standard-dependent error

By default Cppcheck use C11 standard, so this change fix false positives
for rule 5.4 with C99.

* travis: force --std=c89 for misra.py
2020-01-31 23:38:41 +01:00
Georgy Komarov
86d0f62d36 misra.py: Fix 12.3 FP in initializer lists (#2489)
See: trac 9581
2020-01-15 09:55:59 +01:00
mlambacher
3ada7672f3 Fix potential typo: use token.next.linenr instead of token.linenr (#2483)
Also make use of defaultdict to minimize risk of similar typos in the future and to clean up the code
2020-01-09 19:31:18 +01:00
elfel19
a288ea3c1f improve misra analysis perf for misra_5_4, misra_5_5, misra_20_1 (#2329)
fix bad indent
2020-01-08 06:54:43 +01:00
Daniel Marjamäki
33c8b71467 Revert "addons; import cppcheckdata from local folder"
This reverts commit 05b96d42e9574db6472187b49b5a983d977733c7.
2019-12-30 17:30:17 +01:00
Daniel Marjamäki
05b96d42e9 addons; import cppcheckdata from local folder 2019-12-30 09:13:04 +01:00
Georgy Komarov
d977761e76 addons: Reduce memory consumption (#2395)
* addons: Reduce memory consumption

Parse dump files incrementaly using ElementTree.iterparse. Clean unused
resources during parsing.  This method is explained in following
article: https://www.ibm.com/developerworks/xml/library/x-hiperfparse/

Memory consumption was reduced about 30% (measured with mprof),
execution time increased about 5% (measured with time utility).
More description available in PR.

* Switch to lxml and update iterparse routines

Use lxml module instead default xml.etree. Lxml provides convenient
wrappers around iterparse method that accepts `tag` argument. That
easer incremental parsing routines to select specific tags from roottree
like `dump` and `dumps`.

Element.clear() method was replaced by `lxml_clean` because lxml
keeps additional information to nodes that should be removed.

Added note about large consumption RAM on large dump files.
This commit doesn't solve this problem completely, but provides a way
to improve current parser to add incremental Configuration serialization
later.

* Working on iterative parser

* Added iterative Configurations parser

* fix

* Fix varlist iteration

* make sure that standards node was loaded
2019-12-27 08:50:56 +01:00
Georgy Komarov
730ea4163b misra.py: Handle essential type categories for ternary operations (#2455)
This commit will add feature to detect essential type categories
for operators of ternary operation.

This fixes issues with rule 10.1 and close the following ticket:
https://trac.cppcheck.net/ticket/9543
2019-12-21 07:40:15 +01:00
Georgy Komarov
aadb35888f misra.py: Fix 12.3 FP (#2454)
This will close https://trac.cppcheck.net/ticket/9544
2019-12-19 15:55:51 +01:00
Georgy Komarov
d0dd200444 misra.py: Fix R12.3 false negative in variables declaration (#2453)
Make rule 12.3 check detect commas in the variables declaration code.
2019-12-19 08:36:10 +01:00
Daniel Marjamäki
7977bbf456 Revert "misra.py: Fix R12.3 false negative in variables declaration (#2431)"
This reverts commit 7ce8ae408ab464e743528e14893bda7e9c941c17.
2019-12-18 13:31:52 +01:00
Georgy Komarov
7ce8ae408a misra.py: Fix R12.3 false negative in variables declaration (#2431)
* misra.py: Allow executeCheck take multiple args

* misra.py: Fix R12.3 FN in variables declaration

Make rule 12.3 check detect commas in variables declaration code.

* Fix excluded lines

* Add support for global variables

* Fix FN when linenr from other file was excluded

* Add a few more tests

* Handle more cases

Handle additional cases to check commans in variables declaration
including:
* multiline variables declaration
* functions and structures initialized in the same line
* expanding macroses in initialization

* Fix FP in global struct initialization

* Add another test
2019-12-18 11:05:57 +01:00
Georgy Komarov
88a3b4c685 addons: Fix __repr__ methods (#2448)
This commit fixes __repr__ methods introduced in d538315268dd84440ddb6dc482672df095e19258. Fields that recursively links to other cppcheckdata objects was removed to avoid max recursion depth crash on printing.
2019-12-15 19:46:54 +01:00
Georgy Komarov
c46e44e39e misra.py: R14.2: Verify for loop counter modification (#2409)
* misra.py: R14.2: Verify for counter modification

Add additional check to detect modification of loop counter in loop
body. Related issue: https://trac.cppcheck.net/ticket/9490

Add small fix that treat all assignment operators defined in N1750
6.5.16 as has side affects. This will affects rules 13.1, 13.3, 13.5
and allow to catch some false negatives.

* Add tests for fixed FPs for R13.{1,5,6}

* fix

* use isAssignmentOp from cppcheck data

* remove unused set

* handle case with empty body or syntax error

* add test with outer variable

* Fix FP in nested loops, add tests

* Fix FP on outer variables

* Fixup false positives for not loop counters
2019-12-15 18:23:12 +01:00