Commit Graph

420 Commits

Author SHA1 Message Date
Daniel Marjamäki d2843b70ca misra; implement rule 10.7 2021-07-21 19:18:12 +02:00
Daniel Marjamäki fb8d6daf79 misra; implement rule 10.5 2021-07-21 15:25:01 +02:00
Daniel Marjamäki f5fe562050 misra; improved checking of 10.3 2021-07-21 10:56:17 +02:00
Daniel Marjamäki 4428efbd2b misra; improved essential type for composite expressions 2021-07-21 08:20:15 +02:00
Daniel Marjamäki b409d4a598 misra; implement rule 16.1 2021-07-20 20:40:42 +02:00
Daniel Marjamäki e72e59f934 misra; implement rule 12.4 2021-07-20 19:50:31 +02:00
Daniel Marjamäki 937146127a misra; fix essential type for integer literals 2021-07-20 18:27:49 +02:00
Daniel Marjamäki bc43bfcb73 misra; fix essential type for comparisons and logical operators 2021-07-20 16:50:43 +02:00
Daniel Marjamäki b320a092d0 misra; fix essential type for char literals 2021-07-20 16:39:59 +02:00
Daniel Marjamäki d467505696 misra; update essential type for variables 2021-07-19 17:12:24 +02:00
Daniel Marjamäki 657d530fa1 misra; implement rule 10.3 2021-07-19 14:54:17 +02:00
escherstair 2d57f60225
Misra: improve misra.py (#3343) 2021-07-19 14:29:53 +02:00
Daniel Marjamäki d1fe34e167 misra; implement rule 8.10 2021-07-18 21:18:07 +02:00
Daniel Marjamäki 5f548a4b6c misra; implement rule 8.9 2021-07-18 10:31:52 +02:00
Daniel Marjamäki 59c797c776 misra; implement rule 8.8 2021-07-17 23:38:29 +02:00
Daniel Marjamäki f44a82856f misra; implement rule 8.7 2021-07-17 22:36:03 +02:00
Daniel Marjamäki 77d8b714ea misra; implement rule 8.6 2021-07-17 21:24:53 +02:00
Daniel Marjamäki aa910d3c38 misra; implemented rule 8.5 2021-07-17 19:59:21 +02:00
Daniel Marjamäki e4ae4471e8 misra; implement rule 11.2 2021-07-11 20:55:54 +02:00
Daniel Marjamäki 754d648b0f misra; implement rule 11.1 2021-07-11 07:50:13 +02:00
Daniel Marjamäki 009c144455 misra; implement rule 8.4 2021-07-10 20:10:44 +02:00
Daniel Marjamäki 599a559351 misra; implement rule 5.9 2021-07-10 12:51:40 +02:00
Daniel Marjamäki c77235f12c misra; implement rule 5.8 2021-07-09 09:47:23 +02:00
Daniel Marjamäki db58952a33 Addons CTU; pass all filenames for whole program analysis in file instead of through command line 2021-07-09 08:33:07 +02:00
Daniel Marjamäki e05a9d7e65 misra: implement rule 2.5 2021-07-08 22:03:27 +02:00
Daniel Marjamäki 4ecf3ccd17 misra: implement rule 22.5 2021-07-07 23:00:12 +02:00
Daniel Marjamäki cf049cb759 misra: implement rule 5.7 2021-07-07 21:47:17 +02:00
Daniel Marjamäki 859e541661 misra: implement rule 2.4 2021-07-07 20:30:52 +02:00
Daniel Marjamäki 13d55c7060 misra; implement rule 2.3 2021-07-07 15:16:53 +02:00
Daniel Marjamäki 00a9671f46 misra: implement 8.1 2021-07-07 13:34:55 +02:00
Daniel Marjamäki 9172f2ab3b addons; add CTU infrastructure 2021-07-07 10:58:13 +02:00
Georgiy Komarov 81eabb5f61
addons: Fix arguments parser when running pytest (#3327) 2021-07-06 22:13:04 +02:00
Georgiy Komarov 426117a30d
misra: Improve warning messages for rule 8.2 when the missing arguments are on the next line (#3320)
This makes it easier for the user to find the violation.

Suggested in the forum: https://sourceforge.net/p/cppcheck/discussion/development/thread/801dc07e59/#a1a8/d3e9/c455/8915/747c/2525/0eb8/0f7d
2021-07-01 21:08:40 +02:00
Georgiy Komarov 10123b4ad2
misra: Emit more accurate warnings for unused arguments in rule 2.7 (#3314)
Make the MISRA addon emit extra warnings for unused arguments placed in
lines other than the function definition. This makes it easier for the
user to find violations.
2021-06-29 11:17:38 +02:00
Georgiy Komarov a2cb9f17c1
misra: Don't consider variadic arguments as the violation of rule 2.7 (#3315)
The MISRA 2012 standard does not say anything about variadic functions
in the definition of rule 2.7. Therefore, these cases should be
considered as false positives.
2021-06-29 08:46:35 +02:00
Georgiy Komarov 62dbe2eb2f
misra: Fix false positives for rule 8.2 (#3311)
Reported in the forum: https://sourceforge.net/p/cppcheck/discussion/development/thread/801dc07e59/?page=1&limit=25#a1a8
2021-06-27 22:57:50 +02:00
Georgiy Komarov 6432922c76
misra: Fix crash on rule 8.2 (#3310)
The example code that reproduces this crash:

```
int misra_8_2_o(
    const uint32_t a1,
    const uint8_t *const a2
)
{ return *a2 + a1; }
int misra_8_2_p(
    const uint32_t a1,
    const uint8_t *const a2
);
```

The unit test was not added because it looks like a typo and regressions
are unlikely.
2021-06-27 22:57:37 +02:00
Georgiy Komarov b89f5fbeff
misra: Fix 8.2 false positives (#3309)
* misra: Fix 8.2 false positives

Fix false positives in rule 8.2 that occurred in cases when we have a
function definition and declaration in the same file.

For example, the following code generated false positives before this
commit:

```
void f(uint8_t * const x);
void f(uint8_t * const x)
{ (void)x; }
```

We need to distinguish the declaration and the definition, so the dump
file generation routine was extended to keep token where the definition
of the function. The analysis in the addon also been improved.

Closes Trac issue: https://trac.cppcheck.net/ticket/10219
2021-06-27 10:51:32 +02:00
Georgiy Komarov 452c92494e
misra: Fix 8.2 false positives (#3306)
Type declaration on the next line is not allowed in rule 8.2. But we
need to make sure that the files of the checked files are the same.

Reported on the forum: https://sourceforge.net/p/cppcheck/discussion/development/thread/801dc07e59/#32c3/e90b/293e/39df/85b3/b821/e0c3
2021-06-25 16:06:29 +02:00
Daniel Marjamäki 04c9a8329a misra: Removed some rules from getCppcheckRules() because those do not exist 2021-05-29 09:23:33 +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
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
Georgiy Komarov fce3db8b7d
misra: Fixed a crash in rule 8.2 (#3208)
Due to incorrect indentation, we return "None" instead of an empty list,
which causes the crash.

The problem was reported on the forum: https://sourceforge.net/p/cppcheck/discussion/general/thread/e146b8d779/
2021-04-13 10:09:42 +02:00
Lars Even Almaas 9786f1c34b
Suggested implementation for rule 8.2 (#3169) 2021-03-25 08:25:43 +01:00
Daniel Marjamäki 170c8257b2 Revert "Small refactoring"
This reverts commit 103e0d883c.
2021-03-07 10:39:23 +01:00
Daniel Marjamäki 103e0d883c Small refactoring 2021-03-07 09:03:50 +01:00
Daniel Marjamäki ebf54ac53e Misra; Remove 12.4 because the check is not implemented properly 2021-02-25 22:11:13 +01:00
Oliver Stöneberg b472b4e65d
some Python cleanups based on PyCharm inspections (#2999)
* some Python cleanups based on PyCharm inspections

* test-helloworld.py: adjusted assert in test_addon_relative_path()
2021-01-31 14:27:11 +01:00
Armin Müller 0de0a954d2
Typos found by running "codespell" (#3042) 2021-01-12 20:48:25 +01:00
kskjerve d4860f500a
MISRA 9.2 to 9.5 (#2954) 2020-12-16 17:28:54 +01:00
Daniel Marjamäki a810678b83 Addons: handle inline suppressions internally in cppcheckdata 2020-12-05 11:37:09 +01:00
Daniel Marjamäki 649a754cfd Revert "Addons: handle inline suppressions internally in cppcheckdata"
This reverts commit 1ce78a1086.

There was regressions in handling of suppressions.
2020-12-04 18:05:47 +01:00
Ivar Andreas Bonsaksen 9029fff59d
Fixed #9993 (false positive: misra-c2012-9.2) (#2908) 2020-11-18 10:50:35 +01:00
Ivar Andreas Bonsaksen 0e7ec1eddf
Fixed #9988 (false positive: misra-c2012-9.2) (#2904) 2020-11-16 17:31:00 +01:00
kskjerve 4d3f76b63c
MISRA rule 9.2 The initializer for an aggregate or union shall be enclosed in braces (#2899) 2020-11-16 09:27:17 +01:00
Daniel Marjamäki c7f816f986 Misra refactorings 2020-11-13 07:21:34 +01:00
Lars Even Almaas 3a91b998d6
MISRA rule 10.2 Expressions of essentially character type in additions and subtraction (#2897) 2020-11-12 11:37:28 +01:00
Daniel Marjamäki 1ce78a1086 Addons: handle inline suppressions internally in cppcheckdata 2020-11-11 20:01:58 +01:00
Daniel Marjamäki 7e8839a991 Addons: Reuse cppcheckdata.simpleMatch 2020-11-11 14:24:55 +01:00
Lars Even Almaas 9d70926fcd
MISRA rule 15.4 Only one break/goto from iteration statement (#2892) 2020-11-09 15:11:08 +01:00
Georgy Komarov 9cbb09076c
misra.py: Fix R7.2 crash on va_args (#2886) 2020-11-05 23:54:12 +01:00
Lars Even Almaas c1212f823f
MISRA rule 7.2 Require 'u' prefix when using large unsigned integer constants (#2881) 2020-11-05 13:38:09 +01:00
Georgy Komarov 6f7f508967
misra.py: Fix 7.4 false positive (#2883)
Fix false positives for the function calls with "const pointer to const
value" arguments: https://trac.cppcheck.net/ticket/9967.

The variable.valueType.constness have same encoding as encoding as
ValueType::constness in Cppcheck.
2020-11-05 08:13:23 +01:00
Lars Even Almaas 05b804d126
MISRA Rule 7.4 Check if variables assigned as string literals are const (#2866) 2020-11-04 13:45:02 +01:00
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
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 9a943e7616 misra: rewrote rule 12.3 2020-09-06 11:33:37 +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
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
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
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
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 05b96d42e9.
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