Vector Help

Reference Manual for PC-lint® Plus

23 Revision History

For the latest information on PC-lint Plus, please refer to the news page on our website.

23.1 Version 2025

23.1.1 Highlights

PC-lint Plus 2025 includes several new featues and numerous improvements including:

23.1.2 Summary

New Features

PCLP-853

Added support for function attributes warn_unused_result and nodiscard

PCLP-1060

New message 9140 supports AUTOSAR M6-6-3

PCLP-2040

New message for use of delete on void pointers

PCLP-2061

Add new message 2721 and 9223 to support MISRA C 2012 AMD-1 Rule 21.19

PCLP-2458

New message 9197 supports MISRA C 2012 Rule 14.2

PCLP-2605

Reintroduced message 962 from PC-lint 9

PCLP-2837

Parallel builds with imposter are now supported

PCLP-2909

Template classes, functions, and variables can be deprecated

PCLP-2917

Added support for MISRA C 2012 Rule 12.4

PCLP-3419

New message 3980 supports MISRA C++ 7-5-3

PCLP-3522

New message 9189 helps support AUTOSAR A7-1-7

PCLP-3524

Add new message 1950 to support AUTOSAR Rule A12-1-5

PCLP-3530

New message 9241 supports AUTOSAR19 A5-2-6

PCLP-3535

Add new message 2506 to support AUTOSAR Rule A21-8-1 and CERT C Rule STR37-C

PCLP-3536

New message 9453 supports AUTOSAR A8-5-2

PCLP-3917

Add new message 2469 to support AUTOSAR M3-2-4

PCLP-3994

Add new messages 2507 to support MISRA C Rule 19.1

PCLP-4066

New fuv flag option

PCLP-4084

Diagnostic Accounting Feature

PCLP-4102

New message 3708 and 9508 support AUTOSAR Rule A3-3-2

PCLP-4107

New messages 9191 and 9192 supports AUTOSAR A6-5-2

PCLP-4108

New message 9193 supports AUTOSAR M6-5-4

PCLP-4109

New messages 9194 and 9195 supports AUTOSAR M6-5-5

PCLP-4110

New message 9196 supports AUTOSAR M6-5-6

PCLP-4111

Add new message 1803 to support AUTOSAR Rule A7-1-2

PCLP-4112

New message 1955 supports AUTOSAR Rule A7-1-5

PCLP-4114

Add new message 3717 to support AUTOSAR19 Rule A7-3-1

PCLP-4115

Add new messages 9220 and 9221 to support MISRA C++ 2008 Rule 7-4-3

PCLP-4116

New message 3780 supports AUTOSAR A7-5-1

PCLP-4117

Add new message 9206 to support AUTOSAR Rule A8-2-1

PCLP-4119

New message 3910 supports AUTOSAR19 A8-4-5

PCLP-4120

New messages 3715 and 3716 supports AUTOSAR19 A8-4-6

PCLP-4122

Add message 3915 to support AUTOSAR19 Rules A8-4-4 and A8-4-8

PCLP-4127

New message 9249 supports AUTOSAR M10-2-1

PCLP-4128

New messages 9242, 9243, 9244, 9245, and 9246 support AUTOSAR A11-0-2

PCLP-4129

New messages 3513, 3713, and 3913 supports AUTOSAR A12-0-1

PCLP-4130

Add new message 1947 to support AUTOSAR Rule A12-1-2

PCLP-4132

Add new message 1801 to support AUTOSAR Rule A12-4-1

PCLP-4134

Add new message 1424 to support AUTOSAR Rule A12-8-3

PCLP-4135

Add new message 1957 to support AUTOSAR Rule A12-8-6

PCLP-4136

New message 3714 and 9514 supports AUTOSAR A13-1-2

PCLP-4137

Add new messages 9266 and 9267 to support AUTOSAR Rule A13-1-3

PCLP-4139

Add new message 9239 to support AUTOSAR Rule A13-5-4

PCLP-4140

New messages 1804 and 1805 support AUTOSAR19 A14-5-1

PCLP-4141

Add new message 9248 to support AUTOSAR Rule A14-5-3 and MISRA C++ Rule 14-5-1

PCLP-4142

Add new message 9250 to support AUTOSAR Rule M14-6-1

PCLP-4145

Add new messages 9302 and 9303 to support AUTOSAR Rule A15-1-3

PCLP-4146

New message 3712 and 3912 supports AUTOSAR A15-2-1

PCLP-4147

New message 3433 supports AUTOSAR M15-3-3

PCLP-4150

New message 3548 supports AUTOSAR A15-4-3

PCLP-4151

Added support for AUTOSAR Rule A15-5-1 with new message 9470

PCLP-4152

New message 3904 supports AUTOSAR A18-5-4

PCLP-4153

Add new messages 3435 and 3436 and enable 3047 to support AUTOSAR19 Rule A18-5-9

PCLP-4155

Add new messages 3709 and 3710 to support AUTOSAR19 Rule A18-5-11

PCLP-4156

New message 3711 supports AUTOSAR 18-9-3

PCLP-4157

New message 3905 supports AUTOSAR A18-9-4

PCLP-4253

New message 2840 supports AUTOSAR M6-5-2

PCLP-4315

New message 9188 adds support for MISRA C 2012 AMD-3 Rule 18.9

PCLP-4325

New message 3537 supports AUTOSAR M9-3-1

PCLP-4395

Add new message 9222 to support MISRA C 2012 AMD 4 Rule 7.6

PCLP-4473

Added new message supporting MISRA C 2012 Rule 10.1

PCLP-4501

Add sub-option for stack usage to allocate variables at the start of the function

PCLP-4551

Commas are now optional when specifying multiple messages for -e(, –e(, -e{, and –e{

PCLP-4593

New message 2776 replaces 1776 for C modules

PCLP-4644

Add new messages 9277 and 9278 to support MISRA C 2012 Rule 5.8 and MISRA C 2012 Rule 5.9

PCLP-4645

Add new message 9279 to support AUTOSAR A2-10-4

PCLP-4798

Add new message 9155 to identify commented-out code

PCLP-4826

Support for MISRA C++:2023

PCLP-4842

Added new message 9184 to support MISRA C++ 2023 Directive 5.7.2

PCLP-4844

New message 9251 supports MISRA C++:2023 Rule 5.13.6

PCLP-4847

New message 9257 supports MISRA C++:2023 Rule 6.7.1

PCLP-4849

Add new message 1806 to support MISRA C++:2023 Rule 6.8.4

PCLP-4857

New message 9164 reports on uses of reinterpret_cast

PCLP-4859

New message 9161 supports MISRA C++:2023 Rule 8.2.9

PCLP-4860

New message 9207 supports MISRA C++:2023 Rule 8.3.2

PCLP-4861

Add new message 9256 to support MISRA C++:2023 Rule 10.1.2

PCLP-4863

New message 9253 reports on the use of bit-fields

PCLP-4864

Add new message 1953 to support MISRA C++:2023 Rule 13.3.2

PCLP-4865

New message 1956 reports on symmetric operators implemented as member functions

PCLP-4866

Added support for MISRA C++ 2023 Rule 17.8.1

PCLP-4869

Added support for MISRA C++ 2023 Rule 22.4.1

PCLP-4877

Add new message 3911 to support MISRA C++:2023 Rule 28.6.1

PCLP-4880

Add new message 3907 to support MISRA C++:2023 Rule 9.5.2

PCLP-4881

Add new message 9217 to support MISRA C++:2023 Rule 10.4.1

PCLP-4900

Add new message 9255 to support MISRA C++:2023 Rule 6.0.3

PCLP-4956

Explicit support for MISRA C:2023

PCLP-5089

Support for MISRA C:2025

PCLP-5100

Added Unused Suppressions Tool

Improvements

PCLP-960

Update 9103 to fully support MISRA C++ Rule 2-10-5

PCLP-1578

Emit function location for 9070

PCLP-2603

Re-enabled message 767

PCLP-2978

Assembly related errors are no longer emitted.

PCLP-3005

Messages 419 and 420 now also issued for non-buffer arguments

PCLP-3012

Messages 750, 1401, 1540, 1541, 1565, 1566, 1578, 1579, 1927 are now issued in a consistent order

PCLP-3058

Enabled support for MISRA 2004 Rule 20.3 and MISRA 2012 Directive 4.11

PCLP-3061

Added supplemental message for message 455

PCLP-3410

Support language extension specifying an explicit address using a colon

PCLP-3620

-efunc can now be used to suppress messages within special member functions and conversion operators.

PCLP-3648

Emit message 686 in response to suppression of message 322

PCLP-3716

Corrected representation of format string checking for wide-string functions

PCLP-3766

Message 9035 added as a way to support MISRA C 2004 Rule 1.1

PCLP-3922

Removing section "Differences from PC-lint 9" and documenting the default value of -vt_depth

PCLP-3937

Update message 9264 for MISRA C++ 2008 Rule 5-0-15

PCLP-3941

Added messages 2452, 2453, and 2455 as support mechanisms for MISRA C 2012 Rule 1.3

PCLP-3949

Improved built-in function semantics

PCLP-3957

Update MISRA C++ 2008 configuration template

PCLP-3971

Add -isystem and -Hincdir= to the list of defaults for –prefix-directory-options in pclp_config.py

PCLP-3973

Added support for MISRA C 2012 Directive 4.13

PCLP-3980

Variables marked with attribute unused are now exempt from message 438

PCLP-4012

Use of the __generic keyword no longer elicits errors when using IAR compiler configurations

PCLP-4016

Built-in function semantics for std::jthread

PCLP-4046

Do not emit message 1764 for universal reference parameter of template instantiated with a lambda

PCLP-4058

Include metrics that evaluate to a metric host/collection on the metric report

PCLP-4103

Added support for AUTOSAR19 Rule A5-0-4

PCLP-4105

Support for AUTOSAR Rule A5-1-2

PCLP-4123

Enable message 1764 to support AUTOSAR19 Rule A8-4-9

PCLP-4124

Add support for AUTOSAR19 Rule A8-4-10

PCLP-4126

Added support for AUTOSAR Rule M10-1-2

PCLP-4143

Message 4787 and 5630 have been moved to 163 and 164 respectively

PCLP-4154

Added support for AUTOSAR19 Rule A18-5-10

PCLP-4167

Improvements to the documentation of the section covering the utility pclp_config

PCLP-4206

Update size option extraction method for TI compiler configurations

PCLP-4323

Improved loop counter detection for message 850

PCLP-4327

Message 2467 will only report definitions

PCLP-4347

Clean up temporary IAR compiler output files when generating an IAR compiler configuration with pclp_config.py

PCLP-4374

Improve documentation of limitations on thread analysis messages during the second phase

PCLP-4380

Deprecated type names are now compared against fully qualified types

PCLP-4393

Support MISRA C 2012 AMD-4 Directive 5.2

PCLP-4394

Partial support for MISRA C 2012 AMD-4 Directive 5.3

PCLP-4404

Assistance for MISRA C 2012 AMD-4 Rule 22.14

PCLP-4406

Support MISRA C 2012 AMD-4 Rule 22.17

PCLP-4423

Update generic selection expression checks to consider type predicates

PCLP-4469

Add detail message parameter to 1940

PCLP-4475

Modify 9034 to consider the rank of essentially signed integer constant expressions

PCLP-4476

Update messages 9078, 9079, 9087, and 9295 to only report conversions involving object pointers

PCLP-4477

Message 9080 no longer emits while initializing an object containing pointers with 0

PCLP-4479

Update 1776 to support additional implied assignment contexts

PCLP-4480

Modify 9028 to account for operand rank

PCLP-4482

Category of MISRA C 2012 Rule 13.6 changed from Mandatory to Required

PCLP-4484

Modify message 533 to consider the current C language standard

PCLP-4485

Category of MISRA C 2012 Rule 17.5 changed from Advisory to Required

PCLP-4506

Added documentation of the ’c’ flag for the -size option.

PCLP-4507

Message 977 no longer emitted for some conditional-expressions

PCLP-4523

Expand message 1537 to support AUTOSAR M9-3-1

PCLP-4526

Added missing thread analysis semantic documentation

PCLP-4531

Improve documentation for the -h option

PCLP-4532

Documentation Improvement

PCLP-4537

Clarify that the –compiler-options option is not required for the IAR compiler

PCLP-4540

Deprecations of C++ types may omit the struct, class, union, or enum keyword

PCLP-4541

Fixed false positive 8516 for non-compliant file paths

PCLP-4554

Improved message descriptions for messages 810 and 423

PCLP-4579

Added version and copyright information to the PC-lint Plus executable on Windows

PCLP-4599

Updated pclp_config to provide a warning when suspicious include path parsing is detected

PCLP-4612

Enable support for AUTOSAR19 Rule A2-10-1 / AUTOSAR17 Rule A2-11-1

PCLP-4656

Support usage of __lint_assert in constexpr contexts

PCLP-4685

Improving the Documentation of the [+/-]libm Option

PCLP-4687

New Query functions for C++20 and C++23 features

PCLP-4688

Locker classes no longer need to have default constructors

PCLP-4700

Including a query example for tautological assignment

PCLP-4710

Soften message 9224 for test of integer literal zero

PCLP-4719

Improved support for MISRA C 2012 Rule 1.3

PCLP-4745

Add support for Keil uVision armclang compiler

PCLP-4768

Fallthrough attributes are now excused from message 9138

PCLP-4772

Citations are now rendered when viewing message descriptions using -help or -dump_messages

PCLP-4801

Improving the Integration of PC-lint Plus into Eclipse-based IDEs

PCLP-4802

Emphasize the effects of marking code as library on analysis

PCLP-4806

Better support IAR ARM compiler configurations for atomics

PCLP-4808

Added getValue query for StringLiteral AST nodes

PCLP-4850

Message 970 no longer emitted for postfix operator parameters

PCLP-4888

Harmonize emission conditions of messages 720, 820, and 9084

PCLP-4889

Message 9008 no longer emitted in template instantiations

PCLP-4899

Update description of message 606

PCLP-4904

Message 9436 now emitted for constant static data members

PCLP-4916

Thread Analysis message source locations can now emit base names

PCLP-4939

-deprecate options in coding standard configuration files no longer use deprecation commentary

PCLP-4947

Improve reporting of MISRA C 2012 AMD 4 Rule 22.18

PCLP-4959

Updated AUTOSAR append text to include the version

PCLP-4967

Use of coding standard configuration files represented in message 900

PCLP-4992

pclp_config now accepts command line arguments when invoked from another python module

PCLP-4993

Deprecate CryptDecrypt and mktemp in au-cwe.lnt

PCLP-5001

Corrected append text for CERT C Recommendation EXP05-C

PCLP-5002

Updated message description for error 52

PCLP-5019

Support GCC configurations using C++23 with the pclp_config.py tool

PCLP-5030

Add message 1765

PCLP-5035

Extend the fbl flag option to identifier lookups in dependent base classes

PCLP-5039

Added isOrdinary, isWide, isUTF8, isUTF16, isUTF32, isUnevaluated, and containsNonAscii queries for StringLiteral AST nodes

PCLP-5049

Add support for GCC’s assume attribute

PCLP-5056

Add section about PCLP_NO_LNT_VERSION_CHECK to the "Using PC-lint Plus in Safety Critical Applications" document

PCLP-5065

C and C++ language standards can now be specified with pclpvscfg

PCLP-5066

Improve rendering of paragraph separations for -help and -dump_messages

PCLP-5068

Add pclp_config option transformation for TI compilers defines

PCLP-5076

Added new language option flags in database of pclp_config

PCLP-5077

Informational message 2751 replaced with warning message 2541

PCLP-5078

Add project configuration support for Microchip compilers

PCLP-5122

Enhance message presentation when enabling MISRA C 2012 amendments

PCLP-5147

Use of MISRA guideline headline text

PCLP-5159

Updated the "Using PC-lint Plus in Safety Critical Applications" document

PCLP-5174

Message 1946 no longer emits for functional casts using curly braces or those resulting in a constructor call

PCLP-5177

Noted potential limitation when using pclp_config.py with a non-English locale

Bugs Fixed

PCLP-2135

Fix 9003 false negative

PCLP-3198

Fixed false positive 9045 for nested structures

PCLP-3213

Resolved false positive 9119 for functional style casts using brace initialization

PCLP-3390

Resolved false positive 9034 when true and false macros are used as macro arguments

PCLP-3734

Assumption that pointer may be null is now applied following a comparison against null

PCLP-3848

Resolve false negative 1774 for if, while, for, and switch statement condition and/or initializer variables

PCLP-3856

Fix 438, 838, 522, and 523 false positives related to lambda captures

PCLP-3867

Message hooks inappropriately executed for supplementals of suppressed messages

PCLP-3967

Functions named "random" or "rand" within user-defined namespaces are no longer reported by message 2461

PCLP-4010

Fix false positive 9049 within lambda body

PCLP-4182

Resolved false negative 9060 in long block comments

PCLP-4260

Correction of internal error 795D141F in thread analysis semantic processing

PCLP-4332

Removed claim about 605’s applicability in message 1537’s description

PCLP-4432

586 reports deprecated macros in a nested macro expansion

PCLP-4440

Memory leaks fixed

PCLP-4465

Fixed false negative for 1781 and 1940 when parameter is reference to pointer

PCLP-4466

Fixed false positive for 1781 and 1940 when parameter is reference to pointer

PCLP-4471

Potential crash when using defaulted virtual destructors in C++03 mode

PCLP-4487

Removed duplicate message 9436 when using an array function parameter in a template

PCLP-4509

Resolve false positive for 9128

PCLP-4555

Variable access information in thread analysis function reports issued in inconsistent order

PCLP-4558

Messages 550, 551, 552, 727, 728, 729, and 738 will now respect all unevaluated contexts

PCLP-4566

Thread Analysis messages issued in inconsistent order

PCLP-4571

Message 979, 1401, and 9175 locations have been fixed for out of line template class method instantiations

PCLP-4582

Duplicate 586 messages have been resolved

PCLP-4721

Limit the situations in which message 923 is enabled within au-misra3.lnt

PCLP-4742

Resolve false positive 757, 758, 759, 768, 769 and false negative 749, 751, 752, 753, 754 in macro expansion

PCLP-4760

Resolved crash for CXXRecordDecl’s getLambdaStaticInvoker, isProvablyNotDerivedFrom, and isVirtuallyDerivedFrom’ queries

PCLP-4761

Changed CXXRecordDecl’s isCLike and isDerivedFrom queries to return None for forward declarations

PCLP-4762

Correct return value for isLocalClass Query function

PCLP-4785

Eliminated some duplicated type deprecations

PCLP-4818

Resolve false positive 1550 in lambda parameter default argument

PCLP-4872

Remove CWE-398 category

PCLP-4912

Internal error when using the hasICEInitializer Query function on a variable without an initializer

PCLP-4937

Internal error when using the getBitWidthValue Query function on a bit-field with value-dependent width

PCLP-4957

Barr C rule 7.1.o not honored in the naming conventions

PCLP-4970

Fix hang when a using directive attempts to create a cycle in the strong type hierarchy

PCLP-4974

Resolve error messages related to enumeration template parameters with underlying character or Boolean types

PCLP-4986

Corrected message 1962 to be an Elective Note

PCLP-4987

Preprocessing-only mode now expands system headers

PCLP-5021

Corrected append text for CERT C rules

PCLP-5034

Added missing built-in function semantics for Qt’s QMutexLocker class

PCLP-5036

Resolved internal errors 19F5CC61 and 998C0E63 for constrained function template arguments

PCLP-5064

Correct default Visual Studio language standards

PCLP-5067

Internal error 499C50D3 when processing indeterminate mutexes

PCLP-5087

Change the suppression options used to enable the messages supporting MISRA C Rule 11.6

PCLP-5106

Removed message 754 and 768 for MISRA C Rule 2.8

PCLP-5113

Resolved false negative 818, 843, 844, 952, 953, 954, 1764, and 1803 for initializer lists

PCLP-5116

Resolved sporadic false negative 9012

PCLP-5176

Update support claim for MISRA C++ 2008 rule 0-1-4 and AUTOSAR17/AUTOSAR19 rule M0-1-4

PCLP-5190

Corrected append text for several CERT C guidelines

Known Issues

PCLP-939

Message 756 is disabled

PCLP-1039

Variable-not-accessed messages not issued for arrays

PCLP-2608

Message 522 incorrectly emitted for call to function that modifies object through pointer to const structure

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type

PCLP-3147

Messages 1579 does not work as expected

PCLP-3223

The undocumented +fil flag is not implemented

PCLP-3485

False positive message 9175 for lambda functions that modify local variables captured by reference

PCLP-3489

Messages 9128 may be incorrectly emitted within the instantiation of a template with a non-type template parameter

PCLP-3803

False positive 650 for shifted values

PCLP-3881

Message 2650 incorrectly reported for redundant portion of comparison operators

PCLP-3894

Messages 9131 and 9240 do not treat dependent qualified identifiers as primary or postfix expressions

PCLP-4161

False positives for Strong Type messages when using template parameters

PCLP-4299

False positive 587 and 650 for result of bitwise AND dependent on former sign bit of promoted value

PCLP-4740

Message 9079 incorrectly emitted for some equality operations in C mode

PCLP-4749

Messages 754 and 768 do not consider appearances in member designators as references

PCLP-5127

Message 9057 not emitted for ull or Ull suffixes

PCLP-5129

Message 9031 does not support expanded definition of composite expressions introduced in MISRA C:2023

AUTOSAR Summary

PCLP-4959

Updated AUTOSAR append text to include the version

PCLP-4888

Harmonize emission conditions of messages 720, 820, and 9084

PCLP-4612

Enable support for AUTOSAR19 Rule A2-10-1 / AUTOSAR17 Rule A2-11-1

PCLP-4523

Expand message 1537 to support AUTOSAR M9-3-1

PCLP-4380

Deprecated type names are now compared against fully qualified types

PCLP-4325

New message 3537 supports AUTOSAR M9-3-1

PCLP-4253

New message 2840 supports AUTOSAR M6-5-2

PCLP-4157

New message 3905 supports AUTOSAR A18-9-4

PCLP-4156

New message 3711 supports AUTOSAR 18-9-3

PCLP-4155

Add new messages 3709 and 3710 to support AUTOSAR19 Rule A18-5-11

PCLP-4154

Added support for AUTOSAR19 Rule A18-5-10

PCLP-4153

Add new messages 3435 and 3436 and enable 3047 to support AUTOSAR19 Rule A18-5-9

PCLP-4152

New message 3904 supports AUTOSAR A18-5-4

PCLP-4151

Added support for AUTOSAR Rule A15-5-1 with new message 9470

PCLP-4150

New message 3548 supports AUTOSAR A15-4-3

PCLP-4147

New message 3433 supports AUTOSAR M15-3-3

PCLP-4146

New message 3712 and 3912 supports AUTOSAR A15-2-1

PCLP-4145

Add new messages 9302 and 9303 to support AUTOSAR Rule A15-1-3

PCLP-4143

Message 4787 and 5630 have been moved to 163 and 164 respectively

PCLP-4141

Add new message 9248 to support AUTOSAR Rule A14-5-3 and MISRA C++ Rule 14-5-1

PCLP-4139

Add new message 9239 to support AUTOSAR Rule A13-5-4

PCLP-4137

Add new messages 9266 and 9267 to support AUTOSAR Rule A13-1-3

PCLP-4136

New message 3714 and 9514 supports AUTOSAR A13-1-2

PCLP-4135

Add new message 1957 to support AUTOSAR Rule A12-8-6

PCLP-4134

Add new message 1424 to support AUTOSAR Rule A12-8-3

PCLP-4132

Add new message 1801 to support AUTOSAR Rule A12-4-1

PCLP-4130

Add new message 1947 to support AUTOSAR Rule A12-1-2

PCLP-4129

New messages 3513, 3713, and 3913 supports AUTOSAR A12-0-1

PCLP-4128

New messages 9242, 9243, 9244, 9245, and 9246 support AUTOSAR A11-0-2

PCLP-4127

New message 9249 supports AUTOSAR M10-2-1

PCLP-4126

Added support for AUTOSAR Rule M10-1-2

PCLP-4124

Add support for AUTOSAR19 Rule A8-4-10

PCLP-4123

Enable message 1764 to support AUTOSAR19 Rule A8-4-9

PCLP-4122

Add message 3915 to support AUTOSAR19 Rules A8-4-4 and A8-4-8

PCLP-4119

New message 3910 supports AUTOSAR19 A8-4-5

PCLP-4117

Add new message 9206 to support AUTOSAR Rule A8-2-1

PCLP-4116

New message 3780 supports AUTOSAR A7-5-1

PCLP-4115

Add new messages 9220 and 9221 to support MISRA C++ 2008 Rule 7-4-3

PCLP-4114

Add new message 3717 to support AUTOSAR19 Rule A7-3-1

PCLP-4112

New message 1955 supports AUTOSAR Rule A7-1-5

PCLP-4111

Add new message 1803 to support AUTOSAR Rule A7-1-2

PCLP-4110

New message 9196 supports AUTOSAR M6-5-6

PCLP-4109

New messages 9194 and 9195 supports AUTOSAR M6-5-5

PCLP-4108

New message 9193 supports AUTOSAR M6-5-4

PCLP-4107

New messages 9191 and 9192 supports AUTOSAR A6-5-2

PCLP-4105

Support for AUTOSAR Rule A5-1-2

PCLP-4103

Added support for AUTOSAR19 Rule A5-0-4

PCLP-4102

New message 3708 and 9508 support AUTOSAR Rule A3-3-2

PCLP-4066

New fuv flag option

PCLP-4046

Do not emit message 1764 for universal reference parameter of template instantiated with a lambda

PCLP-3957

Update MISRA C++ 2008 configuration template

PCLP-3917

Add new message 2469 to support AUTOSAR M3-2-4

PCLP-3535

Add new message 2506 to support AUTOSAR Rule A21-8-1 and CERT C Rule STR37-C

PCLP-3530

New message 9241 supports AUTOSAR19 A5-2-6

PCLP-3524

Add new message 1950 to support AUTOSAR Rule A12-1-5

PCLP-3522

New message 9189 helps support AUTOSAR A7-1-7

PCLP-2909

Template classes, functions, and variables can be deprecated

PCLP-1060

New message 9140 supports AUTOSAR M6-6-3

PCLP-4142

Add new message 9250 to support AUTOSAR Rule M14-6-1

PCLP-4140

New messages 1804 and 1805 support AUTOSAR19 A14-5-1

PCLP-4120

New messages 3715 and 3716 supports AUTOSAR19 A8-4-6

PCLP-3536

New message 9453 supports AUTOSAR A8-5-2

PCLP-4798

Add new message 9155 to identify commented-out code

PCLP-4645

Add new message 9279 to support AUTOSAR A2-10-4

PCLP-3485

False positive message 9175 for lambda functions that modify local variables captured by reference

CERT C Summary

PCLP-5001

Corrected append text for CERT C Recommendation EXP05-C

PCLP-4593

New message 2776 replaces 1776 for C modules

PCLP-5021

Corrected append text for CERT C rules

PCLP-5190

Corrected append text for several CERT C guidelines

MISRA Summary

PCLP-4947

Improve reporting of MISRA C 2012 AMD 4 Rule 22.18

PCLP-4904

Message 9436 now emitted for constant static data members

PCLP-4900

Add new message 9255 to support MISRA C++:2023 Rule 6.0.3

PCLP-4889

Message 9008 no longer emitted in template instantiations

PCLP-4888

Harmonize emission conditions of messages 720, 820, and 9084

PCLP-4881

Add new message 9217 to support MISRA C++:2023 Rule 10.4.1

PCLP-4880

Add new message 3907 to support MISRA C++:2023 Rule 9.5.2

PCLP-4877

Add new message 3911 to support MISRA C++:2023 Rule 28.6.1

PCLP-4869

Added support for MISRA C++ 2023 Rule 22.4.1

PCLP-4866

Added support for MISRA C++ 2023 Rule 17.8.1

PCLP-4865

New message 1956 reports on symmetric operators implemented as member functions

PCLP-4864

Add new message 1953 to support MISRA C++:2023 Rule 13.3.2

PCLP-4863

New message 9253 reports on the use of bit-fields

PCLP-4861

Add new message 9256 to support MISRA C++:2023 Rule 10.1.2

PCLP-4860

New message 9207 supports MISRA C++:2023 Rule 8.3.2

PCLP-4859

New message 9161 supports MISRA C++:2023 Rule 8.2.9

PCLP-4857

New message 9164 reports on uses of reinterpret_cast

PCLP-4850

Message 970 no longer emitted for postfix operator parameters

PCLP-4849

Add new message 1806 to support MISRA C++:2023 Rule 6.8.4

PCLP-4847

New message 9257 supports MISRA C++:2023 Rule 6.7.1

PCLP-4844

New message 9251 supports MISRA C++:2023 Rule 5.13.6

PCLP-4842

Added new message 9184 to support MISRA C++ 2023 Directive 5.7.2

PCLP-4826

Support for MISRA C++:2023

PCLP-4768

Fallthrough attributes are now excused from message 9138

PCLP-4721

Limit the situations in which message 923 is enabled within au-misra3.lnt

PCLP-4719

Improved support for MISRA C 2012 Rule 1.3

PCLP-4710

Soften message 9224 for test of integer literal zero

PCLP-4593

New message 2776 replaces 1776 for C modules

PCLP-4509

Resolve false positive for 9128

PCLP-4485

Category of MISRA C 2012 Rule 17.5 changed from Advisory to Required

PCLP-4484

Modify message 533 to consider the current C language standard

PCLP-4482

Category of MISRA C 2012 Rule 13.6 changed from Mandatory to Required

PCLP-4479

Update 1776 to support additional implied assignment contexts

PCLP-4477

Message 9080 no longer emits while initializing an object containing pointers with 0

PCLP-4476

Update messages 9078, 9079, 9087, and 9295 to only report conversions involving object pointers

PCLP-4475

Modify 9034 to consider the rank of essentially signed integer constant expressions

PCLP-4473

Added new message supporting MISRA C 2012 Rule 10.1

PCLP-4469

Add detail message parameter to 1940

PCLP-4406

Support MISRA C 2012 AMD-4 Rule 22.17

PCLP-4404

Assistance for MISRA C 2012 AMD-4 Rule 22.14

PCLP-4395

Add new message 9222 to support MISRA C 2012 AMD 4 Rule 7.6

PCLP-4393

Support MISRA C 2012 AMD-4 Directive 5.2

PCLP-4323

Improved loop counter detection for message 850

PCLP-4315

New message 9188 adds support for MISRA C 2012 AMD-3 Rule 18.9

PCLP-4147

New message 3433 supports AUTOSAR M15-3-3

PCLP-4143

Message 4787 and 5630 have been moved to 163 and 164 respectively

PCLP-4127

New message 9249 supports AUTOSAR M10-2-1

PCLP-4126

Added support for AUTOSAR Rule M10-1-2

PCLP-4115

Add new messages 9220 and 9221 to support MISRA C++ 2008 Rule 7-4-3

PCLP-4110

New message 9196 supports AUTOSAR M6-5-6

PCLP-4109

New messages 9194 and 9195 supports AUTOSAR M6-5-5

PCLP-4108

New message 9193 supports AUTOSAR M6-5-4

PCLP-4046

Do not emit message 1764 for universal reference parameter of template instantiated with a lambda

PCLP-4010

Fix false positive 9049 within lambda body

PCLP-3994

Add new messages 2507 to support MISRA C Rule 19.1

PCLP-3973

Added support for MISRA C 2012 Directive 4.13

PCLP-3957

Update MISRA C++ 2008 configuration template

PCLP-3937

Update message 9264 for MISRA C++ 2008 Rule 5-0-15

PCLP-3917

Add new message 2469 to support AUTOSAR M3-2-4

PCLP-3766

Message 9035 added as a way to support MISRA C 2004 Rule 1.1

PCLP-3419

New message 3980 supports MISRA C++ 7-5-3

PCLP-3390

Resolved false positive 9034 when true and false macros are used as macro arguments

PCLP-3198

Fixed false positive 9045 for nested structures

PCLP-3058

Enabled support for MISRA 2004 Rule 20.3 and MISRA 2012 Directive 4.11

PCLP-2458

New message 9197 supports MISRA C 2012 Rule 14.2

PCLP-2061

Add new message 2721 and 9223 to support MISRA C 2012 AMD-1 Rule 21.19

PCLP-1060

New message 9140 supports AUTOSAR M6-6-3

PCLP-4480

Modify 9028 to account for operand rank

PCLP-4394

Partial support for MISRA C 2012 AMD-4 Directive 5.3

PCLP-4142

Add new message 9250 to support AUTOSAR Rule M14-6-1

PCLP-3941

Added messages 2452, 2453, and 2455 as support mechanisms for MISRA C 2012 Rule 1.3

PCLP-2917

Added support for MISRA C 2012 Rule 12.4

PCLP-5147

Use of MISRA guideline headline text

PCLP-5122

Enhance message presentation when enabling MISRA C 2012 amendments

PCLP-5106

Removed message 754 and 768 for MISRA C Rule 2.8

PCLP-5089

Support for MISRA C:2025

PCLP-5087

Change the suppression options used to enable the messages supporting MISRA C Rule 11.6

PCLP-4798

Add new message 9155 to identify commented-out code

PCLP-4644

Add new messages 9277 and 9278 to support MISRA C 2012 Rule 5.8 and MISRA C 2012 Rule 5.9

PCLP-5174

Message 1946 no longer emits for functional casts using curly braces or those resulting in a constructor call

PCLP-5129

Message 9031 does not support expanded definition of composite expressions introduced in MISRA C:2023

PCLP-5127

Message 9057 not emitted for ull or Ull suffixes

PCLP-4749

Messages 754 and 768 do not consider appearances in member designators as references

PCLP-4740

Message 9079 incorrectly emitted for some equality operations in C mode

PCLP-3894

Messages 9131 and 9240 do not treat dependent qualified identifiers as primary or postfix expressions

PCLP-3489

Messages 9128 may be incorrectly emitted within the instantiation of a template with a non-type template parameter

PCLP-3485

False positive message 9175 for lambda functions that modify local variables captured by reference

23.1.3 New Features



PCLP-853 PCLP-2109

Added support for function attributes warn_unused_result and nodiscard
PC-lint Plus now emits message 2420 for functions marked with attributes warn_unused_result or nodiscard whose return values are ignored. This message is intended to compliment 534 , highlighting that the result of such functions should never be ignored due to the presence of the aforementioned attributes.

PCLP-1060

New message 9140 supports AUTOSAR M6-6-3
The new message 9140 (continue used outside of well-formed for loop) is issued when a continue statement is found in an iteration statement that is not a well-formed for loop.

PCLP-2040

New message for use of delete on void pointers
The message 1575 (delete used on void pointer) reports on delete expressions whose arguments are pointers to void. According to the C++ standard, undefined behavior is produced if the delete operator is ever passed a pointer to void.

PCLP-2061

Add new message 2721 and 9223 to support MISRA C 2012 AMD-1 Rule 21.19
The new message 2721 (pointer returned from function, whose value should not be modified, is assigned to pointer to non-const) is issued when a pointer from a standard library function whose value should not be modified is assigned to a pointer to non-const. The new message 9223 (value is modified using a pointer member of a const-qualified base) is issued a value is modified through a pointer with a const-qualified base. These message support MISRA C 2012 AMD-1 Rule 21.19, MISRA C 2023 Rule 21.19, and CERT C ENV30-C.

PCLP-2458

New message 9197 supports MISRA C 2012 Rule 14.2
The new message 9197 (statement in for loop init-statement that doesn’t assign the value of a loop counter) reports when an init-statement is present in a for loop that isn’t initializing a loop counter. This message improves support for MISRA C 2012 Rule 14.2.

PCLP-2605

Reintroduced message 962 from PC-lint 9
Message 962 (macro defined identically in another module) is reintroduced from PC-lint 9 to report identical macro definitions occurring in different modules. This also improves support for MISRA C 2012 Rule 5.4.

PCLP-2837

Parallel builds with imposter are now supported
Previously, running multiple instances of the imposter utility occasionally resulted in interleaved writes to the output log file. This limitation has been resolved, allowing imposter to always produce properly formatted output in the log.

PCLP-2909

Template classes, functions, and variables can be deprecated
The message 586 (deprecated entity used) and 986 (deprecated type used in typedef) can now be specified to be emitted for abstract template classes, functions and variable, or specific instantiations using the -deprecate option.

PCLP-2917

Added support for MISRA C 2012 Rule 12.4
Message 2421 is issued when computing an unsigned integer constant expression results in unsigned wrap-around. Full support for MISRA C 2012 Rule 12.4 is now provided.

PCLP-3419

New message 3980 supports MISRA C++ 7-5-3
New message 3980 (returning reference of non-const reference parameter) now diagnoses when non-const reference function parameter is returned as a reference from a function.

PCLP-3522

New message 9189 helps support AUTOSAR A7-1-7
The new message 9189 (multiple expression statements on the same line) now reports when an expression statement is found on a line that previously contained an expression statement. This note is not issued for macro expansions or definitions.

PCLP-3524

Add new message 1950 to support AUTOSAR Rule A12-1-5
The new message 1950 (non-constant member initialized in multiple constructors outside of a delegating constructor) reports when a non-constant member is initialized in multiple constructors instead of being initialized by a delegating constructor. This implements AUTOSAR Rule A12-1-5.

PCLP-3530

New message 9241 supports AUTOSAR19 A5-2-6
New message 9241 (logical operator has unparenthesized binary operator operand) now diagnoses when a && or || logical operator has an operand that is a binary operator, and is not a member access, function call, or comma operator.

PCLP-3535

Add new message 2506 to support AUTOSAR Rule A21-8-1 and CERT C Rule STR37-C
The new message 2506 (argument to character-handling function is not representable as an unsigned char) reports when an argument to a character-handling function which does not have unsigned char type and does not have a known value that could be represented by the EOF macro or fit in the range of an unsigned char. This implements AUTOSAR Rule A21-8-1 and CERT C Rule STR37-C.

PCLP-3536

New message 9453 supports AUTOSAR A8-5-2
New message 9453 (variable initialization does not use braces) now diagnoses when variable is initialized not using braces. Variables with templated types, or of a class type that has a std::initializer_list constructor and another non-default constructor are allowed to use parentheses instead of braces.

PCLP-3917

Add new message 2469 to support AUTOSAR M3-2-4
The new message 2469 (multiple external linkage variable definitions) is issued when a variable with external linkage is defined in multiple modules of the project. Inline variables are allowed, provided they are all defined in the same source file or header throughout the project. This message supports MISRA C 2004 Rule 8.9 and MISRA C 2012 Rule 8.6 as well.

PCLP-3994

Add new messages 2507 to support MISRA C Rule 19.1
The new message 2507 (assignment between overlapping objects is not well defined) is issued when an assignment occurs between objects that overlap partially or overlap exactly but have incompatible types. This improves support for MISRA C Rule 19.1.

PCLP-4066

New fuv flag option
The new fuv flag option can now be used to cause PC-lint Plus to report unreferenced variables that could be made const (or pointer to const, etc). By default, PC-lint Plus does not report unreferenced variables that could be made const.

PCLP-4084

Diagnostic Accounting Feature
The new Diagnostic Accounting feature supports generation of auditing data for diagnostics and suppressions. This data represents an accounting of messages that were emitted and suppressed along with information about how the emission determination was made and the impact of suppression options in effect at the time. This information may be used to support the ability to detect unused suppression options, better facilitate custom post-processing tasks and reports, support auditing demands that require an account of suppressed messages, and is the mechanism that supports analysis results import used by PC-lint Plus View.

PCLP-4102

New message 3708 and 9508 support AUTOSAR Rule A3-3-2
The new message 3708 (static or thread storage duration variable with non constant-initializer) is issued when a variable with static or thread storage duration has an initializer, but is not constant-initialized. The new message 9508 (static or thread storage duration variable with zero-initializer) is issued when a variable with static or thread storage duration is implicitly zero-initialized.

PCLP-4107

New messages 9191 and 9192 supports AUTOSAR A6-5-2
The new message 9191 (multiple for loop counters) is issued when a for loop has more than one loop counter variable. The new message 9192 (no for loop counters) is issued when a for loop cannot be determined to contain a loop counter.

PCLP-4108

New message 9193 supports AUTOSAR M6-5-4
The new message 9193 (not modified by increment or decrement of a constant amount) is issued when a for loop counter is modified other than by an increment, decrement, or compound addition/subtraction by a constant expression.

PCLP-4109

New messages 9194 and 9195 supports AUTOSAR M6-5-5
The new message 9194 (modifying non loop counter) is issued when a variable other than a loop counter is modified in a for loop condition or iteration expression. The new message 9195 (potentially modifying non loop counter) is issued when a variable other than a loop counter is potentially modified in a for loop condition or iteration expression.

PCLP-4110

New message 9196 supports AUTOSAR M6-5-6
The new message 9196 (non-loop counter variable modified in for body isn’t bool) is issued when a variable used in a for loop, is modified in the body of the loop, and isn’t a loop counter or a boolean type.

PCLP-4111

Add new message 1803 to support AUTOSAR Rule A7-1-2
The new message 1803 (variable could be constexpr) reports when the value of a variable can be determined at compile-time but does not use the constexpr specifier. This implements AUTOSAR Rule A7-1-2.

PCLP-4112

New message 1955 supports AUTOSAR Rule A7-1-5
New message 1955 (potentially confusing use of the ’auto’ specifier) reports when the auto specifier is used except for where AUTOSAR Rule A7-1-5 permits it.

PCLP-4114

Add new message 3717 to support AUTOSAR19 Rule A7-3-1
The new message 3717 (declaration will not be found through a prior using-declaration) will report when a declaration is added to a namespace that would not be found by a prior using-declaration. This supports AUTOSAR Rule M7-3-5, MISRA C++ 2008 Rule 7-3-5, and AUTOSAR19 Rule A7-3-1.

PCLP-4115

Add new messages 9220 and 9221 to support MISRA C++ 2008 Rule 7-4-3
The new messages 9220 (assembly language instruction is not encapsulated in a function) and 9221 (function mixes assembly code with non-assembly code) will report when assembly code appears outside of a function or is mixed with other non-assembly code in a function. This implements AUTOSAR Rule M7-4-3 and MISRA C++ 2008 Rule 7-4-3.

PCLP-4116

New message 3780 supports AUTOSAR A7-5-1
New message 3780 (returning reference of const or rvalue reference parameter) now diagnoses when a const reference or rvalue reference function parameter is returned as a reference from a function.

PCLP-4117

Add new message 9206 to support AUTOSAR Rule A8-2-1
The new message 9206 (dependent return type does not use trailing return type or return type deduction) now diagnoses when a function template declaration with a dependent return type is not using either function return type deduction or trailing-return-type syntax.

PCLP-4119

New message 3910 supports AUTOSAR19 A8-4-5
New message 3910 (rvalue reference parameter not moved) now diagnoses when a non-const, non-templated rvalue reference function parameter with an identifier is not moved from within the body of that function.

PCLP-4120

New messages 3715 and 3716 supports AUTOSAR19 A8-4-6
New messages 3715 (forward parameter is used outside of forwarding) and 3716 (forward parameter not forwarded) will report when a non-const templated rvalue reference parameter is not forwarded and unoperated. This implements AUTOSAR19 Rule A8-4-6.

PCLP-4122

Add message 3915 to support AUTOSAR19 Rules A8-4-4 and A8-4-8
The new message 3915 (value of non-const reference parameter of function is unused) reports when the passed in value of a non-const reference parameter is unused. This implements AUTOSAR19 Rules A8-4-4 and A8-4-8.

PCLP-4127

New message 9249 supports AUTOSAR M10-2-1
New message 9249 (class contains identifier in multiple bases) now diagnoses when a class inherits from two or more base classes that each contain a declaration with the same identifier.

PCLP-4128

New messages 9242, 9243, 9244, 9245, and 9246 support AUTOSAR A11-0-2
New message 9242 (struct has a non-public data member) now diagnoses when a struct has a protected or private data member. New message 9243 (struct has a static data member) now diagnoses when a struct has a static or thread_local‘ data member. New message 9244 (struct has a method) now diagnoses when a struct has a method or non-default and non-deleted user defined special member function. New message 9245 (struct has a base class) now diagnoses when a struct has a non-empty base-specifier-list. New message 9246 (struct used as a base class) now diagnoses when a struct appears in another classes’ base-specifier-list.

PCLP-4129

New messages 3513, 3713, and 3913 supports AUTOSAR A12-0-1
New message 3513 (Rule of Three) now diagnoses when a class declares a destructor, copy constructor, or copy assignment operator, but not all three in modes previous to C++11. New message 3713 (Rule of Five) now diagnoses when a class declares a destructor, copy constructor, copy assignment operator, move constructor, or move assignment operator, but does not declare a destructor, copy constructor, and copy assignment operator. New message 3913 (Rule of Five with only the move operators missing) now diagnoses when a class declares a destructor, copy constructor, and copy assignment operator, but not a move constructor and move assignment operator.

PCLP-4130

Add new message 1947 to support AUTOSAR Rule A12-1-2
The new message 1947 (initializes members in both the class body and constructor) reports when a constructor initializes members of a class/struct/union where members are also initialized in the class body. This implements AUTOSAR Rule A12-1-2.

PCLP-4132

Add new message 1801 to support AUTOSAR Rule A12-4-1
The new info message 1801 (base class has a destructor that is not public virtual, public override, or protected non-virtual) is issued when a base class destructor is not public virtual, public override, or protected non-virtual. This implements AUTOSAR Rule A12-4-1.

PCLP-4134

Add new message 1424 to support AUTOSAR Rule A12-8-3
The new message 1424 (object has been previously moved but is used) will report when an object is used after it was moved. This implements AUTOSAR Rule A12-8-3.

PCLP-4135

Add new message 1957 to support AUTOSAR Rule A12-8-6
The new message 1957 (base class has a non-protected and non-deleted copy/move constructor/assignment operator) reports when a base class contains a non-protected, non-deleted copy/move constructor or assignment operator.

PCLP-4136

New message 3714 and 9514 supports AUTOSAR A13-1-2
New message 3714 (user defined literal suffix doesn’t start with single underscore) now diagnoses when a user defined literal operator, outside of the std namespace, has a suffix that does not start with a single underscore. New message 9514 (user defined literal suffix contains non-letter after underscore) now diagnoses when a user defined literal operator, outside of the std namespace, has a suffix that starts with a single underscore, but is not followed by one or more letters.

PCLP-4137

Add new messages 9266 and 9267 to support AUTOSAR Rule A13-1-3
The new message 9266 (user-defined literal operator returns void) now diagnoses when a user-defined literal operator function is declared with a void return type. The new message 9267 (user-defined literal operator has side-effects) now diagnoses when a user-defined literal operator function is defined as an impure function with side-effects.

PCLP-4139

Add new message 9239 to support AUTOSAR Rule A13-5-4
The new message 9239 (opposite operators are defined and neither are defined in terms of the other) reports when an operator pair is defined where one is not defined in terms of the other. This message implements AUTOSAR Rule A13-5-4.

PCLP-4140

New messages 1804 and 1805 support AUTOSAR19 A14-5-1
New message 1804 (template constructor has a single argument of the enclosing class type) reports when a template constructor is instantiated with a single argument of the enclosing class type. New message 1805 (constructor template cannot be a move constructor) reports when no user defined move constructor is present and a template constructor is defined that looks like a move constructor. This implements AUTOSAR19 A14-5-1.

PCLP-4141

Add new message 9248 to support AUTOSAR Rule A14-5-3 and MISRA C++ Rule 14-5-1
The new message 9248 (non-member generic function should be declared in a namespace that does not contain class, struct, enum, or union type declarations) reports when a non-member generic function is not declared in a namespace that does not contain class (struct) type, enum type or union type declarations. This implements MISRA C++ Rule 14-5-1 and AUTOSAR Rule A14-5-3.

PCLP-4142

Add new message 9250 to support AUTOSAR Rule M14-6-1
The new message 9250 (unqualified name lookup in class template with dependent base class) now diagnoses when unqualified name lookup occurs with in the context of a class template with a dependent base class and the name can be found in that dependent base class. This also support MISRA C++ Rule 14-6-1.

PCLP-4145

Add new messages 9302 and 9303 to support AUTOSAR Rule A15-1-3
The new message 9302 (duplicate exceptions thrown) is issued when two or more of the same exception object with corresponding type and message are thrown in the project. The new message 9303 (possible duplicate exceptions thrown) is issued when two or more of the same exception object with corresponding type and possibly the same message are thrown in the project.

PCLP-4146

New message 3712 and 3912 supports AUTOSAR A15-2-1
The new message 3712 (static duration variable initialized with non-noexcept constructor) is issued when a variable with static storage duration, in a non-local scope, is initialized with a potentially throwing constructor. The new message 3912 (non-noexcept constructor used in a constexpr function) is issued when a potentially throwing constructor is found in the body of a constexpr function.

PCLP-4147

New message 3433 supports AUTOSAR M15-3-3
The new warning 3433 is issued when a constructor or destructor references a non-static class member from this class or a base.

PCLP-4150

New message 3548 supports AUTOSAR A15-4-3
The new message 3548 (noexcept declaration mismatched between modules) is issued when a function is declared in one module with an exception specifier that indicates it may throw, whereas another module indicates the declared function will not throw, and vice versa.

PCLP-4151

Added support for AUTOSAR Rule A15-5-1 with new message 9470
The new message 9470 reports the definition of a potentially-throwing user-provided destructor, deallocation function (operator delete), move constructor, move assignment operator, or swap function.

Support for AUTOSAR Rule A15-5-1 is now provided.

PCLP-4152

New message 3904 supports AUTOSAR A18-5-4
The new message 3904 (globally defined operator delete does not have complimentary definition) is issued when a project with sized allocations enabled defines a global operator delete replacement which has a variant with and without a sized parameter, but only defines one of them.

PCLP-4153

Add new messages 3435 and 3436 and enable 3047 to support AUTOSAR19 Rule A18-5-9
The new messages 3435 (non-throwing allocation function throws a std::bad_alloc exception) and 3436 (allocation function does not throw a std::bad_alloc exception) will report when a replacement allocation function incorrectly throws or does not throw a std::bad_alloc exception. This supports AUTOSAR19 Rule A18-5-9.

PCLP-4155

Add new messages 3709 and 3710 to support AUTOSAR19 Rule A18-5-11
The new message 3709 (global operator new and delete not defined together) is issued when a global operator new or operator delete is user defined, but does not have a corresponding user defined global operator new or delete such that memory from one can be allocated or deallocated by the other. The new message 3710 (class operator new and delete not defined together) is issued when a class scope operator new or operator delete is user defined, but does not have a corresponding user defined operator new or delete such that memory from one can be allocated or deallocated by the other.

PCLP-4156

New message 3711 supports AUTOSAR 18-9-3
Message 3711 (use of std::move on const-qualified argument type) will be issued when a const-qualified argument is passed as the moved argument to a function with move semantics. A new move function semantic has been added to support this message.

PCLP-4157

New message 3905 supports AUTOSAR A18-9-4
The new message 3905 (use after forward) is issued when variable name or alias is used after it has been passed as an argument to a forwarding function such as std::forward. A new forward function semantic for forwarding functions has been added.

PCLP-4253

New message 2840 supports AUTOSAR M6-5-2
The new message 2840 (used with equality operator but modified other than by ++ or –) is issued when a for loop counter is used as an operand to an equality operator in the for loop condition, but was not modified in the iteration expression with the ++ or – operator.

PCLP-4315

New message 9188 adds support for MISRA C 2012 AMD-3 Rule 18.9
The new message 9188 now provides support for MISRA C 2012 AMD-3 Rule 18.9.

PCLP-4325

New message 3537 supports AUTOSAR M9-3-1
The new message 3537 (const member functions returns non-const reference to class member) is issued when a const member function returns a non-const reference to a non-static class member.

PCLP-4395

Add new message 9222 to support MISRA C 2012 AMD 4 Rule 7.6
The new message 9222 (small integer variant of a minimum-width integer constant macro is used) reports when a minimum-width integer constant macro is used whose width is less than that of type int. This implements MISRA C 2012 AMD 4 Rule 7.6.

PCLP-4473

Added new message supporting MISRA C 2012 Rule 10.1
The new message 9099 (pointer used as operand of logical operator) emits when pointer types are used as operands of the operators &&, ||, and !. MISRA C 2012 Rule 10.1, previously supported by messages 48 (indirection requires pointer operand) and 9027 (essential-type value not appropriate operand to operator), received a correction in MISRA C 2012 Technical Corrigendum 1 that prohibits the use of pointers with these operators. 9099 was added to provide support for this correction.

PCLP-4501

Add sub-option for stack usage to allocate variables at the start of the function
A sub-option &prealloc_vars is added to +stack to allocate variables at the start of the function rather than allocating and deallocating them within their scope.

PCLP-4551

Commas are now optional when specifying multiple messages for -e(, –e(, -e{, and –e{
Previously, these options required commas separating each message number passed to them. The formatting requirements have been relaxed. Now spaces, commas, or a mixture of both may be used to specify message numbers.

PCLP-4593

New message 2776 replaces 1776 for C modules
Previously, the message 1776 (implicit conversion of string literal is not const safe) was emitted for both C and C++ modules. Message 1776 is now only emitted in C++ modules and the new message 2776 is used to diagnose similar issues in C modules.

PCLP-4644 PCLP-3972 PCLP-3110 PCLP-3109

Add new messages 9277 and 9278 to support MISRA C 2012 Rule 5.8 and MISRA C 2012 Rule 5.9
The new message 9277 (identifier is used elsewhere to define a symbol with external linkage) reports when an identifier with external linkage is reused anywhere in the project. This supports MISRA C 2012 5.8. The new message 9278 (identifier is used elsewhere to define a symbol with internal linkage) reports when an identifier with internal linkage is reused anywhere in the project. This supports MISRA C 2012 5.9.

PCLP-4645

Add new message 9279 to support AUTOSAR A2-10-4
The new message 9279 (identifier with static storage is reused within a namespace) reports when an identifier with static storage is reused within a namespace across any source files in the project. This supports AUTOSAR A2-10-4.

PCLP-4798

Add new message 9155 to identify commented-out code
Message 9155 (comment may contain commented-out code) is issued for comments that appear to contain commented-out code. Partial support for MISRA C 2012 Dir 4.4, MISRA C++ 2023 Directive 5.7.2, AUTOSAR Rule A2-8-2, and AUTOSAR Rule A2-7-2 is now provided.

PCLP-4826

Support for MISRA C++:2023
PC-lint Plus now supports MISRA C++:2023 via the new au-misra-cpp2.lnt author configuration file. See section MISRA C++:2023 for more information.

PCLP-4842

Added new message 9184 to support MISRA C++ 2023 Directive 5.7.2
Message 9184 is issued when #if 0 directives are encountered.

PCLP-4844

New message 9251 supports MISRA C++:2023 Rule 5.13.6
The new message 9251 (integer literal with L/l suffix should have LL/ll suffix) reports when an integer literal with an L or l suffix is cannot be represented in the long type.

PCLP-4847

New message 9257 supports MISRA C++:2023 Rule 6.7.1
The new elective note 9257 (local non-const variable has static/thread storage duration) supports MISRA C++:2023 Rule 6.7.1.

PCLP-4849

Add new message 1806 to support MISRA C++:2023 Rule 6.8.4
The new message 1806 (member function returning reference to its object is not ref-qualified appropriately) reports when there is an explicit return of this, *this, or a subobject of *this in a member function lacking ref-qualifiers to prevent a dangling reference in certain circumstances. This supports MISRA C++:2023 Rule 6.8.4.

PCLP-4857

New message 9164 reports on uses of reinterpret_cast
The new message 9164 (reinterpret_cast used) diagnoses all uses of reinterpret_cast and is used to support MISRA C++:2023 Rule 8.2.5.

PCLP-4859

New message 9161 supports MISRA C++:2023 Rule 8.2.9
The new message 9161 (operand to typeid operator has polymorphic type) supports MISRA C++:2023 Rule 8.2.9.

PCLP-4860

New message 9207 supports MISRA C++:2023 Rule 8.3.2
The new message 9207 (built-in unary plus operator encountered) will report when the unary plus operator is used in a way that does not invoke an overloaded operator function.

PCLP-4861

Add new message 9256 to support MISRA C++:2023 Rule 10.1.2
The new message 9256 (volatile used) will be issued when a volatile qualifier is used in a context that may not be appropriate.

PCLP-4863

New message 9253 reports on the use of bit-fields
Elective note 9253 is now provided to diagnose bit-field declarations which supports MISRA C++:2023 Rule 12.2.1.

PCLP-4864

Add new message 1953 to support MISRA C++:2023 Rule 13.3.2
The new message 1953 (default argument of parameter in function is not a constant expression with the same value as the overridden function) reports parameters of overriding functions that specify a default argument that is not a constant expression or that has a different value than the default argument of the corresponding parameter in the overridden function. This supports MISRA C++:2023 Rule 13.3.2.

PCLP-4865

New message 1956 reports on symmetric operators implemented as member functions
The new message 1956 (symmetric operator implemented as a member function) reports when a symmetric operator is not implemented as a non-member function which supports MISRA C++:2023 Rule 16.6.1.

PCLP-4866

Added support for MISRA C++ 2023 Rule 17.8.1
Message 9179 is issued when an explicit function template specialization is encountered. Complete support for MISRA C++ 2023 Rule 17.8.1 is now provided.

PCLP-4869

Added support for MISRA C++ 2023 Rule 22.4.1
Message 9180 is issued when errno is assigned anything other than the integer literal zero. Complete support for MISRA C++ 2023 Rule 22.4.1 is now provided.

PCLP-4877

Add new message 3911 to support MISRA C++:2023 Rule 28.6.1
The new message 3911 (move of rvalue argument) will be issued when an rvalue argument is passed as the moved argument to a function with move semantics.

PCLP-4880

Add new message 3907 to support MISRA C++:2023 Rule 9.5.2
The new message 3907 (multiple function calls in a for-range-initializer) will be issued when a C++11 range based for loop has multiple function calls within its for-range-initializer.

PCLP-4881

Add new message 9217 to support MISRA C++:2023 Rule 10.4.1
The new message 9217 (assembly language instruction within a function) reports assembly language that appears inside of a function. In conjunction with message 9220 all uses of assembly language will be reported. This supports MISRA C++:2023 Rule 10.4.1.

PCLP-4900

Add new message 9255 to support MISRA C++:2023 Rule 6.0.3
The new message 9255 (inline global namespace) will be emitted when an inline namespace is declared in the global namespace.

PCLP-4956

Explicit support for MISRA C:2023
PC-lint Plus now provides explicit support for MISRA C:2023 via the new au-misra4.lnt file found in the lnt/ directory of the product distribution.

PCLP-5089

Support for MISRA C:2025
PC-lint Plus now supports MISRA C:2025 via the new au-misra5.lnt author configuration file. See section MISRA C:2025 for more information.

PCLP-5100

Added Unused Suppressions Tool
A new python script unused.py has been added to the extras/ directory of PC-lint Plus. This can be used in conjunction with the Diagnostic Accounting feature to find unused, impotent, and redundant suppressions. For more information refer to the Unused Suppressions section of this manual.

23.1.4 Improvements



PCLP-960

Update 9103 to fully support MISRA C++ Rule 2-10-5
The existing message 9103 (identifier with static storage is reused) is extended to report when a static identifier name is reused in any file in the project. This supports MISRA C++ 2-10-5.

PCLP-1578

Emit function location for 9070
The message 9070 (function is recursive) now will provide the location of the function definition in the message. This change enables many type of suppressions that were not possible before, as well as allowing Queries to analyze the given function definition. If the -unit_check option is used or global wrap-up is otherwise disabled, then the message will be emitted at the end processing without a location, like the previous behavior.

PCLP-2603

Re-enabled message 767
Message 767 (macro defined differently in another module) is reenabled. This improves support for MISRA C 2012 Rule 5.4.

PCLP-2978

Assembly related errors are no longer emitted.
Previously, PC-lint Plus attempted to perform analysis on assembly variable declarators, possibly resulting in the emission of multiple assembly-related diagnostics. PC-lint Plus was not designed to analyze such statements, and should not be emitting any diagnostics related to inline assembly. This defect has been corrected.

PCLP-3005

Messages 419 and 420 now also issued for non-buffer arguments
Non-buffer arguments are now considered for data overrun and invalid access by messages 419 and 420 .

PCLP-3012

Messages 750, 1401, 1540, 1541, 1565, 1566, 1578, 1579, 1927 are now issued in a consistent order
Messages 750 (local macro not referenced), 1401 (non-static data member not initialized by constructor), 1540 (non-static pointer data member not deallocated nor zeroed by destructor), 1541 (non-static data member possibly not initialized by constructor), 1565 (non-static data member not initialized by initializer function), 1566 (non-static data member may have been initialized in a separate method without initializer semantic), 1578 (non-static pointer data member not deallocated nor zeroed by cleanup function), 1579 (non-static pointer data member may have been zeroed or freed in a separate method without initializer semantic), and 1927 (data member absent from initializer list for constructor) were previously not always issued in a consistent order. Now they are issued in a consistent order across runs. It is a known issue that 457 and 459 are issued in an inconsistent order when PC-Lint Plus is running with multiple threads.

PCLP-3058

Enabled support for MISRA 2004 Rule 20.3 and MISRA 2012 Directive 4.11
Relevant messages for MISRA 2004 Rule 20.3 and MISRA 2012 Directive 4.11 are now enabled in au-misra2.lnt and au-misra3.lnt files.

PCLP-3061

Added supplemental message for message 455
When message 455 is emitted, additional supplemental messages will also be emitted that document the prior operations of the referenced mutex/locker.

PCLP-3410

Support language extension specifying an explicit address using a colon
The language extension specifying an explicit address for a variable introduced by a colon used by some compilers including CodeWarrior is now supported if the fec flag is turned on.

PCLP-3620

-efunc can now be used to suppress messages within special member functions and conversion operators.
Previously, the -efunc option did not work for special member functions, such as constructors and destructors, and conversion operators. Now, suppression of messages via -efunc can be applied to these functions.

PCLP-3648

Emit message 686 in response to suppression of message 322
Explicit suppression of error 322 (unable to include file) will now elicit message 686 (option is suspicious) as suppression of a fatal error is unusual and will likely have negative unintended consequences.

PCLP-3716

Corrected representation of format string checking for wide-string functions
Wide character versions of printf-like and scanf-like functions have been removed from the table provided in the "Format Checking" section as the checks described in this section are not performed for these functions. The corresponding semantics for these functions is also updated in the Semantics chapter.

PCLP-3766

Message 9035 added as a way to support MISRA C 2004 Rule 1.1
Message 9035 (variable length array declared) is now marked as supporting MISRA C 2004 Rule 1.1.

PCLP-3922

Removing section "Differences from PC-lint 9" and documenting the default value of -vt_depth
Section "Differences from PC-lint 9" has been removed and the default value of the -vt_depth option has been documented.

PCLP-3937

Update message 9264 for MISRA C++ 2008 Rule 5-0-15
Message 9264 (array subscript applied to variable declared with non-array type) now handles reference types and extends support for MISRA C++ 2008 Rule 5-0-15.

PCLP-3941

Added messages 2452, 2453, and 2455 as support mechanisms for MISRA C 2012 Rule 1.3
Messages 2452 (signed integer pointer converted to/from unsigned equivalent), 2453 (incompatible pointer to integer conversion), and 2455 (incompatible function pointer types) diagnose various pointer conversions resulting in undefined behavior. Each has been added as a message supporting MISRA C 2012 Rule 1.3.

PCLP-3949

Improved built-in function semantics
Added and updated built-in function semantics for many Standard C, Standard C++, Posix, and Windows functions.

PCLP-3957

Update MISRA C++ 2008 configuration template
AUTOSAR M3-2-4, MISRA C++ 2008 Rule 3-2-4, MISRA C 2004 Rule 8.9, and MISRA C 2012 Rule 8.6 are marked to have partial support via message 2467. The MISRA C++ 2008 Rule 9-3-1 and 15-0-3 has been marked as having no support from PC-Lint Plus.

PCLP-3971

Add -isystem and -Hincdir= to the list of defaults for –prefix-directory-options in pclp_config.py
When given relative paths, the include path options -isystem and -Hincdir= are now automatically prefixed by the directory entry in a JSON compilation database when generating a project configuration.

PCLP-3973

Added support for MISRA C 2012 Directive 4.13
An collection of relevant messages now support this directive in au-misra3.lnt

PCLP-3980

Variables marked with attribute unused are now exempt from message 438
Message 438 no longer reports on variables that are marked with an unused or maybe_unused attribute.

PCLP-4012

Use of the __generic keyword no longer elicits errors when using IAR compiler configurations
The iar-8051, iar-sam8, and iar-avr compiler configurations enable the __generic keyword. Use of this keyword would previously elicit an error. This issue has been corrected.

PCLP-4016

Built-in function semantics for std::jthread
Built-in functions semantics for the std::jthread::jthread() function so that PC-lint Plus can automatically recognize the creation of threads created by this function.

PCLP-4046

Do not emit message 1764 for universal reference parameter of template instantiated with a lambda
Message 1764 (reference parameter of function could be reference to const) no longer reports when a function template is instantiated with a lambda as the argument corresponding to a universal reference parameter.

PCLP-4058

Include metrics that evaluate to a metric host/collection on the metric report
The metric report now includes metrics that evaluate to a metric host/collection. For example, this can be used to identify the specific function for which the maximum or minimum value of a metric occurred, or to identify all classes meeting specific metric criteria.

PCLP-4103

Added support for AUTOSAR19 Rule A5-0-4
Message 1952 is issued when pointer arithmetic is performed on a pointer to a non-final class type. Complete support for AUTOSAR19 Rule A5-0-4 is now provided.

PCLP-4105

Support for AUTOSAR Rule A5-1-2
Message 1970 (lambda with default capture) is now used to support AUTOSAR Rule A5-1-2.

PCLP-4123

Enable message 1764 to support AUTOSAR19 Rule A8-4-9
The existing message 1764 (reference parameter of function could be reference to const) is enabled in support of AUTOSAR19 Rule A8-4-9.

PCLP-4124

Add support for AUTOSAR19 Rule A8-4-10
Messages 613 and 668 are now emitted with additional distinguishing text in cases where they are reporting a function parameter assumed NULL by the +fpn flag, and such instances of these messages now provide support for AUTOSAR19 Rule A8-4-10.

PCLP-4126

Added support for AUTOSAR Rule M10-1-2
The message 1749 (base class virtual specifier is unnecessary) is issued when a class derives from a virtual base class, but nowhere in the project is the class used in a diamond hierarchy that warrants the virtual specifier.

PCLP-4143

Message 4787 and 5630 have been moved to 163 and 164 respectively
The message previously 4787 is now message 163 (goto jumps into protected context). The message previously 4787 is now message 164 (switch case label in protected context). These messages are used to support MISRA C++ 2008 15-0-3 and AUTOSAR M15-0-3.

PCLP-4154

Added support for AUTOSAR19 Rule A18-5-10
Message 3437 is issued when the pointer passed to placement new points to memory that is misaligned. Message 3438 is issued when the pointer passed to placement new points to memory that too small. Via these new messages, partial support for AUTOSAR19 Rule A18-5-10 is now provided.

PCLP-4167

Improvements to the documentation of the section covering the utility pclp_config
Explicit mention of Python is now made for every call to pclp_config.py in section *Configuring with pclp_config*. –list instances are now –list-compilers, and the –generate-project-config option documentation is improved to include use cases like JSON compilation db. Sections on installing pclp_config prerequisites, Python, and required modules are reorganized for better documentation flow.

PCLP-4206

Update size option extraction method for TI compiler configurations
Previously, some versions of some TI compilers failed to accurately generate size options when creating a compiler configuration. The method of size option extraction was updated, providing accurate and complete size options for all versions of all TI compilers.

PCLP-4323

Improved loop counter detection for message 850
Message 850 (modification to for loop counter variable inside loop body) now employs a loop counter definition that is aligned with MISRA C++ 2008. Variables that are an operand to a relational or equality operator in a for loop condition, and modified in the for loop iteration-expression are considered loop counters.

PCLP-4327

Message 2467 will only report definitions
The message 2467 (multiple function definitions across modules) would previously be reported for all function declarations of the functions in violation. Now it will only report the definition of violating functions in each module.

PCLP-4347

Clean up temporary IAR compiler output files when generating an IAR compiler configuration with pclp_config.py
The pclp_config utility could leave behind compiler-generated files when generating the compiler configuration files for IAR compilers. Temporary files created by the compiler during this process will now be removed afterward.

PCLP-4374

Improve documentation of limitations on thread analysis messages during the second phase
The limited way in which suppression options interact with Thread Analysis messages emitted during the second phase has been better documented.

PCLP-4380

Deprecated type names are now compared against fully qualified types
The message 586 (deprecated entity used) and 986 (deprecated type used in typedef) will now match against fully qualified type names.

PCLP-4393

Support MISRA C 2012 AMD-4 Directive 5.2
MISRA C 2012 Amendment 4 Directive 5.2 is now supported using the provided au-misra3-amd4.lnt file found in the lnt/ directory of the PC-lint Plus distribution.

PCLP-4394

Partial support for MISRA C 2012 AMD-4 Directive 5.3
Partial support for MISRA C 2012 Amendment 4 Directive 5.3 is now provided in the au-misra3-amd4.lnt file found in the lnt/ directory of the PC-lint Plus distribution.

PCLP-4404

Assistance for MISRA C 2012 AMD-4 Rule 22.14
Assistance for MISRA C 2012 Amendment 4 Rule 22.14 is now provided in the au-misra3-amd4.lnt file found in the lnt/ directory of the PC-lint Plus distribution.

PCLP-4406

Support MISRA C 2012 AMD-4 Rule 22.17
MISRA C 2012 Amendment 4 Rule 22.17 is now supported using the provided au-misra3-amd4.lnt file found in the lnt/ directory of the PC-lint Plus distribution.

PCLP-4423

Update generic selection expression checks to consider type predicates
Messages 2419 (controlling expression contains a side effect which will not be evaluated), 9211 (generic selection is not expanded from a function-like macro), 9213 (controlling expression contains a call to function which will not be called), 9214 (default association will be selected), 9216 (essential type of the controlling expression does not match its standard type), and 9219 (parameter of generic selection macro is not evaluated exactly once) now consider generic selection expressions that have a type predicate.

PCLP-4469

Add detail message parameter to 1940
A new detail parameter has been added to message 1940 to explain how a non-const reference parameter has been transferred out of a function. The MISRA C++ 2008 configuration file has been modified for Rule 7-5-3 to use this new parameter narrow the scope of the message emissions.

PCLP-4475

Modify 9034 to consider the rank of essentially signed integer constant expressions
The message 9034 previously supported an exception written in MISRA C 2012 Rule 10.3 which allowed an essentially signed integer constant expression to be assigned to an essentially unsigned type so long as it could be represented within that type. A modification to MISRA C 2012 Rule 10.3 in MISRA C 2012 Technical Corrigendum 1 added the additional restriction that the integer constant expression in question cannot have a rank higher than signed int. Message 9034 now considers this rank requirement in applying the exception.

PCLP-4476

Update messages 9078, 9079, 9087, and 9295 to only report conversions involving object pointers
Definition: Messages 9078 , 9079 , 9087 , and 9295 previously emitted for conversions regardless of pointer type. A modification to the MISRA C 2012 document clarifies that only object pointer types should be considered for rules 11.3, 11.4, 11.5, and 11.7. The other pointer types (void, function, and incomplete) are handled by other MISRA C 2012 rules and their corresponding PCLP messages.

PCLP-4477

Message 9080 no longer emits while initializing an object containing pointers with 0
Previously message 9080 (integer null pointer constant used) emitted when structs or unions with pointer fields were initialized using a single zero initializer ( = 0). This message will no longer be emitted in that scenario. This change supports the modification to Rule 11.9 in MISRA C 2012 Technical Corrigendum 1.

PCLP-4479 PCLP-4592

Update 1776 to support additional implied assignment contexts
Message 1776 (implicit conversion of string literal is not const safe) has been expanded to report additional implied assignment contexts including assignment via function calls and return statements.

PCLP-4480

Modify 9028 to account for operand rank
Description: The message 9028 (essential-type value is not an appropriate operand to operator) previously did not consider the rank of the non-essentially character operand in addition and subtraction operations. An update made to MISRA C 2012 Rule 10.2 in MISRA C 2012 Technical Corrigendum 2 states that the rank of the non-char operand shall be no greater than int. If this is not the case, a violation of Rule 10.2, and therefore an emission of 9028, has occurred. This change adds such new behavior to 9028.

PCLP-4482

Category of MISRA C 2012 Rule 13.6 changed from Mandatory to Required
Previously, MISRA C 2012 Rule 13.6 was classified as a Mandatory rule, per specification in the original MISRA C 2012 document. An update in MISRA C 2012 Technical Corrigendum 2 changes the category of this rule to Required. This change ensures such updates are reflected in the PCLP manual.

PCLP-4484

Modify message 533 to consider the current C language standard
Previously, emission of 533 was elided for the main function, regardless of the current C language standard. The implicit zero-return behavior for main was not introduced until C99. Message 533 now emits when main reaches the end of control without a return statement for C89/C90 mode. This change also aligns with the corresponding correction to MISRA C 2012 Rule 17.4 made in Technical Corrigendum 2.

PCLP-4485

Category of MISRA C 2012 Rule 17.5 changed from Advisory to Required
Previously, MISRA C 2012 Rule 17.5 was classified as an Advisory rule, per specification in the original MISRA C 2012 document. An update in MISRA C 2012 Technical Corrigendum 2 changes the category of this rule to Required. This change ensures such updates are reflected in the PCLP manual.

PCLP-4506

Added documentation of the ’c’ flag for the -size option.
The -size option had an undocumented flag titled ’c’, which can elicit message 1746 . Documentation for this flag has been added to both the option description and message description.

PCLP-4507

Message 977 no longer emitted for some conditional-expressions
Message 977 (non-literal non-Boolean assigned to Boolean) is no longer emitted for any conditional-expression for which both the second and third operand are literals or Boolean type.

PCLP-4523

Expand message 1537 to support AUTOSAR M9-3-1
The message 1537 (const member functions returns non-const pointer to class member) is now expanded to include smart pointers using the new unique_ptr_constructor, shared_ptr_constructor, and weak_ptr_constructor. It additionally will report when the address of a class member reference is returned.

PCLP-4526

Added missing thread analysis semantic documentation
The semantics no_thread, thread_not, thread_only, and thread_unsafe are now documented.

PCLP-4531

Improve documentation for the -h option
The documentation of the -h option is improved and references to the F parameter for this option were removed from the Reference Manual.

PCLP-4532

Documentation Improvement
The fca flag is now referenced in the relevant semantics subsections. The Reference Manual also includes an additional FAQ to demonstrate adding semantics using attributes. This addition clarifies how the GCC attribute syntax can be used to automatically apply a -sem option e.g. -sem(func,pure).

PCLP-4537

Clarify that the –compiler-options option is not required for the IAR compiler
Section Creating a compiler configuration for IAR Embedded compilers has been updated to include a clarifying note that –compiler-options="..." is not required.

PCLP-4540

Deprecations of C++ types may omit the struct, class, union, or enum keyword
Previously, PC-Lint Plus would recognize -deprecate(type, struct A), but not -deprecate(type, class A) in C++ modules. Now, the struct, enum, union, and class keywords are an optional part of the -deprecate option, regardless of if the source code does or does not use these keywords when specifying the use of a type. The behavior in C mode has not been altered.

PCLP-4541

Fixed false positive 8516 for non-compliant file paths
Previously, 8516 would emit when the file path to a module did not adhere to the accepted naming conventions, even if the name of the module itself did. Now, only the name of the module can elicit an emission of 8516.

PCLP-4554

Improved message descriptions for messages 810 and 423
Previously, it was unclear what kinds of modifications to custodial pointers would elicit 810 versus 423 . To clarify, code examples were added to both message descriptions, and the messages now cross-reference each other, demonstrating the relationship between the two.

PCLP-4579

Added version and copyright information to the PC-lint Plus executable on Windows
Previously, when inspecting the Properties of the PC-lint Plus executable on Windows, only the Product Name could be found in the Details pane. The information here has been improved, and now includes File Verison, Product Version, and Copyright.

PCLP-4599

Updated pclp_config to provide a warning when suspicious include path parsing is detected
The pclp_config utility will now provide a warning when POSIX parsing is disabled and an ASCII single or double quote is encountered while parsing an include path.

PCLP-4612

Enable support for AUTOSAR19 Rule A2-10-1 / AUTOSAR17 Rule A2-11-1
The existing message 578 (declaration hides symbol) is enabled in au-autosar.lnt to support AUTOSAR17 Rule A2-11-1 and au-autosar19.lnt to support AUTOSAR19 Rule A2-10-1.

PCLP-4656

Support usage of __lint_assert in constexpr contexts
Previously, usage of an assert (expanded to __lint_assert via ++dassert(x)=__lint_assert(!!(x))) within a constexpr function would elicit an emission of 4397. The implementation of __lint_assert has been adjusted to allow it’s use in such contexts.

PCLP-4685

Improving the Documentation of the [+/-]libm Option
The documentation of the libm option was improved.

PCLP-4687

New Query functions for C++20 and C++23 features
New Query functions have been added to support C++23 explicit object member function (ParmVarDecl::isExplicitObjectParameter, FunctionDecl::hasCXXExplicitFunctionObjectParameter, CXXMethodDecl::isExplicitObjectMemberFunction,
CXXMethodDecl::isImplicitObjectMemberFunction,
CXXMethodDecl::getNumExplicitParams,
DeclRefExpr::isCapturedByCopyInLambdaWithExplicitObjectParameter). New Query functions have been added to support C++23 consteval if statements (IfStmt::isConsteval, IfStmt::isNonNegatedConsteval, IfStmt::isNegatedConsteval). New Query functions have been added to support C++23 immediate-escalating expressions and functions (FunctionDecl::isImmediateEscalating, DeclRefExpr::isImmediateEscalating, CXXConstructExpr::isImmediateEscalating). A new Query function has been added to support C++20 parenthesized list initialization (CXXParenListInitExpr). A new Query function has been added to support C++20 immediate functions (FunctionDecl::isImmediateFunction). A new Query function has been added to support declarations in C++20 modules (TagDecl::isThisDeclarationADemotedDefinition). A new Query function has been added to support C++17 nested namespaces (NamespaceDecl::isNested). Some other various new Query functions have been added (VarDecl::hasDependentAlignment, CXXRecordDecl::isCapturelessLambda, CXXRecordDecl::isTriviallyCopyConstructible, LabelStmt::isSideEntry).

PCLP-4688

Locker classes no longer need to have default constructors
Message 2485 (invalid semantics for locker class) was previously emitted for classes marked as a locker class for Thread Analysis if they did not have a default constructor. Classes without a default constructor may now be designated as a locker class.

PCLP-4700

Including a query example for tautological assignment
Section 16.5 was updated to include new query example to report on tautological assignment.

PCLP-4710

Soften message 9224 for test of integer literal zero
Message 9224 (expression is not effectively boolean and must be explicitly tested for zero) will no longer be reported for a condition consisting solely of the integer literal zero.

PCLP-4719

Improved support for MISRA C 2012 Rule 1.3
Previously, some support mechanisms for MISRA C 2012 Rule 1.3 in au-misra3.lnt overlapped with other rules, creating duplicates. Now, a comment referencing the previously overlapping rule exists in place of the support mechanism. Additionally, support for this rule now references the same annexes in the C90 and C99 standards that are mentioned in Appendix H of MISRA C 2012, which elaborates on Rule 1.3.

PCLP-4745

Add support for Keil uVision armclang compiler
We now support the Keil uVision armclang compiler in pclp_config.py as keil_armclang.

PCLP-4768

Fallthrough attributes are now excused from message 9138
The [[fallthrough]] attribute, and all of it’s variants, no longer elicit 9138 . If other violations occur on the same line, the message will still be issued.

PCLP-4772

Citations are now rendered when viewing message descriptions using -help or -dump_messages
Previously, any citations found in reference manual message descriptions were replaced by whitespace when printing the description using -help or -dump_messages . Citations are now printed when using these options.

PCLP-4801

Improving the Integration of PC-lint Plus into Eclipse-based IDEs
Section Integrating PC-lint Plus with Eclipse-based IDEs has been reworked to define an output parser, highlight messages in the Console view, show parsed output in the Problems pane, allow navigation to code issues by selecting a message in the Problems or Console pane, and more.

PCLP-4802

Emphasize the effects of marking code as library on analysis
The documentation for options -libh , +libh , -libm , +libm , -libdir , +libdir , -library , +libclass , -elib , and flag flb have been updated to refer to the effects that marking code as library has on analysis by referring to flag flf for more information.

PCLP-4806

Better support IAR ARM compiler configurations for atomics
Previously some IAR compiler builtins for atomic operations were not accounted for in compiler.yaml and could lead to configuration errors. Those have been addressed.

PCLP-4808

Added getValue query for StringLiteral AST nodes
Previously, strings composing StringLiteral nodes could not be retrieved via queries. A getValue query, returning the string for any StringLiteral, was added.

PCLP-4850

Message 970 no longer emitted for postfix operator parameters
Message 970 (use of modifier or type outside of a typedef) is no longer emitted for the required int placeholder parameter of a postfix increment or decrement operator.

PCLP-4888

Harmonize emission conditions of messages 720, 820, and 9084
Messages 720 (boolean test of assignment), 820 (boolean test of parenthesized assignment), and 9084 (result of assignment operator used) are now all emitted for compound assignment operators and calls to overloaded assignment operator functions using infix syntax. Message 820 can no longer be suppressed by surrounding the expression in additional parentheses. The supplemental messages associated with messages 720 and 820 have been refined.

PCLP-4889

Message 9008 no longer emitted in template instantiations
Message 9008 (comma operator used) is no longer emitted when a comma is used as a fold operator in a fold expression, or within template instantiations.

PCLP-4899

Update description of message 606
The description of message 606 (non-ANSI escape sequence) has been updated to include the \u and \U sequences on the list of approved escape sequences. The description of the message has also been reformatted to address rendering issues with the text of the description.

PCLP-4904

Message 9436 now emitted for constant static data members
Message 9436 (symbol has array type) was previously suppressed for static data members that were declared as constexpr (in C++11 and later) or const-qualified (prior to C++11). This message is no longer automatically suppressed for this case. The previous behavior may be obtained using the option -equery(9436,"msgSymbolParam(1).VarDecl:{isStaticDataMember && isConstexpr}") (for constexpr static data members) or -equery(9436,"msgSymbolParam(1).VarDecl:{isStaticDataMember && getType.getNonReferenceType.isConstQualified}") (for const-qualified static data members).

PCLP-4916

Thread Analysis message source locations can now emit base names
Thread analysis messages, documented in the Thread Analysis section, with source locations will now respect negative values of the flag ffn and omit the base name of a file.

PCLP-4939

-deprecate options in coding standard configuration files no longer use deprecation commentary
The coding standard configuration files found in lnt/ previously used the commentary argument of the -deprecate option to include relevant Rule text when message 586 was emitted. Rule text for guidelines associated with message 586 are now added using the -append option.

PCLP-4947

Improve reporting of MISRA C 2012 AMD 4 Rule 22.18
Message 2457 replaces message 2531 for reporting violations of MISRA C 2012 AMD 4 Rule 22.18 in au-misra3-amd3.lnt.

PCLP-4959

Updated AUTOSAR append text to include the version
The AUTOSAR rules appended to relevant messages now include the version of AUTOSAR the message pertains to.

PCLP-4967

Use of coding standard configuration files represented in message 900
-append options have been added to coding standard configuration files which will cause message 900 to be appended with bracketed text indicating the configuration files used. Message 900 may be enabled with the option +e900.

PCLP-4992

pclp_config now accepts command line arguments when invoked from another python module
The pclp_config.py utility can now be called with command line arguments from another Python module without the need to invoke the script in a sub-process.

PCLP-4993

Deprecate CryptDecrypt and mktemp in au-cwe.lnt
CryptDecrypt is now deprecated as part of the support mechanisms for CWE-327. mktemp is now deprecated as part of the support mechanisms for CWE-377.

PCLP-5001

Corrected append text for CERT C Recommendation EXP05-C
Support for CERT C Recommendation EXP05-C now references the correct guideline.

PCLP-5002

Updated message description for error 52
The message description for 52 (expected an lvalue) previously referenced a defunct flag option and did not make it clear that any assignment operator may elicit the message. The message description has been updated to resolve these issues.

PCLP-5019

Support GCC configurations using C++23 with the pclp_config.py tool
The pclp_config.py tool has been updated to support C++23 configuration for GCC. Some additional standard flags have been added, specifically for C17 and C23.

PCLP-5030

Add message 1765
The new message 1765 (object has been previously self-moved but is used) will report when an object is used which had previously moved into itself.

PCLP-5035

Extend the fbl flag option to identifier lookups in dependent base classes
Enabling the fbl flag option previously allowed dependent base classes to be searched for type names encountered in class templates. This lookup behavior is now extended to identifiers when the fbl flag option is set.

PCLP-5039

Added isOrdinary, isWide, isUTF8, isUTF16, isUTF32, isUnevaluated, and containsNonAscii queries for StringLiteral AST nodes
Previously, the kind of a StringLiteral node could not be determined using queries, nor could it be determined whether the string represented by the node contained non-ASCII characters. New queries were added to allow for more detailed analysis of StringLiteral nodes.

PCLP-5049

Add support for GCC’s assume attribute
Previously, processing of GCC’s assume attribute could elicit an error message. This has been corrected.

PCLP-5056

Add section about PCLP_NO_LNT_VERSION_CHECK to the "Using PC-lint Plus in Safety Critical Applications" document
The "Using PC-lint Plus in Safety Critical Applications" document (doc/pclp-sca.pdf) now includes a section which describes the recommendation to not set the environment variable PCLP_NO_LNT_VERSION_CHECK.

PCLP-5065

C and C++ language standards can now be specified with pclpvscfg
Previously, the plpcvscfg utility did not provide a way to specify the language standard. In many cases, this is required to generate a valid Visual Studio compiler configuration. New menus allow the user to select C and C++ language standards.

PCLP-5066

Improve rendering of paragraph separations for -help and -dump_messages
The message descriptions emitted when using the -help and -dump_messages did not previously always separate paragraphs with an empty line. This has been corrected.

PCLP-5068

Add pclp_config option transformation for TI compilers defines
The pclp_config.py tool’s compilers.yaml file is updated to include the preprocessor define options for the Texas Instruments compilers.

PCLP-5076

Added new language option flags in database of pclp_config
The pclp_config.py tool has had the compilers.yaml file updated with language version flags from the latest versions of each compiler. This mostly includes additions of C17, C23, C++20, and C++23 support.

PCLP-5077

Informational message 2751 replaced with warning message 2541
Informational message 2751 is replaced with warning message 2541. The message indicates a condition that will likely cause false positive thread analysis warning messages.

PCLP-5078

Add project configuration support for Microchip compilers
Previously using any of the Microchip compilers as an argument to pclp_config.py while using –generate-project-config would not generate a complete project configuration. This capability has been added.

PCLP-5122

Enhance message presentation when enabling MISRA C 2012 amendments
The MISRA C 2012 amendment author files, au-misra3-amd1.lnt, au-misra3-amd2.lnt, au-misra3-amd3.lnt, and au-misra3-amd4.lnt, -append options have been modified to include additional text indicating the amendment used to enable a supporting message. This makes pinpointing the author file responsible for an issued message easier.

PCLP-5147

Use of MISRA guideline headline text
Copyrighted MISRA guideline headline text is now used (with permission) in the MISRA configuration files used to enable support for MISRA standards and in relevant support statements appearing in message descriptions. See the first page of the Messages chapter for relevant copyright information.

PCLP-5159

Updated the "Using PC-lint Plus in Safety Critical Applications" document
The "Using PC-lint Plus in Safety Critical Applications" document (located in doc/pclp-sca.pdf) has been updated with new guidance. See the "Revision History" section of that document for details.

PCLP-5174 PCLP-3195

Message 1946 no longer emits for functional casts using curly braces or those resulting in a constructor call
Previously, message 1946 (use of functional cast) was issued for functional casts using curly braces. For those resulting in constructor calls, only those that produced a call to an explicit constructor were excused. Now, functional casts using curly braces and those invoking a constructor are excused completely. This change aligns the behavior of the message with the specifications of MISRA C++:2023 Rule 8.2.2.

PCLP-5177

Noted potential limitation when using pclp_config.py with a non-English locale
The documentation has been updated to note that the pclp_config.py configuration script may not be able to extract expected information when generating a compiler configuration in an environment with a non-English locale.

23.1.5 Bugs Fixed



PCLP-2135

Fix 9003 false negative
File-scope static variables are now considered for message 9003 (could define variable at block scope).

PCLP-3198

Fixed false positive 9045 for nested structures
Message 9045 (complete definition of symbol is unnecessary in this translation unit) is no longer incorrectly issued for structures whose only use appears within another structure.

PCLP-3213

Resolved false positive 9119 for functional style casts using brace initialization
Previously, 9119 was erroneously emitted for functional style casts using braces instead of parenthesis. Both forms are explicit type conversions, and therefore not candidates for 9119. This defect has been corrected.

PCLP-3390

Resolved false positive 9034 when true and false macros are used as macro arguments
Previously, 9034 would occasionally misidentify the MISRA C 2012 essential type of true and false macros when used as macro arguments. Now, true and false macros are always correctly determined to be essentially boolean, thereby eliminating false positive emissions of 9034. Additionally, uppercase variants these macros (TRUE and FALSE) were incorrectly diagnosed as not essentially boolean. Now, such macros are considered essentially boolean.

PCLP-3734

Assumption that pointer may be null is now applied following a comparison against null
Resolves an issue where value tracking would fail to consider a pointer as potentially null where the pointer had previously been checked for null using a comparison against null.

PCLP-3848

Resolve false negative 1774 for if, while, for, and switch statement condition and/or initializer variables
Previously, 1774 remained silent for if/while/for/switch statement condition or initializer variables whose initializing expressions attempted a non-dynamic cast from one pointer type to another. This defect has been corrected.

PCLP-3856

Fix 438, 838, 522, and 523 false positives related to lambda captures
Lambdas which capture variables by reference are now considered by messages 438 , 838 , 522 , 523 .

PCLP-3867

Message hooks inappropriately executed for supplementals of suppressed messages
A message Hook could previously be executed for the supplemental message of a suppressed primary message, producing unexpected results. Message hooks are no longer executed for supplementals of suppressed messages.

PCLP-3967

Functions named "random" or "rand" within user-defined namespaces are no longer reported by message 2461
Previously, false positive instances of message 2461 were reported for functions by the name of "random" or "rand" within user-defined namespaces. The message now applies only to these functions when in namespace std or at global scope.

PCLP-4010

Fix false positive 9049 within lambda body
Message 9049 (increment/decrement operator used in expression with other side-effects) is no longer issued for increment and decrement expressions that are within the body of a lambda expression and which have no additional-side effects.

PCLP-4182

Resolved false negative 9060 in long block comments
Previously message 9060 (trigraph in comment), was not emitted if it was far inside of a block comment. This has been resolved all trigraphs in the block comment will be found.

PCLP-4260

Correction of internal error 795D141F in thread analysis semantic processing
Combinations of several thread analysis semantics and certain rare code sequences could cause an incomplete semantic state which would cause an internal error when referenced. The cause of the incomplete semantic state has been corrected.

PCLP-4332

Removed claim about 605’s applicability in message 1537’s description
The message 1537 (non-const pointer returned from const member function) previously claimed that message 605 (pointee implicitly gains/loses qualifier) would be emitted for returning the address of a class data member from a const function. This is incorrect and has been removed.

PCLP-4432

586 reports deprecated macros in a nested macro expansion
Deprecated macros appearing in a nested macro expansion will now be reported by message 586 .

PCLP-4440

Memory leaks fixed
Many small memory leaks were fixed, so PC-Lint Plus should use a slightly smaller peak memory use during execution.

PCLP-4465

Fixed false negative for 1781 and 1940 when parameter is reference to pointer
Previously messages 1781 and 1940 weren’t emitted when a reference parameter was assigned to another parameter which was a reference to pointer. These messages will now emit in such a scenario.

PCLP-4466

Fixed false positive for 1781 and 1940 when parameter is reference to pointer
Previously messages 1781 and 1940 were emitted in cases when the function parameter’s address being assigned wasn’t a reference type. These messages will not be emitted in such a scenario.

PCLP-4471

Potential crash when using defaulted virtual destructors in C++03 mode
An explicitly-defaulted overriding virtual destructor in a base class could previously cause PC-lint Plus to crash when analyzed in C++03 mode. This issue has been resolved.

PCLP-4487

Removed duplicate message 9436 when using an array function parameter in a template
Previously when message 9436 was emitted for an abstract template declaration of a function parameter, it was also emitted for each template instantiation as well. Now when that message is emitted in that scenario, it is only emitted once for the abstract template declaration.

PCLP-4509

Resolve false positive for 9128
Message 9128 (plain character data mixed with non-plain-character data) is no longer emitted for conditional operators where the second and third operands are both plain char types.

PCLP-4555

Variable access information in thread analysis function reports issued in inconsistent order
The variable access information in thread analysis function reports was emitted in an inconsistent order. The emitted information will now be ordered by variable name.

PCLP-4558

Messages 550, 551, 552, 727, 728, 729, and 738 will now respect all unevaluated contexts
Previously, messages 550 (local variable not accessed), 551 (static non-local variable not accessed), 552 (external variable not accessed), 727 (static local variable not initialized), 728 (static non-local variable not initialized), 729 (external variable not initialized), and 738 (address of static local variable not explicitly initialized before passed to a function) may have not considered all unevaluated contexts, such as *alignof * operators, constraint-expression of concept definitions, requires-clauses, and the requirement-seq of requires-expressions. Now they will consider these unevaluated contexts and possibly emit messages when the only access or initialization happened in an unevaluated context.

PCLP-4566

Thread Analysis messages issued in inconsistent order
The second phase thread analysis messages were emitted in an inconsistent order; these messages will now be emitted in a consistent order based upon the referenced object names.

PCLP-4571

Message 979, 1401, and 9175 locations have been fixed for out of line template class method instantiations
Message 979 (function could be marked with pure semantic) is now emitted at the location of an out of line method definition for a template class rather than the declaration when emitted for a specific instantiation. A duplicate emission of 1401 (non-static data symbol not initialized by constructor), and 9175 (function has void return type and no external side-effects) at the location of a template class method declaration for a specific instantiation with an out of line definition has been eliminated. These messages will only be emitted at the location of the out of line definition.

PCLP-4582

Duplicate 586 messages have been resolved
Message 586 (deprecated usage) was previously emitted multiple times for type deprecation when a type was elaborated with an explicit namespace. A duplicate basetype deprecation would also be emitted regardless if a type deprecation occurred, or if a basetype deprecation was already emitted. Both of these duplications have been resolved.

PCLP-4721

Limit the situations in which message 923 is enabled within au-misra3.lnt
The au-misra3.lnt configuration file contained an option whose intention was to enable message 923 (explicit cast between pointer and non-pointer types) only for casts involving void pointers but the message was also enabled for casts involving other uses of void (such as a pointer to a function that returns void) which had the potential to result in false positives. This has been corrected.

PCLP-4742

Resolve false positive 757, 758, 759, 768, 769 and false negative 749, 751, 752, 753, 754 in macro expansion
Previously a declaration in a macro expansion was considered to be in a header region regardless of whether it was written in the module or not. This may have resulted in false positives for messages 757 (global declarator not referenced), 758 (global tag type not referenced), 759 (header declaration could be moved from header to module), 768 (global structure member not referenced), or 769 (global enumeration constant not referenced). Additionally the corresponding messages 749 (local enumeration constant not referenced), 751 (local typedef not referenced), 752 (local declarator not referenced), 753 (local tag type not referenced), and 754 (local structure member not referenced) would not be emitted in place of 769 , 756 , 757 , 758 , or 768 respectively. Macro expansions are now considered to be in a header only if they are written there, which resolves these issues.

PCLP-4760

Resolved crash for CXXRecordDecl’s getLambdaStaticInvoker, isProvablyNotDerivedFrom, and isVirtuallyDerivedFrom’ queries
Previously a crash would occur if a query was evaluated for CXXRecordDecl’s getLambdaStaticInvoker and the class was not a lambda, or for isProvablyNotDerivedFrom, or isVirtuallyDerivedFrom where one of the participating classes did not have a definition. These crashes have been resolved.

PCLP-4761

Changed CXXRecordDecl’s isCLike and isDerivedFrom queries to return None for forward declarations
Previously forward declared classes might have provided a value when using CXXRecordDecl’s isCLike or isDerivedFrom queries. Now a None will be returned since the value of these queries are unknowable if a definition of the participating classes is not present in the module.

PCLP-4762

Correct return value for isLocalClass Query function
The isLocalClass Query function is documented as returning the enclosing function for local classes but previously returned a Boolean value indicating only whether or not the supplied class is local. The function now behaves as described in the documentation.

PCLP-4785

Eliminated some duplicated type deprecations
Previously type deprecations in C mode of struct, union, or enum types would result in duplicate message 586 (is deprecated) emissions. Only one message will be emitted in this scenario now.

PCLP-4818

Resolve false positive 1550 in lambda parameter default argument
The message 1550 (exception thrown in function call not on exception list) would previously be incorrectly issued for lambda function parameters that had a function call as a default argument if the exception from the call did not match the exception specification of the function enclosing the lambda function. Now the message is only issued if the function call in the default argument does not match the exception specification of the lambda expression itself.

PCLP-4872

Remove CWE-398 category
CWE-398 has been removed from the au-cwe.lnt file because CWE categories are not allowed in mapping files.

PCLP-4912

Internal error when using the hasICEInitializer Query function on a variable without an initializer
Use of the hasICEInitializer Query function on a variable that does not have an initializer would previously result in an internal error. This behavior has been corrected.

PCLP-4937

Internal error when using the getBitWidthValue Query function on a bit-field with value-dependent width
Calling the getBitWidthValue Query function on a bit-field with a value-dependent bit width expression could previously cause PC-lint Plus to terminate with an internal error. This behavior has been corrected.

PCLP-4957

Barr C rule 7.1.o not honored in the naming conventions
The previous implementation of naming convention rules resulted in false positives for variables that require multiple prefixes when utilizing the au-barr.lnt author file. This issue has been addressed by honoring the rule subset 7.1.o.

PCLP-4970

Fix hang when a using directive attempts to create a cycle in the strong type hierarchy
A hang that could occur when a self-referential using directive whose name was previously designated as a strong type is encountered has been resolved.

PCLP-4974

Resolve error messages related to enumeration template parameters with underlying character or Boolean types
Previously error messages such as 1024 (no matching function for call) may have be emitted in some instances where a template parameter of an enumeration with underlying type that is a character type or Boolean type. These error messages are no longer emitted.

PCLP-4986

Corrected message 1962 to be an Elective Note
Message 1962 was incorrectly labeled as an Informational message but is now corrected to be an Elective note.

PCLP-4987

Preprocessing-only mode now expands system headers
Previously, system headers may not have been expanded when using the -p option to only preprocess. This issue has been resolved and headers will always be expanded.

PCLP-5021

Corrected append text for CERT C rules
Update instance where rule DCL40-C was classified as a recommendation and correct append text for ARR37.

PCLP-5034

Added missing built-in function semantics for Qt’s QMutexLocker class
Usage of Qt’s QMutexLocker class would cause message 2752 and associated supplemental messages to be emitted because the built-in function semantics for the class members were incomplete. The missing built-in function semantics have been added.

PCLP-5036

Resolved internal errors 19F5CC61 and 998C0E63 for constrained function template arguments
Multiple instantiations of a C++20 constrained function template argument with a specialized class template would previously elicit an internal error. This has been resolved.

PCLP-5064

Correct default Visual Studio language standards
The pclp_config.py utility has been updated to provide a better default C and C++ language standard for each Visual Studio version.

PCLP-5067

Internal error 499C50D3 when processing indeterminate mutexes
It was previously possible to create an invalid locker object with an indeterminate mutex which could result in an internal error during later processing. This has been corrected.

PCLP-5087

Change the suppression options used to enable the messages supporting MISRA C Rule 11.6
The MISRA configuration files contained suppression options that enabled messages 177 , 179 , and 923 only for casts involving void pointers, but the messages were not enabled for qualified versions of void pointers, which resulted in potential false negatives. This has been corrected.

PCLP-5106

Removed message 754 and 768 for MISRA C Rule 2.8
Previously messages 754 (local member not referenced) and 768 (global member not referenced) were used to support MISRA C Rule 2.8, but now have been removed as they do not apply to this rule.

PCLP-5113

Resolved false negative 818, 843, 844, 952, 953, 954, 1764, and 1803 for initializer lists
Messages 818 (parameter could be pointer to const), 818 (parameter could be pointer to const), 843 (static variable could be const), 844 (static variable could be pointer to const), 952 (parameter could be const), 953 (local variable could be const), 954 (local variable could be pointer to const), 1764 (parameter could be reference to const) and 1803 (variable could be constexpr) previously would not be emitted if the object in question was used in a initializer list. These messages will now be emitted.

PCLP-5116

Resolved sporadic false negative 9012
In rare instances message 9012 (body should be a compound) would previously not have been emitted for offending code. This is now fixed and the message is now emitted consistently.

PCLP-5176

Update support claim for MISRA C++ 2008 rule 0-1-4 and AUTOSAR17/AUTOSAR19 rule M0-1-4
The support claim for the rules 0-1-4 and M0-1-4 was amended to partially supported. PC-lint Plus does not currently report on global non-static variables that are not referenced for the noted rules.

PCLP-5190

Corrected append text for several CERT C guidelines
Rules DCL41-C, SIG30-C, SIG31-C, SIG34-C, and SIG35-C were incorrectly appended with a recommendation label, while the recommendation ARR00-C was noted as being a rule.

23.1.6 Known Issues



PCLP-939

Message 756 is disabled
Message 756 (global typedef not referenced) is disabled in the current release.

PCLP-1039

Variable-not-accessed messages not issued for arrays
Messages 550 (local variable not accessed) and 552 (external variable not accessed) are not currently issued for variables of array type.

PCLP-2608

Message 522 incorrectly emitted for call to function that modifies object through pointer to const structure
Message 522 (highest operation lacks side effects) may be incorrectly emitted for the call to a function whose only side effect is to modify an object via a pointer to a const structure which itself contains a pointer-to-non-const member which is then used to modify an object.

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects
A false positive instance of message 522 may be emitted for a call to a const member function despite the presence of external side-effects.

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type
Message 1565 will report when an initializer function has not initialized a non-static data member of the class of which the initializer function is a non-static member function. It will not report based on the status of non-static data members of other objects nested recursively as sub-objects of a non-static data member of class type.

PCLP-3147

Messages 1579 does not work as expected
Message 1579 (non-static pointer data member may have been zeroed or freed in a separate method) is not emitted with the example provided in the message description and may similarly not be emitted in other situations.

PCLP-3223

The undocumented +fil flag is not implemented
The +fil flag, which would control whether or not indentation checking is applied to labels, is not implemented. This unimplemented flag is not documented in the list of flag options, but a reference to it is made in section 13.4.

PCLP-3485

False positive message 9175 for lambda functions that modify local variables captured by reference
Messages 9175 (function has void return type and no external side-effects) may be incorrectly emitted for closure type call operators that have a void return type and modify a local variable that has been captured by reference. The option -equery(9175, msgSymbolParam(1).CXXMethodDecl.getParent:isLambda and not isCapturelessLambda) may be used to suppress this message for all capturing lambdas.

PCLP-3489

Messages 9128 may be incorrectly emitted within the instantiation of a template with a non-type template parameter
Message 9128 (plain character data mixed with non-plain-character data) may be improperly emitted during the instantiation of a template containing a non-type template parameter, having a signed char or unsigned char underlying type, which is used in a context where 9128 would be appropriately emitted if the non-type template parameter instead had an underlying type of plain char.

PCLP-3803

False positive 650 for shifted values
Message 650 (constant out of range for operator) is sometimes incorrectly issued when the result of a shift expression is compared with a constant value.

PCLP-3881

Message 2650 incorrectly reported for redundant portion of comparison operators
Message 2650 (portion of compound comparison operator out of range) is sometimes reported when the comparison portion of a compound comparison operator is redundant instead of only when the comparison portion of a compound comparison operator is out of range.

PCLP-3894

Messages 9131 and 9240 do not treat dependent qualified identifiers as primary or postfix expressions
Messages 9131 (operand of logical operator is not a postfix expression) and 9240 (operand of logical operator is not a primary expression) do not treat dependent qualified identifiers as postfix expressions or primary expressions, respectively, when they should be recognized as both. This can result in false positive emissions of these messages when a dependent qualified identifier is used as an operand to a logical operator. The following options -equery(9131 9240, msgStringParam(1) == "left" && BinaryOperator.getLHS.CXXDependentScopeMemberExpr) and -equery(9131 9240, msgStringParam(1) == "right" && BinaryOperator.getRHS.CXXDependentScopeMemberExpr) may be used to suppress the false positives for these messages.

PCLP-4161

False positives for Strong Type messages when using template parameters
The Strong Type of a declaration which contains a template type in its instantiation will not evaluate to a Strong Type, even if one is provided as a template argument. There is currently no softener to exclude checks for these types. Suppressions can be made for false positives which occcur from template types. For example to suppress 633 for all push_back calls to a std::vector the following suppression can be used, -ecall(633, std::vector<*>::push_back).

PCLP-4299

False positive 587 and 650 for result of bitwise AND dependent on former sign bit of promoted value
Messages 587 (constant out of range for operator) and 650 (predicate can be pre-determined) may be incorrectly emitted when the non-constant portion of a comparison operation is a bitwise AND operator, itself having an operand that is a variable with a signed type that is smaller than int.

PCLP-4740

Message 9079 incorrectly emitted for some equality operations in C mode
Message 9079 (conversion from pointer to void to other pointer type) is incorrectly emitted for equality operators having a LHS operand of pointer to object type and a RHS operand of pointer to void type. This issue only occurs in C modules. The C Standard specifies that the pointer to object operand is converted to pointer to void in this case so the message indicating a conversion to object pointer type is undeserved.

PCLP-4749

Messages 754 and 768 do not consider appearances in member designators as references
Messages 754 (local member not referenced) and 768 (global structure member not referenced) do not consider the use of field names in the member designator of a designated initializer to constitute a reference. As a result, these messages may be emitted for fields whose only use occurs as a member designator.

PCLP-5127

Message 9057 not emitted for ull or Ull suffixes
Message 9057 (lowercase L follows ’u’ in literal suffix) is emitted for suffixes containing a single lowercase L (ul and Ul) but not for suffixes that contain multiple lowercase Ls (ull and Ull).

PCLP-5129

Message 9031 does not support expanded definition of composite expressions introduced in MISRA C:2023
Message 9031 (composite expression assigned to wider essential type) does not yet consider the bitwise operator ~ or the unary operators +/- to be composite operators, a change introduced in MISRA C:2023. This message will not be emitted for expressions that violate MISRA C:2023 Rule 10.6 by virtue of this updated guidance.

23.2 Version 2.2

23.2.1 Highlights

PC-lint Plus 2.2 improves support for C++20, introduces support for C++23, addresses compatibility issues with recent versions of GCC and Visual Studio, and resolves several defects.

23.2.2 Summary

New Features

PCLP-4697

Support for C++20 Module Partitions

Improvements

PCLP-3964

Added support for C++20 literal class non-type template parameters to Value Tracking

PCLP-4334

Resolved syntax errors when using recently updated versions of Visual Studio 2022 standard library headers in C++20 mode

PCLP-4647

Improved instructions for integrating PC-lint Plus with the SEGGER IDE

PCLP-4671

Add support for C17, C23, and C++23 language standards

PCLP-4708

Improved type printing

PCLP-4725

Added detail parameters to message 540

PCLP-4746

Improved Strong Types in deduced types and template argument deduction

PCLP-4750

Improve filenames for file metrics

Bugs Fixed

PCLP-1471

Resolved crash when missing enumeration constant is used in constexpr functions

PCLP-1643

Resolved crash when parsing overloaded shift operator with variadic arguments

PCLP-4270

Internal error D8BD27EC during instantiation of templated lambdas

PCLP-4285

Moved coroutine implementation out of experimental namespace

PCLP-4331

Resolved error when using a templated consteval function

PCLP-4682

Updated messages to support C++20 parenthesized list initialization

PCLP-4699

Fixed rendering of Unicode characters when dumping queries on Windows

PCLP-4704

Resolved false negative 578 for static local variables

PCLP-4711

Correct support for Keil armcc compiler

PCLP-4726

Fixed location information of message 631

PCLP-4727

Resolved false negative 9035 for VLA through typedef

PCLP-4728

Resolved false negative 971 when used as enum-base

PCLP-4729

Resolved false negative 9141 and 753 for friend class forward declarations

PCLP-4730

Resolved false negative 1901 and 1946 for variable templates

PCLP-4731

Resolved false negative 768 for multiple anonymous structs

PCLP-4732

Resolved false positive 9447 in template classes members with explicit template arguments

PCLP-4733

Resolved false positive 9447 with typedef return type

PCLP-4734

Resolved false positive 957 with internal linkage parameters

PCLP-4735

Resolved false positive 912 and 915 for enum with base promotable to int

PCLP-4736

Resolved false positive 911 for default template argument

PCLP-4737

Correct typename in messages 641 and 911 for enumerations with promotable integer base type

PCLP-4738

Change message number 541 to 2005

Known Issues

PCLP-939

Message 756 is disabled

PCLP-960

Message 9103 not issued for inter-module reuse

PCLP-2135

False negative 9003 for static variables

PCLP-2603

Message 767 is disabled

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type

PCLP-3198

False positive 9045 for nested structures

PCLP-3213

False positive implicit conversion messages when an explicit cast expression is used as a template argument for a non-type template parameter

PCLP-3223

The undocumented +fil flag is not implemented

PCLP-3803

False positive 650 for shifted values

PCLP-3856

False positive side-effect related messages for a lambda that has side effects

PCLP-4010

False positive 9049 within lambda body

PCLP-4046

False positive 1764 for universal reference parameter of template instantiated with a lambda

23.2.3 New Features



PCLP-4697

Support for C++20 Module Partitions
Support for C++20 Modules has been updated to add support for module partitions.

23.2.4 Improvements



PCLP-3964

Added support for C++20 literal class non-type template parameters to Value Tracking
Value Tracking can now analyze values derived from non-type template arguments of literal class type, which were introduced in C++20.

PCLP-4334

Resolved syntax errors when using recently updated versions of Visual Studio 2022 standard library headers in C++20 mode
Updated support for C++20 has resolved syntax errors in Visual Studio 2022 library headers when used with -std=c++20 including <type_traits> and headers specific to C++20 features.

PCLP-4647

Improved instructions for integrating PC-lint Plus with the SEGGER IDE
Updated the XML file used for integrating PC-lint Plus with the SEGGER IDE to correctly categorize messages.

PCLP-4671

Add support for C17, C23, and C++23 language standards
Support has been added for C17, C23, and C++23 language modes.

PCLP-4708

Improved type printing

  • The tag type keyword will only be present when printing types if it is specified in the source code for struct, enum, union, and class in C++ mode.

  • Namespace qualification won’t be added to types unless it is present in the source code.

  • Template class non-type default arguments are not printed unless they are specified to be a non-default value.

  • For an array type declared with typedef, the underlying type will also be printed after the typedef name.

  • Anonymous enums, structs, classes, and unions either printed as their symbol name if they were defined in a typedef, or as anonymous as well as the location of it’s definition to differentiate different anonymous types.

  • The type of nullptr (nullptr_t) will be prefixed with "std::" in C++ mode.

  • Array type qualifiers now come always come before the non-qualified element type, even if they are added implicitly or through typedef.

PCLP-4725

Added detail parameters to message 540
Message 540 (initializer-string for char array is too long) now has an extra parameters to explain the difference in the array size and the initializer size.

PCLP-4746

Improved Strong Types in deduced types and template argument deduction
Previously in the context of deduced (auto) types or template argument deduction, Strong Types (see section 7 Strong Types ) would not be preserved. Now Strong Types will be inferred for deduced types.

PCLP-4750

Improve filenames for file metrics
Filenames for file metrics no longer include current directory dot-slash prefixes and now respect the +ffn flag option.

23.2.5 Bugs Fixed



PCLP-1471 PCLP-4723

Resolved crash when missing enumeration constant is used in constexpr functions
Previously if an enumeration constant that was not defined, perhaps due to a misconfiguration, in the source code was used in a constexpr function, it would sometimes cause a crash. This is no longer the case.

PCLP-1643

Resolved crash when parsing overloaded shift operator with variadic arguments
Previously parsing the definition of an overloaded shift operator with variadic arguments would cause a crash, but now it does not.

PCLP-4270

Internal error D8BD27EC during instantiation of templated lambdas
Instantiation of templated lambdas could previously result in an internal error D8BD27EC. This issue has been corrected.

PCLP-4285

Moved coroutine implementation out of experimental namespace
Previously the C++20 standard header file coroutine declared its contents in the std::experimental namespace. Now it exists in the proper std namespace.

PCLP-4331

Resolved error when using a templated consteval function
Previously trying to evaluate a templated consteval function in a template context would issue an error message. Now these evaluations will no longer issue an error message.

PCLP-4682

Updated messages to support C++20 parenthesized list initialization
Messages 414 (possible division by zero), 453 (impure function marked pure), 564 (result depends on order of evaluation), 1762 (member function could be const), and 9084 (assignment used in a larger expression) now account for parenthesized list initialization that C++20 introduced.

PCLP-4699

Fixed rendering of Unicode characters when dumping queries on Windows
When using +dump_queries(unicode), previously some Unicode characters representing the tree structure of the query would be emitted as ?. Now these characters are correctly emitted as UTF-8 encoded characters and can be viewed in terminals and text editors that support it.

PCLP-4704

Resolved false negative 578 for static local variables
Previously message 578 would not be emitted for static local variables, now a message will be emitted for them.

PCLP-4711

Correct support for Keil armcc compiler
The changes previously introduced in PCLP-4346 incorrectly targeted the Keil uVision armclang compiler instead of the armcc compiler. The compiler database entry for keil_armcc has been corrected.

PCLP-4726

Fixed location information of message 631
Message 631 (tagged symbol defined differently) previously would emit the location of a forward declaration in another module, not the definition. Now it will provide the location of the definition in another module.

PCLP-4727

Resolved false negative 9035 for VLA through typedef
Message 9035 (variable length array declared) will now be emitted for variable length arrays declared using a type defined with a typedef.

PCLP-4728

Resolved false negative 971 when used as enum-base
Message 971 (use of plain char) will now be emitted for enumerations that specify a plain char as their enum-base.

PCLP-4729

Resolved false negative 9141 and 753 for friend class forward declarations
Message 9141 (global declaration of symbol) and message 753 (local type not referenced) will now be emitted type declared using a friend class forward declaration.

PCLP-4730

Resolved false negative 1901 and 1946 for variable templates
Message 1901 (creating a temporary) and message 1946 (use of functional-style cast) will now be emitted in the context of variable templates.

PCLP-4731

Resolved false negative 768 for multiple anonymous structs
Message 768 (global structure member not referenced) would previously only emit for non-referenced members of the first encountered global anonymous struct. Now the message is emitted for all non-referenced members of all global anonymous structs.

PCLP-4732

Resolved false positive 9447 in template classes members with explicit template arguments
Message 9447 (non-standard user defined assignment operator return) would previously be emitted in the context of template class assignment operator which specified a return type of that class explicitly using template arguments. In this case, the message is no longer emitted.

PCLP-4733

Resolved false positive 9447 with typedef return type
Message 9447 (non-standard user defined assignment operator return) would previously be emitted when returning the class type defined with a typedef. In this case, the message is no longer emitted.

PCLP-4734

Resolved false positive 957 with internal linkage parameters
Message 957 (function defined without a prototype) would previously be emitted for functions that have parameter types with internal linkage. In this case, the message is no longer emitted since those parameter types prevent the function from having external linkage.

PCLP-4735

Resolved false positive 912 and 915 for enum with base promotable to int
Message 912 (arithmetic conversions applied to binary operand beyond integer promotion) and message 915 (implicit arithmetic conversion) will no longer be emitted for enumeration types with an enum-base type that would receive an integer promotion to the int type.

PCLP-4736

Resolved false positive 911 for default template argument
Message 911 (implicit promotion) will no longer be emitted for default non-type template arguments in which the type is larger than the type of the expression provided.

PCLP-4737

Correct typename in messages 641 and 911 for enumerations with promotable integer base type
Message 911 (implicit promotion) will now emit the enumeration’s type instead of an underlying enum-base type. Message 641 (implicit conversion of enum to integral type) will now emit the underlying enum-base type after integer promotion in the context of a bitshift, if it is a type promotable to int, instead of just the underlying enum-base type.

PCLP-4738

Change message number 541 to 2005
Previously when a character escape sequence was out of range warning 541 would be emitted, but now error 2005 is emitted. This was changed because the desired value of the character or string literal cannot be determined or inferred in this scenario.

23.2.6 Known Issues



PCLP-939

Message 756 is disabled
Message 756 (global typedef not referenced) is disabled in the current release.

PCLP-960

Message 9103 not issued for inter-module reuse
Message 9103 (identifier with static storage reused) is not issued when a reuse of a static storage identifier occurs in a separate module.

PCLP-2135

False negative 9003 for static variables
A file-scope static variable referenced only within a single function will not be reported by 9003 . The message will be issued for variables that are implicitly or explicitly extern.

PCLP-2603

Message 767 is disabled
Message 767 is disabled in the current release.

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects
A false positive instance of message 522 may be emitted for a call to a const member function despite the presence of external side-effects.

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type
Message 1565 will report when an initializer function has not initialized a non-static data member of the class of which the initializer function is a non-static member function. It will not report based on the status of non-static data members of other objects nested recursively as sub-objects of a non-static data member of class type.

PCLP-3198

False positive 9045 for nested structures
Message 9045 (complete definition of symbol is unnecessary in this translation unit) may be incorrectly issued for structures whose only use appears within another structure.

PCLP-3213

False positive implicit conversion messages when an explicit cast expression is used as a template argument for a non-type template parameter
When providing a cast expression as a template argument to a non-type template parameter some messages described as reporting implicit conversions may be issued as if the cast operand were implicitly converted to the cast type.

PCLP-3223

The undocumented +fil flag is not implemented
The +fil flag, which would control whether or not indentation checking is applied to labels, is not implemented. This unimplemented flag is not documented in the list of flag options, but a reference to it is made in section 13.4.

PCLP-3803

False positive 650 for shifted values
Message 650 (constant out of range for operator) is sometimes incorrectly issued when the result of a shift expression is compared with a constant value.

PCLP-3856

False positive side-effect related messages for a lambda that has side effects

PCLP-4010

False positive 9049 within lambda body
Message 9049 (increment/decrement operator used in expression with other side-effects) is incorrectly issued for increment and decrement expressions appearing as part of a statement without additional side-effects within the body of a lambda expression.

PCLP-4046

False positive 1764 for universal reference parameter of template instantiated with a lambda
Message 1764 (reference parameter of function could be reference to const) may be incorrectly issued when a function template is instantiated with a lambda as the argument corresponding to a universal reference parameter.

23.3 Version 2.1

23.3.1 Highlights

PC-lint Plus 2.1 includes several new featues and numerous improvements including:

23.3.2 Summary

New Features

PCLP-3086

Add compiler configuration support for Green Hills compilers

PCLP-3607

Add compiler configuration support for SEGGER compilers

PCLP-3763

Introductory support for CWE

PCLP-3874

Support for C++20 Modules module and import syntax and new -build_module_interface_unit option to build C++20 module interface units

PCLP-4039

New function metrics for incoming and outgoing function calls

PCLP-4256

Support C++20 using enum

PCLP-4352

New fql flag option to control Query execution in library regions

PCLP-4382

New metric function.num_switch_cases

PCLP-4396

Support MISRA C 2012 AMD-4 Rule 9.6 using messages 2903 and 2904

Improvements

PCLP-1519

Add Boolean function result inferencing for Value Tracking

PCLP-2197

Add anchored expressions to Value Tracking messages to enable -equery suppressions

PCLP-3197

False negative instance of message 9034 involving compound assignment

PCLP-3344

Add pclp_config version to generated compiler configuration header files

PCLP-3351

Improve side effect classification for GNU Statement Expressions

PCLP-3622

Document integration with Visual Studio Code

PCLP-3623

Fix typo in custom message text for BARR-C 5.1a

PCLP-3689

Correct omission of documentation for existing C++98 support in description of -std and fix various trivial documentation typos

PCLP-3780

Expand recognition of Boolean type hierarchies defined using Strong Types when determining whether an expression is Boolean for the purposes of MISRA C 2004 rules

PCLP-3811

Add no_specific_walk semantic, a new name for the previously undocumented nowalk semantic

PCLP-3840

Add support for asm and __asm keywords for IAR compiler configs

PCLP-3859

Resolve additional spurious pre-run crash messages caused by remote code injection by antivirus software

PCLP-3873

Improve compiler configuration support for Microchip XC8

PCLP-3888

Added missing thread analysis semantic documentation

PCLP-3903

Improved pclp_config support for extracting compiler predefined macros

PCLP-4002

Support __atomic_is_lock_free built-in for sizes up to long long

PCLP-4231

Updated descriptions for messages 9225 and 1502

PCLP-4235

Expanded description of +fnr to clarify that it specifically applies to functions not available to be walked

PCLP-4238

New –shell-parse-compiler-options option for pclp_config.py

PCLP-4245

Add instructions for locating GCC compiler for STM32CubeIDE users

PCLP-4248

Recognize TI –include_path options with unquoted paths

PCLP-4250

Updated descriptions of message 759 and the flo flag option

PCLP-4251

Expanded support for __int128, __int128_t, and __uint128_t

PCLP-4262

Add version number, date, and revision history to "Using PC-lint Plus in Safety Critical Applications" document

PCLP-4266

New faa flag option controls aligned allocations

PCLP-4272

New Query functions for working with types

PCLP-4291

Support accessing contextual values of non-persistent variables within the body of echo expressions in Queries

PCLP-4301

Support for MISRA C 2012 AMD-3

PCLP-4302

Add new message 9202 to support MISRA C 2012 AMD-3 Rule 6.3

PCLP-4303

Add new message 9203 to support MISRA C 2012 AMD-3 Rule 8.16

PCLP-4304

Add new message 9205 to support MISRA C 2012 AMD-3 Rule 8.17

PCLP-4305

Add new message 841 to support MISRA C 2012 AMD-3 Rule 17.10

PCLP-4306

Add new message 9211 to support MISRA C 2012 AMD-3 Rule 23.1

PCLP-4307

Add new message 2419 and 9213 to support MISRA C 2012 AMD-3 Rule 23.2

PCLP-4308

Add new message 9208 to support MISRA C 2012 AMD-3 Rule 23.3

PCLP-4309

Add new message 2416 to support MISRA C 2012 AMD-3 Rule 23.4

PCLP-4310

Add new message 9210 to support MISRA C 2012 AMD-3 Rule 23.8

PCLP-4312

Add new message 2505 to support MISRA C 2012 AMD-3 Rule 7.5

PCLP-4313

Add new messages 2502 and 9503 reporting alignment conflicts to support MISRA C 2012 AMD-3 Rule 8.15

PCLP-4314

Add new message 2417 to support MISRA C 2012 AMD-3 Rule 17.13

PCLP-4316

Add new messages 2504 and 9504 to support MISRA C 2012 AMD-3 Rule 21.22

PCLP-4317

Add new message 9218 to support MISRA C 2012 AMD-3 Rule 21.23

PCLP-4318

Add new message 9214 to support MISRA C 2012 AMD-3 Rule 23.5

PCLP-4319

Add new message 9216 to support MISRA C 2012 AMD-3 Rule 23.6

PCLP-4320

Add new message 9219 to support MISRA C 2012 AMD-3 Rule 23.7

PCLP-4321

Updates to au-misra3.lnt and au-misra3-amd2.lnt as per MISRA C 2012 Amendment 3

PCLP-4322

Add complex floating essential type for MISRA C 2012 AMD-3

PCLP-4326

Add support for Visual Studio /FI and /external:I options

PCLP-4330

Correct false positive 779 messages issued for type-dependent expressions

PCLP-4337

Detect character size when generating compiler configurations for TI compilers

PCLP-4340

Exclude ti_edg implementation detail compiler database entry from the list of compilers shown by pclp_config

PCLP-4342

Add support for compiler relative include file search directories.

PCLP-4343

Remove temporary compiler generated files within the configuration utility pclp_config

PCLP-4344

Improved and corrected determining of compiler versions within the pclp_config utility.

PCLP-4349

Improved error messages for pclp_config when a command uses –compiler-database where –compilation-db was intended

PCLP-4353

Updated manufacturer of the Freescale compilers

PCLP-4355

Correct minor issues in generated Visual Studio compiler configuration files

PCLP-4358

Improved Visual Studio configuration file comments

PCLP-4387

Include right shifts for message 9053

PCLP-4389

Message 527 now reports code that is unreachable due to a prior infinite loop

PCLP-4390

Recognize the assignment of a constant value in a Boolean context as itself representing a constant value

PCLP-4392

Support MISRA C 2012 AMD-4

PCLP-4398

Support MISRA C 2012 AMD 4 Rule 18.10

PCLP-4409

Support MISRA C 2012 AMD 4 Rule 12.6

PCLP-4416

Improved pclp_config support for Visual Studio compiler options that start with a dash

PCLP-4425

Revise when thread analysis processing is inhibited

PCLP-4428

New message 1797 improves support for MISRA C++ Rule 14-5-3 and AUTOSAR M14-5-3

PCLP-4429

Add warning message for when an object is used as a mutex and then as a locker.

PCLP-4436

Enable include_next preprocessor keyword in TI compiler configurations generated by pclp_config

PCLP-4453

Examples added to description of the -cond option

PCLP-4459

Note the constraints of -setenv when used in a configuration file

PCLP-4491

Recognize C++23 feature test macros in pclp_config

PCLP-4538

Additional instructions for integrating PC-lint Plus with IAR Embedded Workbench

PCLP-4590

Improved link navigation for Revision History entries

PCLP-4595

Improved instructions for integrating PC-lint Plus with Visual Studio Code

PCLP-4606

Updates to au-misra3.lnt and au-misra3-amd2.lnt as per MISRA C 2012 Amendment 4

PCLP-4660

Improve Keil ARMCC and Microchip XC8 compiler configuration generation

PCLP-4669

Improved support for Microchip XC8 keywords and predefined macros

Bugs Fixed

PCLP-3201

Correct false negative 9102 for digraph sequence "<:"

PCLP-3551

False positive 725 within template instantiations

PCLP-3569

Correct false positive 550 for braced member-init-lists

PCLP-3660

Correct false positive 776 for the summation of two ints cast to a long of the same size

PCLP-4230

False positive message 9006 for dependent sizeof expressions

PCLP-4243

Correct rare memory corruption in thread analysis semantic processing

PCLP-4244

Correct rare memory corruption in file stream semantic processing

PCLP-4246

Resolve crash/internal error 292B4782 for constant division by zero

PCLP-4254

Resolve false positive instances of messages 550, 551, and 552 for rewritten comparison operators in C++20

PCLP-4255

Correct handing of C/C++ options when determining size options in pclp_config

PCLP-4258

Update pclp_config to prefer setting size_t to unsigned long over unsigned long long when both types are the same size to match recommendation from C++ standard

PCLP-4265

False negative messages 1524, 1732, and 1733 for new expression appearing in a member init list

PCLP-4269

Memory leak when using -cond and -egrep/+egrep options

PCLP-4273

Correct false positive message 504 for shift assignment operators

PCLP-4275

Resolve internal error 187F3BF3 (-37)

PCLP-4297

False negative 785 for uninitialized members of a structure nested within a union

PCLP-4300

Correct name of the file argument of the thread_report options in built in help and the Reference Manual.

PCLP-4336

Remove unimplemented pclp_config option –ignore-options

PCLP-4341

Resolve a crash/internal error/hang that could occur during Global Wrap-up when using the Metrics feature on a large project using many concurrent analysis threads

PCLP-4345

Remove inapplicable C++ configuration from the Microchip XC8 and XC16 compiler database entries

PCLP-4346

Correct handing of C/C++ options when determining size options in pclp_config

PCLP-4350

Correct false positive 9107 for class template static data members

PCLP-4351

Resolve internal errors when evaluating certain Hook fields or Query functions for value-dependent expressions

PCLP-4361

Correct false positive 9102 for digraph sequence "<::"

PCLP-4375

Incorrect deprecation text for AUTOSAR Rule M18-7-1

PCLP-4414

Updated pclp_config to handle fixed precision floating point types in standard header files

PCLP-4446

Internal error when the isCXX11ConstantExpr Query function is evaluated in a C module

PCLP-4463

Incorrect library region determination for certain Hook events

PCLP-4464

User-defined hooks executed twice for label statements

PCLP-4516

Corrected invalid string escape sequences in pclp_config

PCLP-4534

Resolve Python error while generating include options when using pclp_config.py to generate a compiler configuration without specifying a compiler binary using –compiler-bin

PCLP-4567

Resolved an issue in Value Tracking that manifested as a hang before crashing due to memory exhaustion

PCLP-4577

Inappropriate evaluation of Query echo reflections

PCLP-4597

Resolved false negatives of message 550 and 551 due to supressions

PCLP-4630

Enable usage of _Float16 and __bf16 types

PCLP-4636

Enable usage of _Complex _Float16 type

PCLP-4679

Resolve false negatives in the value of the file.num_include_directives metric in Linux and macOS builds of PC-lint Plus

Known Issues

PCLP-939

Message 756 is disabled

PCLP-960

Message 9103 not issued for inter-module reuse

PCLP-2135

False negative 9003 for static variables

PCLP-2603

Message 767 is disabled

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type

PCLP-3198

False positive 9045 for nested structures

PCLP-3213

False positive implicit conversion messages when an explicit cast expression is used as a template argument for a non-type template parameter

PCLP-3223

The undocumented +fil flag is not implemented

PCLP-3803

False positive 650 for shifted values

PCLP-3856

False positive side-effect related messages for a lambda that has side effects

PCLP-4010

False positive 9049 within lambda body

PCLP-4046

False positive 1764 for universal reference parameter of template instantiated with a lambda

AUTOSAR Summary

PCLP-4361

Correct false positive 9102 for digraph sequence "<::"

PCLP-4230

False positive message 9006 for dependent sizeof expressions

PCLP-3201

Correct false negative 9102 for digraph sequence "<:"

MISRA Summary

PCLP-4428

New message 1797 improves support for MISRA C++ Rule 14-5-3 and AUTOSAR M14-5-3

PCLP-4409

Support MISRA C 2012 AMD 4 Rule 12.6

PCLP-4398

Support MISRA C 2012 AMD 4 Rule 18.10

PCLP-4396

Support MISRA C 2012 AMD-4 Rule 9.6 using messages 2903 and 2904

PCLP-4392

Support MISRA C 2012 AMD-4

PCLP-4387

Include right shifts for message 9053

PCLP-4350

Correct false positive 9107 for class template static data members

PCLP-4322

Add complex floating essential type for MISRA C 2012 AMD-3

PCLP-4321

Updates to au-misra3.lnt and au-misra3-amd2.lnt as per MISRA C 2012 Amendment 3

PCLP-4320

Add new message 9219 to support MISRA C 2012 AMD-3 Rule 23.7

PCLP-4319

Add new message 9216 to support MISRA C 2012 AMD-3 Rule 23.6

PCLP-4318

Add new message 9214 to support MISRA C 2012 AMD-3 Rule 23.5

PCLP-4317

Add new message 9218 to support MISRA C 2012 AMD-3 Rule 21.23

PCLP-4314

Add new message 2417 to support MISRA C 2012 AMD-3 Rule 17.13

PCLP-4313

Add new messages 2502 and 9503 reporting alignment conflicts to support MISRA C 2012 AMD-3 Rule 8.15

PCLP-4312

Add new message 2505 to support MISRA C 2012 AMD-3 Rule 7.5

PCLP-4310

Add new message 9210 to support MISRA C 2012 AMD-3 Rule 23.8

PCLP-4309

Add new message 2416 to support MISRA C 2012 AMD-3 Rule 23.4

PCLP-4308

Add new message 9208 to support MISRA C 2012 AMD-3 Rule 23.3

PCLP-4307

Add new message 2419 and 9213 to support MISRA C 2012 AMD-3 Rule 23.2

PCLP-4306

Add new message 9211 to support MISRA C 2012 AMD-3 Rule 23.1

PCLP-4305

Add new message 841 to support MISRA C 2012 AMD-3 Rule 17.10

PCLP-4304

Add new message 9205 to support MISRA C 2012 AMD-3 Rule 8.17

PCLP-4303

Add new message 9203 to support MISRA C 2012 AMD-3 Rule 8.16

PCLP-4302

Add new message 9202 to support MISRA C 2012 AMD-3 Rule 6.3

PCLP-4301

Support for MISRA C 2012 AMD-3

PCLP-4230

False positive message 9006 for dependent sizeof expressions

PCLP-3780

Expand recognition of Boolean type hierarchies defined using Strong Types when determining whether an expression is Boolean for the purposes of MISRA C 2004 rules

PCLP-3201

Correct false negative 9102 for digraph sequence "<:"

PCLP-3197

False negative instance of message 9034 involving compound assignment

PCLP-4606

Updates to au-misra3.lnt and au-misra3-amd2.lnt as per MISRA C 2012 Amendment 4

PCLP-4316

Add new messages 2504 and 9504 to support MISRA C 2012 AMD-3 Rule 21.22

PCLP-4010

False positive 9049 within lambda body

23.3.3 New Features



PCLP-3086

Add compiler configuration support for Green Hills compilers
Compiler configurations for the Green Hill Software compiler drivers can now be generated with the pclp_config installation and configuration utility. All of the compiler drivers are supported via a –compiler option value of either ghs for mixed or C++ specific source files or ghs_c for C specific source files that uses any GHS C headers that have conflicts with the corresponding C++ headers.

PCLP-3607

Add compiler configuration support for SEGGER compilers
Compiler configurations for the SEGGER’s gcc and segger-cc can now be generated using the pclp_config.py utility. Sections 2.3.12 and 2.3.21 were added to provide instructions on the process of generating a compiler configuration and integrating PC-lint Plus with the SEGGER IDE.

PCLP-3763

Introductory support for CWE
The new au-cwe.lnt author file (in the lnt/ directory of the PC-lint Plus distribution) enables support for CWE. In addition, a CWE Coverage Claim Representation (au-cwe.xml) is also available in the lnt/ directory.

PCLP-3874

Support for C++20 Modules module and import syntax and new -build_module_interface_unit option to build C++20 module interface units
The new option -build_module_interface_unit(filename[, module_decl_name]) can now be used to build C++20 module interface units to be imported by import or module declarations in other translation units. The optional second argument must be used to provide the name of the module if the module name differs from the file’s base name. Support for C++20 Modules in PC-lint Plus is currently limited to the subset of C++20 Modules functionality provided by clang 12. In particular, module partitions are not supported.

PCLP-4039

New function metrics for incoming and outgoing function calls
The new function metrics num_incoming_calls, num_calling_functions, and num_called_functions now provide access to the number of incoming calls, the number of distinct functions making at least one incoming call, and the number of distinct functions called by a particular function.

PCLP-4256

Support C++20 using enum
The C++20 using enum feature is now supported.

PCLP-4352

New fql flag option to control Query execution in library regions
The new fql flag option may be used to disable Queries evaluation in library regions.

PCLP-4382

New metric function.num_switch_cases
The new metric function.num_switch_cases represents the total number of case and default cases across all switch statements within a function.

PCLP-4396

Support MISRA C 2012 AMD-4 Rule 9.6 using messages 2903 and 2904
The new message 2903 reports when an initializer list mixes chained designators and positional initializers. The new message 2904 reports when a sub-object is initialized via braced initializer list with at least one positional init and a chained designator somewhere else in the containing init list. Together, these new messages implement MISRA C AMD-4 Rule 9.6.

23.3.4 Improvements



PCLP-1519 PCLP-4422 PCLP-4040

Add Boolean function result inferencing for Value Tracking
Support for inferencing in Value Tracking has been extended to improve support for common smart pointer usage patterns with the recognition of conditional dereferences in the scope of pointer tests made indirectly using Boolean functions (including operator bool). Additionally, Value Tracking now walks rewritten binary operators generated by reliance on three-way comparison functions.

PCLP-2197

Add anchored expressions to Value Tracking messages to enable -equery suppressions
Value Tracking messages now provide anchored expressions when available to enable AST-based suppressions using -equery. Anchor information for an emitted message can be found using the +paraminfo option.

PCLP-3197

False negative instance of message 9034 involving compound assignment
False negative instances of message 9034 for compound assignment operators assigning to objects with types ranked lower than int and unsigned int have been resolved. Previously, the messages affected by this false negative were only emitted when the option -misra_interpret(c2012,essential type differs from standard type only for int and unsigned int) was used.

PCLP-3344

Add pclp_config version to generated compiler configuration header files
The pclp_config utility now includes a comment with version information in generated compiler configuration header files.

PCLP-3351

Improve side effect classification for GNU Statement Expressions
The classification of top-level and inner side effects for the GNU Statement Expression language extension has been improved to resolve false positive instances of 523 for statement expressions with inner side effects. This also resolves false negative instances of message 522 for top-level statement expressions and related side effect interactions for other messages such as 9007 .

PCLP-3622

Document integration with Visual Studio Code
Visual Studio Code is now included among the list of IDEs with PC-lint Plus integration instructions in the Reference Manual.

PCLP-3623

Fix typo in custom message text for BARR-C 5.1a
An extra space following the typedef name included within single quotes in the text of the custom message 8527 emitted by a -astquery option in au-barr.lnt has been corrected.

PCLP-3689

Correct omission of documentation for existing C++98 support in description of -std and fix various trivial documentation typos
The description of the -std option has been updated to correct the previous omission of c++98 from the documented list of valid arguments to this option. Several trivial spelling and grammar issues throughout the documentation have also been fixed.

PCLP-3780

Expand recognition of Boolean type hierarchies defined using Strong Types when determining whether an expression is Boolean for the purposes of MISRA C 2004 rules
One of the methods by which an expression could be considered Boolean for the purposes of messages used to support MISRA C 2004 rules 12.6 (9232 ), 13.1 (9236 ), 13.2 (9224 ), and 15.4 (9238 ) is through the Strong Type of the expression. Previously, the Strong Type of the expression would only cause the expression to be considered Boolean for this purpose if the Strong Type of the expression was the designated Strong Boolean Type (set by a -strong option using either the B or b flag). This Boolean classification now also recognizes an expression whose Strong Type is not identical to the Strong Boolean Type but is convertible to it through a type hierarchy as Boolean for the purpose of these rules.

PCLP-3811

Add no_specific_walk semantic, a new name for the previously undocumented nowalk semantic
Previous versions of PC-lint Plus recognized an undocumented function semantic nowalk which could inhibit Value Tracking from performing specific walks of a function while still permitting the general walk to occur. This semantic has been renamed no_specific_walk and documented. The previous name is retained as an alias for compatibility.

PCLP-3840

Add support for asm and __asm keywords for IAR compiler configs
IAR compiler configurations did not previously include the __asm keyword as an option to specify in-line assembly. This change adds support for this keyword. Additionally, support for both asm and __asm was added to the IAR 8051 compiler configuration.

PCLP-3859 PCLP-4047

Resolve additional spurious pre-run crash messages caused by remote code injection by antivirus software
Spurious non-fatal crash messages with exception code 0x4001000A or 0x40010006 caused by remote code injection by certain antivirus software will no longer be emitted.

PCLP-3873

Improve compiler configuration support for Microchip XC8
The pclp_config compiler database has been updated to improve support for the Microchip XC8 compiler when generating a compiler configuration.

PCLP-3888

Added missing thread analysis semantic documentation
The thread analysis function semantics async, thread_lock, thread_unlock, thread(thread_name), and thread_mono(thread_name) were not documented. The reference manual has been updated.

PCLP-3903

Improved pclp_config support for extracting compiler predefined macros
The extracted predefined macros could be incomplete (Visual Studio) or absent (Microchip XC8). Newer versions of Visual Studio provide a method to dump predefined macros. This new method is used and if it fails the prior method is used. Instructions for the Microchip XC8 predefined macros has been added.

PCLP-4002

Support __atomic_is_lock_free built-in for sizes up to long long
The __atomic_is_lock_free built-in used by standard library implementations now returns true for sizes up to the size of long long.

PCLP-4231

Updated descriptions for messages 9225 and 1502
The description of message 9225 has been updated to correct a typo and the description of message 1502 updated to more accurately articulate the message parameterizations.

PCLP-4235

Expanded description of +fnr to clarify that it specifically applies to functions not available to be walked
The description of the fnr flag now notes that it applies only to functions not available to be walked and describes when this occurs.

PCLP-4238

New –shell-parse-compiler-options option for pclp_config.py
The pclp_config.py script now supports the new option –shell-parse-compiler-options which can be used to opt-in to shell-like parsing of the arguments for –compiler-options, –compiler-c-options, and –compiler-cpp-options. The behavior of this shell-like parsing is controlled by the –posix-command-parsing and –no-posix-command-parsing options.

PCLP-4245

Add instructions for locating GCC compiler for STM32CubeIDE users
Section 2.3.3 now includes instructions for extracting the location of the GCC compiler from within the STM32CubeIDE development tool.

PCLP-4248

Recognize TI –include_path options with unquoted paths
When generating compiler configurations for TI compilers, providing an unquoted path with the option –include_path resulted in a failure to represent that path in the generated .lnt file. This change resolves the issue, allowing unquoted file paths to be used with –include_path.

PCLP-4250

Updated descriptions of message 759 and the flo flag option
Message 759 (header declaration for symbol could be moved from header to module) may be issued within a library region if the referenced symbol is a non-library symbol, such as occurs when a declaration for the symbol also appears in a non-library region when the flo flag option is OFF (the default). The description of message 759 previously implied that the message would never be issued within a library region.
The description of the flo flag option now notes that library suppressions are not applied in certain situations.

PCLP-4251

Expanded support for __int128, __int128_t, and __uint128_t
The non-standard __int128 keyword and the __int128_t and __uint128_t typedefs are now supported by default. Support was previously only enabled when using -sp8 or -sp16.

PCLP-4262

Add version number, date, and revision history to "Using PC-lint Plus in Safety Critical Applications" document
The "Using PC-lint Plus in Safety Critical Applications" document (doc/pclp-sca.pdf) now includes a version number and date on the title page and concludes with a new revision history section.

PCLP-4266

New faa flag option controls aligned allocations
A new flag faa has been added to enable or disable C++17 aligned allocations for a project.

PCLP-4272

New Query functions for working with types
New Query functions have been added to provide direct access to fundamental types (getVoidType, getBoolType, getCharType, etc.), obtaining the size of types (getTypeSizeInBits and getTypeSizeInChars), converting between bits and char units (toCharUnitsFromBits and toBitsFromCharUnits), obtaining the canonical type of a given type (getCanonicalType), and obtaining the integral type corresponding to a specific bit width (getSignedIntTypeForBitwidth and getUnsignedIntTypeForBitwidth).

PCLP-4291

Support accessing contextual values of non-persistent variables within the body of echo expressions in Queries
The values of non-persistent variables at the time that an echo was registered can now be accessed during the later evaluation of the echo body.

PCLP-4301

Support for MISRA C 2012 AMD-3
MISRA C 2012 Amendment 3 is now supported using the provided au-misra3-amd3.lnt file found in the lnt/ directory of the PC-lint Plus distribution.

PCLP-4302

Add new message 9202 to support MISRA C 2012 AMD-3 Rule 6.3
The new message 9202 (bitfield declared as member of union) reports member bitfields declared in unions and supports MISRA C 2012 AMD-3 Rule 6.3.

PCLP-4303

Add new message 9203 to support MISRA C 2012 AMD-3 Rule 8.16
The new message 9203 (declaration contains an alignment attribute whose expression evaluates to zero) reports on declarations containing alignment attributes with zero-valued expressions and supports MISRA C 2012 AMD-3 Rule 8.16.

PCLP-4304

Add new message 9205 to support MISRA C 2012 AMD-3 Rule 8.17
The new message 9205 (declaration contains multiple alignment attributes) reports when a declaration is encountered containing multiple alignment attributes and supports MISRA C 2012 AMD-3 Rule 8.17.

PCLP-4305

Add new message 841 to support MISRA C 2012 AMD-3 Rule 17.10
The new message 841 (function is declared as noreturn but returns a value) reports when a function is declared as noreturn but whose return type is not void and supports MISRA C 2012 AMD-3 Rule 17.10.

PCLP-4306

Add new message 9211 to support MISRA C 2012 AMD-3 Rule 23.1
The new message 9211 (generic selection is not expanded from a function-like macro) reports when a generic selection is encountered that is not expanded from a macro or when the controlling expression is not listed as one of the macro’s arguments. This implements MISRA C 2012 AMD-3 Rule 23.1.

PCLP-4307

Add new message 2419 and 9213 to support MISRA C 2012 AMD-3 Rule 23.2
The new message 2419 (controlling expression contains a side effect which will not be evaluated) reports when a controlling expression contains a side effect. The new message 9213 (controlling expression contains a call to function which will not be called) reports when a controlling expression contains a function call. This implements MISRA C 2012 AMD-3 Rule 23.2.

PCLP-4308

Add new message 9208 to support MISRA C 2012 AMD-3 Rule 23.3
The new message 9208 (generic selection does not contain any non-default associations) reports when a generic selection is encountered that only contains a default association and supports MISRA C 2012 AMD-3 Rule 23.3.

PCLP-4309

Add new message 2416 to support MISRA C 2012 AMD-3 Rule 23.4
The new message 2416 (association list contains inappropriate type) reports when a generic selection is encountered that contains an association which can never be selected. This implements MISRA C 2012 AMD-3 Rule 23.4.

PCLP-4310

Add new message 9210 to support MISRA C 2012 AMD-3 Rule 23.8
The new message 9210 (generic selection does not contain any non-default associations) reports when a generic selection is encountered that contains a default association that does not come first or last in the association list and supports MISRA C 2012 AMD-3 Rule 23.8.

PCLP-4312

Add new message 2505 to support MISRA C 2012 AMD-3 Rule 7.5
The new message 2505 (argument to integer constant macro should be an unsuffixed integer literal) reports when an integer constant macro uses an inappropriate type. This implements MISRA C 2012 AMD-3 Rule 7.5.

PCLP-4313

Add new messages 2502 and 9503 reporting alignment conflicts to support MISRA C 2012 AMD-3 Rule 8.15
The new messages 2502 (differing alignment requirements seen) and 9503 (declaration specifies an alignment differently from another declaration that derives an equivalent alignment on a different basis) report when an object is declared multiple times with different alignment requirements. These messages provide partial support for MISRA C 2012 AMD-3 Rule 8.15.

PCLP-4314

Add new message 2417 to support MISRA C 2012 AMD-3 Rule 17.13
The new message 2417 (const/volatile on function type has unspecified behavior) reports when a function type is specified with const or volatile. This new message, combined with existing errors 4175 and 5805, supports MISRA C 2012 AMD-3 Rule 17.13.

PCLP-4316

Add new messages 2504 and 9504 to support MISRA C 2012 AMD-3 Rule 21.22
The new message 9504 (argument supplied to type-generic macro resulting in call to function should have an essentially signed, essentially unsigned, or essentially (real or complex) floating type) reports when a type-generic macro from <tgmath.h> is encountered that does not use an appropriate essential type. This implements MISRA C 2012 AMD-3 Rule 21.22. 2504 (argument supplied to type-generic macro resulting in call to function should have a real or complex arithmetic type) is also introduced to warn about such uses that result in undefined behavior.

PCLP-4317

Add new message 9218 to support MISRA C 2012 AMD-3 Rule 21.23
The new message 9218 (arguments to type-generic macro from tgmath.h have differing types) reports when a multi-argument tgmath macro call is encountered that uses varying types. This implements MISRA C 2012 AMD-3 Rule 21.23.

PCLP-4318

Add new message 9214 to support MISRA C 2012 AMD-3 Rule 23.5
The new message 9214 (generic selection selects default because pointer type is not implicitly converted) reports when a generic selection is encountered that selects the default association when an implicit pointer conversion might have been expected. Such cases where a pointer association differs in qualifiers, implicit casts to void, or null constants selecting default are reported. This supports MISRA C 2012 AMD-3 Rule 23.5.

PCLP-4319

Add new message 9216 to support MISRA C 2012 AMD-3 Rule 23.6
The new message 9216 (essential type of the controlling expression does not match its standard type) reports when a generic selection is encountered whose controlling expression has an essential type that differs from its standard type. This message provides support for MISRA C 2012 AMD-3 Rule 23.6.

PCLP-4320

Add new message 9219 to support MISRA C 2012 AMD-3 Rule 23.7
The new message 9219 (parameter of generic selection macro is not evaluated exactly once) reports when a generic selection macro is encountered that does not evaluate the arguments in the controlling expression exactly once, regardless of which association is selected. This supports MISRA C 2012 AMD-3 Rule 23.7

PCLP-4321

Updates to au-misra3.lnt and au-misra3-amd2.lnt as per MISRA C 2012 Amendment 3
MISRA C 2012 Amendment 3 includes several updates to MISRA C 2012 and MISRA C 2012 AMD-2 that were not previously reflected in the corresponding au-misra3.lnt and au-misra3-amd2.lnt files. These updates include reclassifying Rule 21.11 as Advisory, reclassifying Rule 21.12 as Required, removal of the restrictions for the _Generic keyword and the stdalign.h and stdnoreturn.h headers for Rule 1.4, and increasing the scope of Rule 21.12 to include all facilities of the fenv.h header. These changes are now reflected in the au-misra3.lnt and au-misra3-amd2.lnt files.

PCLP-4322

Add complex floating essential type for MISRA C 2012 AMD-3
MISRA C 2012 essential type messages now support a new "complex floating" essential type category to support MISRA C 2012 AMD-3.

PCLP-4326

Add support for Visual Studio /FI and /external:I options
The Visual Studio /FI and /external:I compiler options are now supported.

PCLP-4330

Correct false positive 779 messages issued for type-dependent expressions
Message 779 (string constant in comparison operator) was previously incorrectly issued for type-dependent expressions. This issue has been resolved.

PCLP-4337

Detect character size when generating compiler configurations for TI compilers
Generated compiler configurations for TI compilers (ti_cl2000, ti_cl430, ti_cl6x, and ti_armcl) now extract the target architecture character size from the compiler and add an appropriate -sb option in the generated size options. This will not affect the previous behavior for most compilers which will simply generate a -sb8 option, but it is particularly relevant to the ti_cl2000 compiler entry where a -sb16 option will now be generated to correctly support the TI cl2000 compiler targeting 16-bit characters.

PCLP-4340

Exclude ti_edg implementation detail compiler database entry from the list of compilers shown by pclp_config
The ti_edg entry in the pclp_config compiler database is an abstract base and implementation detail for other, specific TI compilers and is not generally intended for direct use. This compiler database entry will no longer be included in the output from –list-compilers.

PCLP-4342

Add support for compiler relative include file search directories.
The keil_armcc, microchip_xc8, and TI compilers search for include files in known directories relative to the compiler but do not have a method to extract the directories. The compiler configuration include file search options will now be determined from the location of the compiler.

PCLP-4343

Remove temporary compiler generated files within the configuration utility pclp_config
When pclp_config invokes the user selected compiler, many compilers generate files associated with the provided source files. The invocation instructions in the compilers database did not always have the proper instructions to delete all of the compiler generated file. All compiler generated temporary files will now be deleted.

PCLP-4344

Improved and corrected determining of compiler versions within the pclp_config utility.
The pclp_config utility was unable to determine the compiler version for some of the supported compilers. The missing instructions were added and the incorrect instructions were updated. The compiler version can now be determined for all pclp_config supported compilers .

PCLP-4349

Improved error messages for pclp_config when a command uses –compiler-database where –compilation-db was intended
The pclp_config.py option –compiler-database is used to specify an alternative path to the compilers.yaml compiler database which provides information about the compilers supported by pclp_config. It is typically unnecessary to use this option to specify the path explicitly because the compilers.yaml compiler database included in the PC-lint Plus distribution is automatically loaded from the same directory as the pclp_config.py script if the directory structure has not been modified. The distinct and unrelated option –compilation-db is used when generating a project configuration to specify the path to a JSON compilation database such as a compile_commands.json compilation database generated by CMake.

The error messages emitted in cases where pclp_config.py is invoked with an argument that appears to have specified one of these two options where the other was likely intended have been improved to specifically highlight this distinction.

PCLP-4353

Updated manufacturer of the Freescale compilers
Updated the manufacture of the Freescale compilers to be NXP/Freescale.

PCLP-4355

Correct minor issues in generated Visual Studio compiler configuration files
The generated Visual Studio compiler configuration files did not suppress messages 13 and 104 in uchar.h (Visual Studio 2015 and later) and ucyvalshar.h (Visual Studio 2013); did not suppress message 5881 in setjmp.h and eh.h (Visual Studio 2015); did not suppress message 5394 in scoped_allocator (Visual Studio 2012); did not suppress message 4886 in math.h (Visual Studio 2005); and did not enable support for C++20 for Visual Studio 2019. In addition, if the user supplied compiler options included the /JMC option, it was treated as a J option. All of these issues have been corrected. Additionally, /Zc:wchar_t and /Zc:wchar_t- C++ options are now correctly translated.

PCLP-4358

Improved Visual Studio configuration file comments
The comments for specific Visual Studio options in the pclp_config generated compiler configuration files are now more readable and understandable.

PCLP-4387

Include right shifts for message 9053
The message 9053 , implemented to support MISRA C 2012 Rule 12.2, did not report when excessive right shifts occurred. Additionally, 9053 did not report negative shifts of any kind. Excessive right shift and negative shift operations will now be reported by message 9053.

PCLP-4389

Message 527 now reports code that is unreachable due to a prior infinite loop
Message 527 now reports statements that are unreachable due to appearing after an infinite loop with a constant condition without a break.

PCLP-4390

Recognize the assignment of a constant value in a Boolean context as itself representing a constant value
Message 506 now recognizes the result of the assignment of a constant as yielding a constant value. This message will now report constructs such as while (x = 1) where an assignment of a constant appears in a Boolean context.

PCLP-4392

Support MISRA C 2012 AMD-4
MISRA C 2012 Amendment 4 is now supported using the provided au-misra3-amd4.lnt file found in the lnt/ directory of the PC-lint Plus distribution.

PCLP-4398

Support MISRA C 2012 AMD 4 Rule 18.10
The new message 2502 (pointer to variably modified array type was used) reports when a pointer whose pointee is a variably modified array type is declared. This implements MISRA C AMD-4 Rule 18.10

PCLP-4409

Support MISRA C 2012 AMD 4 Rule 12.6
The new message 181 (atomic record type directly accessed) reports when a member of an atomic struct or union is accessed via the . or -> operators. This implements MISRA C AMD-4 Rule 12.6.

PCLP-4416

Improved pclp_config support for Visual Studio compiler options that start with a dash
Visual Studio compiler options may start with either a forward slash (/) or a dash (-). Previously pclp_config only recognized the -I compiler option and ignored any other compiler options that started with a dash. Recognized Visual Studio compiler options may now start with either a forward slash or a dash.

PCLP-4425

Revise when thread analysis processing is inhibited
The second phase of thread analysis, which occurs after Global Wrap-up, previously would not execute if there were fewer than 2 threads (or a single non-mono thread). This caused the thread reports and beneficial thread analysis messages to not be emitted. Assuming that Global Wrapup is not disabled, the thread reports will now always be generated and the thread analysis second phase will be inhibited only if there are no threads or mutexes, or if a thread analysis fatal condition has occurred unless overridden by setting the ftc flag to 2 or greater.

PCLP-4428 PCLP-4417

New message 1797 improves support for MISRA C++ Rule 14-5-3 and AUTOSAR M14-5-3
The new message 1797 replaces the previous use of message 1721 as the support mechanism for MISRA C++ Rule 14-5-3 and AUTOSAR M14-5-3. The previous use of message 1721 to support this rule resulted in false positive rule violation messages because message 1721 reports assignment operators that are not copy nor move assignment operators while the rule only applies if the assignment operator is further a function template taking a parameter whose type is a template parameter type. Message 1797 reports the specific situation described in the rule. The level of support for AUTOSAR M14-5-3 has been changed from "Partially supported" to "Supported".

PCLP-4429

Add warning message for when an object is used as a mutex and then as a locker.
When an object is initially used as a mutex and subsequently used as a locker, the usages as a locker were silently ignored. This condition will now be reported with message 2540 and will no longer inhibit the second phase of thread analysis.

PCLP-4436

Enable include_next preprocessor keyword in TI compiler configurations generated by pclp_config
Recent versions of the TI compilers support for the include_next preprocessor directive and use it in their C++ headers to include their corresponding C headers. pclp_config now enables support for the include_next preprocessor for the TI compilers.

PCLP-4453

Examples added to description of the -cond option
Examples have been added to the description of the -cond option.

PCLP-4459

Note the constraints of -setenv when used in a configuration file
Environment variable expansions are not affected by -setenv options appearing within the same configuration file. This is now noted in the section 4.1.11 Expansion of Environment Variables in Options .

PCLP-4491

Recognize C++23 feature test macros in pclp_config
All C++23 feature test macros are recognized by pclp_config when generating the compiler configuration header file.

PCLP-4538

Additional instructions for integrating PC-lint Plus with IAR Embedded Workbench
Section 2.3.16 is changed to include additional setup instructions that show how to Run PC-lint Plus using a keyboard shortcut. The additional instructions also highlight how to add PC-lint Plus to the "Toolbar".

PCLP-4590

Improved link navigation for Revision History entries
The clickable links in the summary sections of the Revision History now navigate directly to the corresponding issue instead of the beginning of the containing section.

PCLP-4595

Improved instructions for integrating PC-lint Plus with Visual Studio Code
Section 2.3.20 has been reworked to include additional setup instructions, add support for supplemental messages, overcome "Problem Matcher" limitations, and more.

PCLP-4606

Updates to au-misra3.lnt and au-misra3-amd2.lnt as per MISRA C 2012 Amendment 4
MISRA C 2012 Amendment 4 includes several updates to MISRA C 2012 and MISRA C 2012 AMD-2 that were not previously reflected in the corresponding au-misra3.lnt and au-misra3-amd2.lnt files. These updates include an exception to Rule 3.1 to allow uniform resource identifiers within comments, and removing the prohibition of <stdatomics.h> and <threads.h> library facilities from Rule 1.4. These changes are now reflected in the au-misra3.lnt and au-misra3-amd2.lnt files.

PCLP-4660

Improve Keil ARMCC and Microchip XC8 compiler configuration generation
The configuration utility (pclp_config) did not include all of the compiler supplied header directories in the generated compiler configurations for the Keil ARMCC and Microchip XC8 compilers. The compilers.yaml file includes instruction comments if the assumptions for the required headers for the Keil ARMCC and Microchip XC8 compilers are incorrect and need to be adjusted by the user.

PCLP-4669

Improved support for Microchip XC8 keywords and predefined macros
Errors were previously emitted when analyzing several of the Microchip XC8 header files because of misconfigured keywords and predefined macros. The generated XC8 compiler configurations have been corrected to eliminate these issues.

23.3.5 Bugs Fixed



PCLP-3201

Correct false negative 9102 for digraph sequence "<:"
The message 9102 (possible digraph sequence) was not correctly emitted when encountering the character sequence <: and digraphs were enabled.

PCLP-3551

False positive 725 within template instantiations
Message 725 (unexpected lack of indentation) would sometimes incorrectly be issued for the body of a constexpr if statement within an instantiated template. Messages 525 (unexpected negative indentation) and 725 are no longer emitted for template instantiations.

PCLP-3569

Correct false positive 550 for braced member-init-lists
The message 550 (local variable not subsequently accessed) was incorrectly emitted when encountering an initializer list using braced syntax.

PCLP-3660

Correct false positive 776 for the summation of two ints cast to a long of the same size
The message 776 (possible truncation of addition) was unjustly emitted when long and int are the same size.

PCLP-4230

False positive message 9006 for dependent sizeof expressions
Message 9006 (sizeof used on expression with side effect) was previously incorrectly emitted for value-dependent sizeof expressions. This issue has been corrected.

PCLP-4243

Correct rare memory corruption in thread analysis semantic processing
Combinations of several thread analysis semantics and certain rare code sequences could cause memory corruption and incorrect processing of the semantics of the affected user function. The memory corruption has been corrected which also corrects the processing of the semantics.

PCLP-4244

Correct rare memory corruption in file stream semantic processing
Combinations of several file stream semantics and certain rare code sequences could cause memory corruption and incorrect processing of the semantics of the affected user function. The memory corruption has been corrected which also corrects the processing of the semantics.

PCLP-4246

Resolve crash/internal error 292B4782 for constant division by zero
A crash (Windows Exception Code 0xC0000094) or an internal error (292B4782) which could occur when a constant expression involving guaranteed division (or remainder) by zero (e.g. 1 / 0) appeared in certain contexts has been resolved.

PCLP-4254

Resolve false positive instances of messages 550, 551, and 552 for rewritten comparison operators in C++20
Previously in C++20 mode, if a variable was only accessed using a comparison operator in the rewritten candidate set (a rewritten comparison operator), a false positive 550 , 551 , or 552 could later be emitted for the variable. This behavior has been updated to recognize variable accesses within operands to rewritten comparison operators.

PCLP-4255

Correct handing of C/C++ options when determining size options in pclp_config
The pclp_config configuration utility could incorrectly handle the user provided compiler options while extracting the information needed for the size options.

PCLP-4258

Update pclp_config to prefer setting size_t to unsigned long over unsigned long long when both types are the same size to match recommendation from C++ standard
The C++ standard recommend that size_t should be a type whose integer conversion ranks is no greater than that of signed long int unless a larger size is necessary to represent all possible values. Prior versions of the compiler database used by pclp_config.py would preferentially configure the size type to unsigned long long instead of unsigned long when sizeof(long) == sizeof(long long). This could cause false positive 4589 (enum redeclaration with different underlying type) messages to be emitted after encountering a conflicting definition of size_t in a standard library header. The compiler database has been updated to prefer unsigned long in this situation.

PCLP-4265

False negative messages 1524, 1732, and 1733 for new expression appearing in a member init list
PC-lint Plus previously did not emit messages 1524 (new in constructor for class which has no explicit destructor), 1732 (new in constructor for class which has no user-provided copy assignment operator), and 1733 (new in constructor for class which has no user-provided copy constructor) for new expressions appearing in a constructor’s member init list. This has been corrected.

PCLP-4269

Memory leak when using -cond and -egrep/+egrep options
A memory leak which could occur when using the -cond and -egrep/+egrep options has been corrected.

PCLP-4273

Correct false positive message 504 for shift assignment operators
Message 504 (unusual shift operation) was previously incorrectly issued for shift assignment operators with unparenthesized right-hand operands. This issue has been resolved.

PCLP-4275

Resolve internal error 187F3BF3 (-37)
An internal error with error code 187F3BF3 and diagnostic info -37 that could occur during the evaluation of a non-static data member initializer containing an implicit or explicit use of the this pointer outside the context of a non-static member function has been resolved.

PCLP-4297

False negative 785 for uninitialized members of a structure nested within a union
Message 785 (too few initializers) was not previously emitted for initializer lists of aggregates nested within a union. This has been corrected.

PCLP-4300

Correct name of the file argument of the thread_report options in built in help and the Reference Manual.
Some instances of the file argument of the thread_report options were incorrectly referred to as filename.

PCLP-4336

Remove unimplemented pclp_config option –ignore-options
The pclp_config option –ignore-options was recognized but never implemented. The option has been removed.

PCLP-4341

Resolve a crash/internal error/hang that could occur during Global Wrap-up when using the Metrics feature on a large project using many concurrent analysis threads
An issue that could variously manifest as a crash, a hang, or an internal error during Global Wrap-up when analyzing a large project using both the Metrics feature and enabling many concurrent threads using the -max_threads option has been resolved.

PCLP-4345

Remove inapplicable C++ configuration from the Microchip XC8 and XC16 compiler database entries
The Microchip XC8 and XC16 compilers only support C code. Unnecessary configuration entries related to extracting C++ information from these compilers have been removed from compilers.yaml

PCLP-4346

Correct handing of C/C++ options when determining size options in pclp_config
The pclp_config configuration utility was unable to extract the information to generate the size options for all compilers.

PCLP-4350

Correct false positive 9107 for class template static data members
Message 9107 (header cannot be included in more than one translation unit) was incorrectly emitted when multiple definitions of a class template static data member were encountered.

PCLP-4351

Resolve internal errors when evaluating certain Hook fields or Query functions for value-dependent expressions
Use of the is_constant_expr, is_ice, or is_value Hook fields or the isConstantExpr, isIntegerConstantExpr, evaluateAsBooleanCondition, evaluateAsFloat, evaluateAsInt, getIntegerConstantExpr, evaluateAsBooleanCondition, isCXX11ConstantExpr, or isCXX98IntegralConstantExpr Query functions would previously elicit an internal error when evaluated for a value-dependent expression. This issue has been corrected.

PCLP-4361

Correct false positive 9102 for digraph sequence "<::"
The message 9102 (possible digraph sequence) was incorrectly emitted when encountering the character sequence <:: not immediately followed by : or >.

PCLP-4375

Incorrect deprecation text for AUTOSAR Rule M18-7-1
The au-autosar.lnt and au-autosar19.lnt author files previously incorrectly refered to AUTOSAR Rule M18-7-1 as A18-7-1 in the deprecation text issued with message 586. The deprecation text used in these files has been corrected.

PCLP-4414

Updated pclp_config to handle fixed precision floating point types in standard header files
Previously when projects using C++20 in GCC 12 or later, configurations generated by pclp_config would cause a parse issue due to the use of the __float80 type in the <compare> header file. Additionally when projects using C++ code in GCC 13 or later combined with glibc 2.37 or later, configurations generated by pclp_config would cause a parse issues due to the use of the _Float32, _Float32x, _Float64, _Float64x, and _Float128 types in various glibc header files. New compiler configurations generated by pclp_config will not emit these parse errors.

PCLP-4446

Internal error when the isCXX11ConstantExpr Query function is evaluated in a C module
Evaluation of the isCXX11ConstantExpr Query function for an expression appearing in a C module would previously result in internal error 1AF10F50. This issue has been resolved.

PCLP-4463

Incorrect library region determination for certain Hook events
Previously, user-defined hooks executed for statement events would sometimes utilize the incorrect library status resulting in incorrect results for expansion of the is_library field as well as messages emitted from such hooks being inappropriately suppressed.

PCLP-4464

User-defined hooks executed twice for label statements
Previously, user-defined hooks would be executed twice for label statements. This issue has been corrected.

PCLP-4516

Corrected invalid string escape sequences in pclp_config
The automated configuration tool pclp_config contained invalid string escape sequences that prior to version 3.12 of python were silently ignored. These invalid string escape sequences were corrected.

PCLP-4534

Resolve Python error while generating include options when using pclp_config.py to generate a compiler configuration without specifying a compiler binary using –compiler-bin
The error message Error: local variable ’found_paths’ referenced before assignment derived from a Python exception within pclp_config.py previously prevented the generation of an output file when running pclp_config.py without specifying a compiler binary with –compiler-bin. Attempting to generate a compiler configuration without specifying a compiler binary is intended to produce several warning messages noting the functionality that is unavailable without the compiler binary, but the process now correctly produces a limited output file without an error.

PCLP-4567

Resolved an issue in Value Tracking that manifested as a hang before crashing due to memory exhaustion
An issue that could cause processing to hang before crashing once memory was exhausted during Value Tracking has been resolved.

PCLP-4577

Inappropriate evaluation of Query echo reflections
Previously, an echo expression’s reflection would sometimes incorrectly be evaluated in the context of a subsequently defined query which could result in unexpected behavior or a crash. This has been corrected.

PCLP-4597

Resolved false negatives of message 550 and 551 due to supressions
For message 550 (local variable not accessed) a false negative could previously occur if message 550 was suppressed before the end of a function scope. For message 551 (static non-local variable not accessed) a false negative could previously occur if message 551 was suppressed before the end of the file. Both have been resolved.

PCLP-4630

Enable usage of _Float16 and __bf16 types
Previous use of the _Float16 or __bf16 types would result in a parse error. Now no error is produced when using these types.

PCLP-4636

Enable usage of _Complex _Float16 type
Previous use of the _Complex _Float16 type would result in a parse error. Now no error is produced when using this type.

PCLP-4679

Resolve false negatives in the value of the file.num_include_directives metric in Linux and macOS builds of PC-lint Plus
An issue that previously could have resulted in the file.num_include_directives metric undercounting include directives when using the Linux or macOS builds of PC-lint Plus has been resolved. This issue did not impact Windows builds of PC-lint Plus.

23.3.6 Known Issues



PCLP-939

Message 756 is disabled
Message 756 (global typedef not referenced) is disabled in the current release.

PCLP-960

Message 9103 not issued for inter-module reuse
Message 9103 (identifier with static storage reused) is not issued when a reuse of a static storage identifier occurs in a separate module.

PCLP-2135

False negative 9003 for static variables
A file-scope static variable referenced only within a single function will not be reported by 9003 . The message will be issued for variables that are implicitly or explicitly extern.

PCLP-2603

Message 767 is disabled
Message 767 is disabled in the current release.

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects
A false positive instance of message 522 may be emitted for a call to a const member function despite the presence of external side-effects.

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type
Message 1565 will report when an initializer function has not initialized a non-static data member of the class of which the initializer function is a non-static member function. It will not report based on the status of non-static data members of other objects nested recursively as sub-objects of a non-static data member of class type.

PCLP-3198

False positive 9045 for nested structures
Message 9045 (complete definition of symbol is unnecessary in this translation unit) may be incorrectly issued for structures whose only use appears within another structure.

PCLP-3213

False positive implicit conversion messages when an explicit cast expression is used as a template argument for a non-type template parameter
When providing a cast expression as a template argument to a non-type template parameter some messages described as reporting implicit conversions may be issued as if the cast operand were implicitly converted to the cast type.

PCLP-3223

The undocumented +fil flag is not implemented
The +fil flag, which would control whether or not indentation checking is applied to labels, is not implemented. This unimplemented flag is not documented in the list of flag options, but a reference to it is made in section 13.4.

PCLP-3803

False positive 650 for shifted values
Message 650 (constant out of range for operator) is sometimes incorrectly issued when the result of a shift expression is compared with a constant value.

PCLP-3856

False positive side-effect related messages for a lambda that has side effects

PCLP-4010

False positive 9049 within lambda body
Message 9049 (increment/decrement operator used in expression with other side-effects) is incorrectly issued for increment and decrement expressions appearing as part of a statement without additional side-effects within the body of a lambda expression.

PCLP-4046

False positive 1764 for universal reference parameter of template instantiated with a lambda
Message 1764 (reference parameter of function could be reference to const) may be incorrectly issued when a function template is instantiated with a lambda as the argument corresponding to a universal reference parameter.

23.4 Version 2.0

23.4.1 Highlights

PC-lint Plus 2.0 introduces major new features:

This release of PC-lint Plus also includes:

23.4.2 Summary

New Features

PCLP-386

Introducing Metrics

PCLP-2285

New options to control parsing limits

PCLP-3526

Added support for AUTOSAR Rule A5-1-7

PCLP-3529

Added support for AUTOSAR Rule A3-1-5

PCLP-3531

Added support for AUTOSAR Rule A7-1-9

PCLP-3533

Added support for AUTOSAR Rule A13-5-5

PCLP-3539

Added support for AUTOSAR Rule A5-1-8

PCLP-3548

Added support for AUTOSAR Rule A13-2-1

PCLP-3813

Introducing Queries

PCLP-3987

Introduce support for new C++20 features

Improvements

PCLP-1962

Ignore unevaluated contexts for message 1938

PCLP-1977

Improve performance of processing files containing heavy use of macro expansion including common Boost headers

PCLP-2113

Mark std::uncaught_exception as dangerous

PCLP-2245

Evaluate qualified calls to virtual functions with static dispatch

PCLP-2606

New fit flag to consider functions not declared as noexcept to be impure if they throw an exception

PCLP-2969

Improved support for AUTOSAR Rule A10-3-5

PCLP-2972

Improved support for AUTOSAR Rule A12-4-2

PCLP-2997

Deterministic field and base order for rendering of class/struct/union objects in Value Tracking messages

PCLP-3067

Update options for specifying language versions

PCLP-3095

Do not emit message 9176 for dependent types

PCLP-3291

Update documentation for message 422

PCLP-3357

Improved analysis of constant arrays

PCLP-3511

Support for AUTOSAR 19

PCLP-3516

New builtin function semantics for the log, logf, and logl functions

PCLP-3523

New message 9456 supports AUTOSAR A6-5-3

PCLP-3527

Support for AUTOSAR Rule A2-13-5

PCLP-3528

Support for AUTOSAR19 Rule A2-13-6

PCLP-3532

Message 1511 parameterized with access of hidden function

PCLP-3537

Support AUTOSAR Rule A5-1-3

PCLP-3538

Support for AUTOSAR A5-1-6 provided by new message 3903

PCLP-3541

Improved support for AUTOSAR Rule A13-6-1

PCLP-3594

Improve analysis of pointers initialized in if statements

PCLP-3595

Improve analysis of multiple return points in functions returning structures

PCLP-3619

Improve handling of user-defined conversions in Value Tracking

PCLP-3669

Remove the deprecated +fdu flag option

PCLP-3814

Improve support for exceptions to MISRA C 2012 Rule 10.3

PCLP-3816

Extend scope of message 9034 to include switch case values

PCLP-3872

Improve text of mapped clang error and supplemental messages

PCLP-3880

Update license information for LLVM

PCLP-3901

Update information on accommodating the _bit compiler extension

PCLP-3905

Improved performance of -d/-u options appearing between -env_push/-env_pop options

PCLP-3912

Improve support for MISRA C 2012 Rule 1.1 using message 793

PCLP-3913

Fix typo in appended text for CERT-C Rule POS54-C

PCLP-3919

Add walk_parent_expr hook field as alias for walk_pexpr

PCLP-3920

Remove unused suppression from MISRA C 2012 Rule 10.3

PCLP-3930

Exclude deduction guides from messages reporting function declarations

PCLP-3935

Support for integer types of arbitrary size

PCLP-3955

Improve performance for const array initialization chains when many array elements are initialized in terms of other arrays referencing further such arrays with interleaving function invocations

PCLP-3960

Added support for Visual Studio 2022

PCLP-4003

Exclude Boolean operators from MISRA C 2004 underlying type rules

PCLP-4004

Use int as destination underlying type for the purpose of initialization for MISRA C 2004

PCLP-4007

Exclude initialization of pointers from MISRA C 2004 Rule 10.1

PCLP-4009

Clarify descriptions of messages 3402 and 3702

PCLP-4013

Corrected and improved thread analysis reports

PCLP-4014

Add Undecidable classification for MISRA C 2012 Rule 2.1

PCLP-4021

Update Frequently Asked Questions entry regarding the creation of custom messages

PCLP-4025

Linux builds now require glibc 2.17

PCLP-4026

Support the char8_t keyword in clang and GCC compiler configurations generated with pclp_config

PCLP-4033

Increase default template recursion depth limit

PCLP-4036

Update GCC compiler configuration generation

PCLP-4041

Update documentation with correct version of AUTOSAR targeted by au-autosar.lnt

PCLP-4042

Add missing AUTOSAR Rule M17-0-3 to au-autosar.lnt

PCLP-4043

Removed error messages

PCLP-4048

Improvements to pclp_config

PCLP-4057

Improved support for GCC 11 compiler configurations generated by pclp_config

PCLP-4070

Expand support for AUTOSAR A1-1-1 and change support level to "partially supported"

PCLP-4073

Remove mapping of messages previously used to provide support for AUTOSAR A4-7-1 and mark this rule as not supported

PCLP-4074

Document limitations for support of MISRA C++ 2008 Rule 3-4-1

PCLP-4075

Parameterize -append options for message 829 (+headerwarn option issued) used in au-misra-cpp.lnt

PCLP-4076

Add -append options for message 829 (+headerwarn option issued) used in au-misra3-amd2.lnt

PCLP-4093

Update hardware requirements to reflect uniform requirement for 64-bit CPU

PCLP-4094

Parse JSON compilation databases as JSON instead of YAML within pclp_config

PCLP-4095

Include instructions for generating a JSON compilation database with iarbuild

PCLP-4100

Improvements to the representation of symbols and types in message parameters

PCLP-4208

Support multiple parsing behaviors for JSON compilation databases

Bugs Fixed

PCLP-2391

Resolve false positive instance of message 2434 for dereference of pointer lexically subsequent to but excluded from control flow after an earlier conditional deallocation within a loop

PCLP-2859

Resolve error 4714 for noexcept default constructor with default member initializer

PCLP-2999

False negative instance of message 1536 involving address of private array element

PCLP-3190

Resolve false negative instance of message 9011 when loop exit point count is exceeded only with consideration of a goto statement within a nested loop

PCLP-3242

Resolve false positive 641 involving a conditional operator expression where both the second and third operand are of the same enumeration type

PCLP-3633

Inappropriate suppression of messages 451, 537, and 967

PCLP-3652

Fixed crash for a friend function declaration containing an expression-form noexcept specifier with a default argument

PCLP-3855

Resolve unexpected syntax error for structured binding to const reference with Visual Studio standard library

PCLP-3864

Resolve internal error involving switch statements containing nested control structures where all independent paths are certain to uniformly throw, continue, or exit

PCLP-3907

Resolve false positive 727, 728, or 729 when taking the address of a parenthesized variable name

PCLP-3927

Improve recognition of temporary output file paths when configuring TI compilers

PCLP-3931

Resolve internal error associated with use of deduction guides

PCLP-3936

Correct domain error semantics for the log1p, log1pf, and log1pl functions

PCLP-3959

Message 9046 removed as supporting mechanism for AUTOSAR

PCLP-3974

False position message 2751 when thread root function is prefixed with the address-of operator

PCLP-3984

Properly handle backslashes in the command field of JSON compilation databases

PCLP-4027

Unintentionally extended comments in pclp_config-generated compiler configuration files

PCLP-4029

Resolve template substitution failure for certain non-type template arguments of enumeration type

PCLP-4165

Fix potential crash or hang when analyzing repeated definitions of a single function across multiple modules while using a large number of concurrent threads

PCLP-4188

Resolve false negative 1540 for data members after a const data member

PCLP-4192

Recognize __declspec(uuid)

PCLP-4200

Recognize __declspec(thread)

AUTOSAR Summary

PCLP-3959

Message 9046 removed as supporting mechanism for AUTOSAR

PCLP-3548

Added support for AUTOSAR Rule A13-2-1

PCLP-3541

Improved support for AUTOSAR Rule A13-6-1

PCLP-3539

Added support for AUTOSAR Rule A5-1-8

PCLP-3538

Support for AUTOSAR A5-1-6 provided by new message 3903

PCLP-3537

Support AUTOSAR Rule A5-1-3

PCLP-3533

Added support for AUTOSAR Rule A13-5-5

PCLP-3532

Message 1511 parameterized with access of hidden function

PCLP-3531

Added support for AUTOSAR Rule A7-1-9

PCLP-3529

Added support for AUTOSAR Rule A3-1-5

PCLP-3528

Support for AUTOSAR19 Rule A2-13-6

PCLP-3527

Support for AUTOSAR Rule A2-13-5

PCLP-3526

Added support for AUTOSAR Rule A5-1-7

PCLP-3523

New message 9456 supports AUTOSAR A6-5-3

PCLP-3511

Support for AUTOSAR 19

PCLP-2972

Improved support for AUTOSAR Rule A12-4-2

PCLP-2969

Improved support for AUTOSAR Rule A10-3-5

PCLP-4042

Add missing AUTOSAR Rule M17-0-3 to au-autosar.lnt

PCLP-4041

Update documentation with correct version of AUTOSAR targeted by au-autosar.lnt

PCLP-4074

Document limitations for support of MISRA C++ 2008 Rule 3-4-1

PCLP-4073

Remove mapping of messages previously used to provide support for AUTOSAR A4-7-1 and mark this rule as not supported

PCLP-4070

Expand support for AUTOSAR A1-1-1 and change support level to "partially supported"

CERT C Summary

PCLP-3913

Fix typo in appended text for CERT-C Rule POS54-C

MISRA Summary

PCLP-3920

Remove unused suppression from MISRA C 2012 Rule 10.3

PCLP-3912

Improve support for MISRA C 2012 Rule 1.1 using message 793

PCLP-3816

Extend scope of message 9034 to include switch case values

PCLP-3814

Improve support for exceptions to MISRA C 2012 Rule 10.3

PCLP-3190

Resolve false negative instance of message 9011 when loop exit point count is exceeded only with consideration of a goto statement within a nested loop

PCLP-3095

Do not emit message 9176 for dependent types

PCLP-4014

Add Undecidable classification for MISRA C 2012 Rule 2.1

PCLP-4007

Exclude initialization of pointers from MISRA C 2004 Rule 10.1

PCLP-4004

Use int as destination underlying type for the purpose of initialization for MISRA C 2004

PCLP-4003

Exclude Boolean operators from MISRA C 2004 underlying type rules

PCLP-4076

Add -append options for message 829 (+headerwarn option issued) used in au-misra3-amd2.lnt

PCLP-4075

Parameterize -append options for message 829 (+headerwarn option issued) used in au-misra-cpp.lnt

PCLP-4074

Document limitations for support of MISRA C++ 2008 Rule 3-4-1

23.4.3 New Features



PCLP-386

Introducing Metrics
Metrics can be used to enforce coding guidelines and measure code quality. See the Metrics chapter to learn how Metrics can easily enforce best practices and produce reports.

PCLP-2285

New options to control parsing limits
The new ar_limit, br_limit, cc_limit, and cs_limit options allow overriding of limits associated with operator arrow depth, nested bracket depth, constexpr function call depth, and maximum steps evaluated for constexpr functions.

PCLP-3526

Added support for AUTOSAR Rule A5-1-7
Message 9426 is issued whenever a lambda is the operand to typeid or decltype. Complete support for AUTOSAR Rule A5-1-7 is now provided.

PCLP-3529

Added support for AUTOSAR Rule A3-1-5
Message 9449 is issued whenever a non-template member function is defined within its class definition.

Support for AUTOSAR Rule A3-1-5 is now provided.

PCLP-3531

Added support for AUTOSAR Rule A7-1-9
Message 9428 is issued whenever an enum, union, struct, or class type is defined in the same statement with the declaration of a variable of its type.

Complete support for AUTOSAR Rule A7-1-9 is now provided.

PCLP-3533

Added support for AUTOSAR Rule A13-5-5
These messages apply only to user-declared comparison operator functions (operator==, operator!=, operator<, operator<=, operator>=, and operator>.

Message 9444 is issued whenever the function is a class/struct member.

Message 9445 is issued whenever the function is not noexcept (noexcept(true), throw(), or __declspec(nothrow)).

Message 9446 is issued whenever the parameters to the function have different types.

Support for AUTOSAR Rule A13-5-5 is now provided.

PCLP-3539

Added support for AUTOSAR Rule A5-1-8
Message 9442 is issued whenever a lambda definition is nested inside another lambda definition.

Support for AUTOSAR Rule A5-1-8 is now provided.

PCLP-3548

Added support for AUTOSAR Rule A13-2-1
Messages 9447 is issued whenever the return type of a user defined assignment operator is not a reference to the left hand parameter (’this’ for member functions and the first parameter for non-member functions) with the same const/volatile qualification.

Message 9448 is issued whenever the return value of a user defined assignment operator is not a reference to the left hand parameter (’*this’ for member functions and the first parameter for non-member functions) with the same const/volatile qualification.

Support for AUTOSAR Rule A13-2-1 is now provided.

PCLP-3813

Introducing Queries
The new PC-lint Plus Query Language provides a facility to extend the functionality of PC-lint Plus by defining custom checks and diagnostics and suppressing messages based on dynamic introspection.

PCLP-3987

Introduce support for new C++20 features
PC-lint Plus 2.0 introduces support for many C++20 features including three-way comparison (operator<=>), extended constexpr, and partial support for Concepts and Coroutines.

The C++20 Modules feature is not currently supported.

23.4.4 Improvements



PCLP-1962

Ignore unevaluated contexts for message 1938
Message 1938 is no longer emitted for references to global variables within unevaluated contexts such as sizeof expressions.

PCLP-1977

Improve performance of processing files containing heavy use of macro expansion including common Boost headers
Performance has been improved in situations where many large, nested macro expansions are encountered. This particularly improves processing speed when including a library such as Boost Phoenix.

PCLP-2113

Mark std::uncaught_exception as dangerous
Usage of the former standard library function std::uncaught_exception will now elicit message 421 . This function has been replaced by std::uncaught_exceptions.

PCLP-2245

Evaluate qualified calls to virtual functions with static dispatch
Value Tracking now walks the static target function when evaluating a qualified call to a virtual function.

PCLP-2606

New fit flag to consider functions not declared as noexcept to be impure if they throw an exception
The new fit flag is off by default. If the flag is turned on (such as with the option +fit), then a throw expression within a function body will render that function impure unless the function is declared as not throwing any exceptions (in which case a thrown exception cannot be allowed to escape by any control path).

PCLP-2969

Improved support for AUTOSAR Rule A10-3-5
Message 9438 will report virtual non-copy/non-move assignment operator functions. With messages 9407 and 9410 , complete support for AUTOSAR Rule A10-3-5 is now provided.

PCLP-2972

Improved support for AUTOSAR Rule A12-4-2
Message 9441 will report public non-virtual destructors in effectively non-final classes. A class is effectively final if either it or its destructor is final. Complete support for AUTOSAR Rule A2-13-5 is now provided.

PCLP-2997

Deterministic field and base order for rendering of class/struct/union objects in Value Tracking messages
The order in which fields and bases of an object were displayed within a particular instance of a Value Tracking message could previously vary between repeated runs of PC-lint Plus. These items are now deterministically displayed in alphabetical order. The existing behavior of listing all bases first and all fields second still applies, and as such the bases and fields are alphabetized separately among themselves.

PCLP-3067

Update options for specifying language versions
The -std option now accepts -std=c++20 to specify C++20. The previously deprecated -A option is no longer listed in the documentation. The legacy -A option was considered deprecated in the initial release of PC-lint Plus version 1.0; this option is now obsolete. The -std option should be used instead.

PCLP-3095

Do not emit message 9176 for dependent types
Message 9176 is no longer emitted for casts involving dependent types within templates. Casts arising from specific template instantiations will still be reported. For example,

//lint -w1 +e9176 
 
template<typename T, typename U> 
void f() { 
   T* t = 0; 
   reinterpret_cast<U*>(t); 
} 
 
void g() { 
   f<int, double>(); 
}

previously emitted two instances of message 9176, one for the generic cast from T* to U* and a second for the specific cast from int* to double*. Message 9176 now only reports the latter.

PCLP-3291

Update documentation for message 422
The documentation for message 422 has been updated to remove an inapplicable example and clarify the circumstances in which the message is emitted.

PCLP-3357

Improved analysis of constant arrays
The specific values of array elements of constant scalar arrays are now used to support the analysis of expressions that reference them.

PCLP-3511

Support for AUTOSAR 19
PC-lint Plus previously provided support only for AUTOSAR 17 coding guidelines. Support is now provided for AUTOSAR 19 coding guidelines as well (the latest version of the AUTOSAR standard).

PCLP-3516

New builtin function semantics for the log, logf, and logl functions
PC-lint Plus will now detect potential domain errors resulting from misuse of the log, logf, and logl Standard C library functions.

PCLP-3523

New message 9456 supports AUTOSAR A6-5-3
The new message 9456 now reports on a do statement that is used outside of a statement-like macro definition.

PCLP-3527

Support for AUTOSAR Rule A2-13-5
Message 9439 will report hexadecimal floating and integer literals that contain lower case digits (a-f). Complete support for AUTOSAR Rule A2-13-5 is now provided.

PCLP-3528

Support for AUTOSAR19 Rule A2-13-6
Message 9423 (non-basic character used in identifier) can also be used to indicate identifiers that use non-basic characters.

AUTOSAR19 Rule A2-13-6 is now supported by the new messages 9443 (universal-character-name used in identifier).

PCLP-3532

Message 1511 parameterized with access of hidden function
Message 1511 (member function hides non-virtual member) is now parameterized by the member access of the function being hidden allowing suppression of the message for e.g. hidden private members (using -estring(1511,private)). This change supports the exception to AUTOSAR19 Rule A10-2-1 for private member functions.

PCLP-3537

Support AUTOSAR Rule A5-1-3
AUTOSAR Rule A5-1-3 is now suported by the new message 9424) (parameter list omitted from lambda expression).

PCLP-3538

Support for AUTOSAR A5-1-6 provided by new message 3903
The new message 3903 provides support for AUTOSAR A5-1-6 by reporting lambda expressions without explicitly specified return types.

PCLP-3541

Improved support for AUTOSAR Rule A13-6-1
Message 9440 is issued whenever the digit sequence separators (’) in an integral or floating literal do not occur every Nth digit, where N is: 2 for hexadecimal, 3 for decimal and octal, and 4 for binary. Complete support for AUTOSAR Rule A13-6-1 is now provided.

PCLP-3594

Improve analysis of pointers initialized in if statements
The existing support for analysis of modifications to a pointer value made within if statements has been extended to improve the handling of cases where a pointer first obtains a meaningful value when values are assigned in both paths through an if statement.

PCLP-3595

Improve analysis of multiple return points in functions returning structures
The analysis of possible return values associated with various conditional return points within a called function now has improved support for merging values within returned structures.

PCLP-3619

Improve handling of user-defined conversions in Value Tracking
The circumstances under which Value Tracking evaluates implicit calls to user-defined conversion operators have been generalized to improve analysis quality.

PCLP-3669

Remove the deprecated +fdu flag option
The fdu flag option was previously deprecated in PCLP-3514 and has now been fully removed.

PCLP-3814

Improve support for exceptions to MISRA C 2012 Rule 10.3
Message 9034 now implements an additional exception for initialization with 0 to improve support for MISRA C 2012 Rule 10.3.

PCLP-3816

Extend scope of message 9034 to include switch case values
Message 9034 now applies MISRA C 2012 Rule 10.3 to the conversion of a switch case value to the type of the switch condition expression.

PCLP-3872

Improve text of mapped clang error and supplemental messages
References to clang options which do not apply to PC-lint Plus have been removed from the text of various mapped clang messages for clarity.

PCLP-3880

Update license information for LLVM
The Open Source Declarations have been updated to reflect the new license employed by the LLVM project.

PCLP-3901

Update information on accommodating the _bit compiler extension
The documentation no longer recommends the use of reserved word options for the _bit keyword which some compilers use to name a one-bit integral type. See PCLP-3935.

PCLP-3905

Improved performance of -d/-u options appearing between -env_push/-env_pop options
Project configurations generated with the pclp_config utility typically enclose each module in a block that begins with -env_push and ends with a corresponding -env_pop. Within this block are relevant -d options that define macros the correspond to similar compiler options. When the total number of such options across all blocks for a project was very large, severe performance degradation could result. This issue has been corrected .

PCLP-3912

Improve support for MISRA C 2012 Rule 1.1 using message 793
Message 793 expands support for MISRA C 2012 Rule 1.1 by reporting when translation limits are exceeded.

PCLP-3913

Fix typo in appended text for CERT-C Rule POS54-C
The appended text for violations of POS54-C reported by message 534 when using au-certc.lnt now correctly refers to POS54-C where it previously referenced POS53-C.

PCLP-3919

Add walk_parent_expr hook field as alias for walk_pexpr
The walk_parent_expr hook field documented in the Hooks Programmer’s Guide was previously only accessible as walk_pexpr. This field is now also accessible with the name walk_parent_expr.

PCLP-3920

Remove unused suppression from MISRA C 2012 Rule 10.3
An -estring option for message 9052 has been removed from the Rule 10.3 section of the MISRA C 2012 configuration file. This suppression was not applicable as message 9052 is not enabled by the MISRA C 2012 configuration file and is not used to provide support for any MISRA C 2012 rules.

PCLP-3930

Exclude deduction guides from messages reporting function declarations
Messages concerning function declarations such as 2701 , 902 and 955 have been updated to prevent inapplicable messages for deduction guides. Note that message 9141 will still report deduction guides.

PCLP-3935

Support for integer types of arbitrary size
PC-lint Plus now supports the _ExtInt extension which allows support for arbitrarily-sized integers, including single-bit types.

PCLP-3955

Improve performance for const array initialization chains when many array elements are initialized in terms of other arrays referencing further such arrays with interleaving function invocations
Performance has been improved when processing larger examples of the form:

int g(); 
 
int const              a[] = { 1+g(), 2+g(), 3+g() }; 
int const * const       b[] = { a+g(), a+g(), a+g() }; 
int const * const * const c[] = { b+g(), b+g(), b+g() }; 
 
void f() { 
   c; 
}

which previously exhibited performance differences based on the presence or absence of const qualification.

PCLP-3960

Added support for Visual Studio 2022
The automated configuration tool (pclp_config.py) has been enhanced to support Visual Studio 2022 and later versions of Visual Studio 2019.

The C++ feature test macros in the generated compiler configuration header files are now filtered to match what PC-lint Plus supports. A new option (–dont-filter-feature-test-macros) has been added to disable this filtering if required.

PCLP-4003

Exclude Boolean operators from MISRA C 2004 underlying type rules
While Boolean operators yield a result of type int, MISRA has clarified that they do not intend for them to participate in underlying type enforcement. Expressions classified as Boolean-by-Construction are now excluded from underlying type classification.

PCLP-4004

Use int as destination underlying type for the purpose of initialization for MISRA C 2004
Initialization of a variable of enumeration type could previously result in an instance of message 9225 reporting an underlying type conversion with an enumeration type as the destination type. In such cases the destination type used in the message and for the purpose of determining whether the message is issued will now be int.

PCLP-4007

Exclude initialization of pointers from MISRA C 2004 Rule 10.1
Violations of MISRA C 2004 Rule 10.1 will no longer be reported when an integer, e.g. a null pointer constant, is used to initialize a pointer.

PCLP-4009

Clarify descriptions of messages 3402 and 3702
The descriptions of messages 3402 and 3702 have been updated to clarify that they are emitted for lambdas that default to capture by value and by reference, respectively.

PCLP-4013

Corrected and improved thread analysis reports
The generated machine readable (CSV, JSON, and XML) thread analysis reports could be invalid. All known issues with these reports have been corrected. The layout of the (text format) threads report has been improved by placing the thread name on its own line and splitting the root function prototype and its definition source line information on separate lines. In addition, several new status fields associated with the report filters have been added.

PCLP-4014

Add Undecidable classification for MISRA C 2012 Rule 2.1
The MISRA C 2012 support matrix now shows rule 2.1 as "Req*" rather than "Req", indicating that it is undecidable.

PCLP-4021

Update Frequently Asked Questions entry regarding the creation of custom messages
The Frequently Asked Question entry about creating new messages now notes that the new Queries feature provides this capability.

PCLP-4025

Linux builds now require glibc 2.17
The required version of glibc has increased from 2.11 to 2.17.

PCLP-4026

Support the char8_t keyword in clang and GCC compiler configurations generated with pclp_config
Clang and GCC compiler configurations generated by pclp_config will now enable the char8_t keyword when appropriate.

PCLP-4033

Increase default template recursion depth limit
The default template recursion depth limit (modifiable via the -tr_limit option) has increased from 75 to 1024.

PCLP-4036

Update GCC compiler configuration generation
Configurations generated for GCC previously contained the options –u_GLIBCXX_BUILTIN_IS_SAME_AS and –u_GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED to prevent the use of unavailable extended keywords. These keywords are now supported and these options are no longer generated.

PCLP-4041

Update documentation with correct version of AUTOSAR targeted by au-autosar.lnt
The documentation for Beta 1 stated that the provided au-autosar.lnt file targeted AUTOSAR 17-10, the actual targeted version is AUTOSAR 17-03. The documentation has been corrected.

PCLP-4042

Add missing AUTOSAR Rule M17-0-3 to au-autosar.lnt
An entry for the (unsupported) AUTOSAR Rule M17-0-3 has been added to au-autosar.lnt.

PCLP-4043

Removed error messages
The following errors have been removed from PC-lint Plus: 64 (incompatible types in initialization), 111 (assignment to const object), 1005 (destructor declaration requires a class), 1049 (template argument arity mismatch), 1050 (missing template args), 1111 (illegal explicit specialization), 1121 (no viable function for range expression), and 1122 (range expression begin/end mismatch). PC-lint Plus will diagnose relevant errors with a mapped clang error in the 4001-6999 message range.

PCLP-4048

Improvements to pclp_config
Compiler configuration files generated by pclp_config.py now contain additional information in the introductory comment that further document when and how they were generated. The –compiler-c-options options or –compiler-cpp-options options will be applied whenever the compiler is invoked. Previously these options were only applied when the compiler was invoked to obtain the predefined macros. Additional debugging options were added. For more details, see the pclp_config Options Reference.

PCLP-4057

Improved support for GCC 11 compiler configurations generated by pclp_config
Compiler configurations generated by pclp_config for GCC or clang compilers will now include options that prevent the use of unsupported GCC features by standard library headers via the __attr_dealloc and __attr_dealloc_free macros.

PCLP-4070

Expand support for AUTOSAR A1-1-1 and change support level to "partially supported"
The detection of deprecated C++ standard library features supporting AUTOSAR A1-1-1 has been expanded. The support status for this guideline has been changed to "partially supported" and the scope of support is now described in the support matrix.

PCLP-4073

Remove mapping of messages previously used to provide support for AUTOSAR A4-7-1 and mark this rule as not supported
Messages 9119 and 9120 are no longer associated with AUTOSAR A4-7-1, and this rule is now categorized as not supported.

PCLP-4074

Document limitations for support of MISRA C++ 2008 Rule 3-4-1
Message 9003 (could define global variable within function) is used to support MISRA C++ 2008 Rule 3-4-1 (and the corresponding AUTOSAR Rule M3-4-1) but has limitations that prevent it from providing full coverage for this rule. The support status of this rule has been downgraded to "partially supported" with the limitations noted in the support matrix.

PCLP-4075

Parameterize -append options for message 829 (+headerwarn option issued) used in au-misra-cpp.lnt
The +headerwarn option is used to support MISRA C++ 2008 Rules 18-0-1, 18-0-4, 18-7-1, and 27-0-1 in the au-misra-cpp.lnt file but the corresponding -append options were not parameterized with the names of the offending headers. The result was that use of a header that was prohibited by any of these guidelines was diagnosed as a violation of all of them. This issue has been corrected and only the appropriate guideline will now be referenced in the violation message.

PCLP-4076

Add -append options for message 829 (+headerwarn option issued) used in au-misra3-amd2.lnt
The +headerwarn options is used to support MISRA C 2012 Rule 1.4 in the au-misra3-amd2.lnt file did not contain corresponding -append options correlating the resulting issuance of message 829 (+headerwarn option issued) to the violated rule. This issue has been corrected, and message 829 issued as a result of using stdalign.h or stdnoreturn.h will now reference the corresponding MISRA guideline.

PCLP-4093

Update hardware requirements to reflect uniform requirement for 64-bit CPU
The hardware requirements have been updated to reflect that PC-lint Plus 2.0 requires a 64-bit CPU and is not distributed with 32-bit binaries for any platform.

PCLP-4094

Parse JSON compilation databases as JSON instead of YAML within pclp_config
The pclp_config utility previously used the yaml Python module to parse JSON compilation databases when generating project configurations which could result in a parse error when tabs were used for indentation as occurs in compilation databases produced by iarbuild. The json module is now used to parse JSON compilation databased by pclp_config.

PCLP-4095

Include instructions for generating a JSON compilation database with iarbuild
Instructions for generating a JSON compilation database with recent versions of iarbuild using the -jsondb option are now provided.

PCLP-4100

Improvements to the representation of symbols and types in message parameters
Various minor improvements to the general representation of symbols and types appearing in message parameterizations including:

- The Boolean type is represented as bool instead of _Bool in C++ mode.

- The restrict qualifier is consistently represented in C mode even when written using an alternate keyword such as __restrict.

- Defaulted template type parameters are elided from the representation of the instantiated type.

- The representation of nested template types elides spaces between adjacent closing angle brackets in C++11 and later.

PCLP-4208

Support multiple parsing behaviors for JSON compilation databases
The parsing behavior used when pclp_config.py processes a JSON compilation database now defaults to posix-like for Linux and macOS and non-posix-like for Windows. The new options –posix-command-parsing and –no-posix-command-parsing may be used to override the default behavior. The parsing behavior affects how backslashes and quotes are handled in response files and arguments embedded in the command field of JSON compilation databases.

23.4.5 Bugs Fixed



PCLP-2391

Resolve false positive instance of message 2434 for dereference of pointer lexically subsequent to but excluded from control flow after an earlier conditional deallocation within a loop
A false positive instance of message 2434 could have previously occurred when, within a loop, a pointer was dereferenced subsequent to an if statement that conditionally executed a sequence consisting of the deallocation of the memory associated with the target of the pointer and an unconditional modification of control flow rendering the report site and the deallocation mutually exclusive. This issue has been resolved.

PCLP-2859

Resolve error 4714 for noexcept default constructor with default member initializer
A spurious instance of error 4714 (default member initializer needed within enclosing class) for a noexcept default constructor has been resolved.

PCLP-2999

False negative instance of message 1536 involving address of private array element
An issue in which an expected instance of message 1536 may not have been emitted when a member function returned the result of applying the address-of operator to a specific element of a private array data member has been resolved.

PCLP-3190

Resolve false negative instance of message 9011 when loop exit point count is exceeded only with consideration of a goto statement within a nested loop
An issue in which message 9011 may not appear when the presence of multiple exits is dependent on the attribution of a transfer of control within a nested loop to an outer loop has been resolved.

PCLP-3242

Resolve false positive 641 involving a conditional operator expression where both the second and third operand are of the same enumeration type
A conditional operator expression whose second and third operands are of the same enumeration type is now treated as resulting in a value of the common enumeration type. This resolves false positive instances of message 641 that could previously occur when an operation combined a recognized enumeration value and an unrecognized enumeration value from a conditional operator.

PCLP-3633

Inappropriate suppression of messages 451, 537, and 967
An #include directive with a file name that contained a directory separator was previously treated as library for the purposes of messages 451 , 537 , 967 which could result in a false negative in situations where the header was not a library file and the corresponding message was enabled for non-library files but disabled for library files. Additionally, messages 451 and 537 were previously unintentionally treated as appearing in a library region when the file being included was a library header but the #include directive appeared in a non-library region. These issues have been corrected.

PCLP-3652

Fixed crash for a friend function declaration containing an expression-form noexcept specifier with a default argument
PC-lint Plus would previously crash while parsing a friend function declaration that contained both a default argument and an expression-form noexcept specifier. This was most notably encountered when using the ASIO library which required using either the ++dASIO_NOEXCEPT_IF(x)= or ++dBOOST_ASIO_NOEXCEPT_IF(x)= options as a work-around. The underlying issue has been resolved and the previously-provided work-arounds are no longer necessary.

PCLP-3855

Resolve unexpected syntax error for structured binding to const reference with Visual Studio standard library
An unexpected syntax error that could occur when a structured binding attempted to bind to a const reference when using the Microsoft Visual Studio standard library has been resolved.

PCLP-3864 PCLP-3921

Resolve internal error involving switch statements containing nested control structures where all independent paths are certain to uniformly throw, continue, or exit
An internal error with error code 197D39F9 and diagnostic info -37 that could occur in specific situations involving switch statements containing nested control structures where all independent paths are certain to uniformly throw, continue, or exit has been resolved.

PCLP-3907

Resolve false positive 727, 728, or 729 when taking the address of a parenthesized variable name
False positive instances of messages 727 , 728 , or 729 that could have previously occurred when the operand to the address-of operator was the name of a variable enclosed in parentheses have been resolved.

PCLP-3927

Improve recognition of temporary output file paths when configuring TI compilers
An issue that could prevent the automated detection of macro definitions and size options from TI compilers when temporary files were produced in certain directories has been resolved.

PCLP-3931

Resolve internal error associated with use of deduction guides
An internal error with the Clang message “Can’t mangle a deduction guide name!” when a constructor call uses a deduction guide has been resolved.

PCLP-3936

Correct domain error semantics for the log1p, log1pf, and log1pl functions
A false positive 2423 (apparent domain error for function) or 2623 (possible domain error for function) message could be emitted when the log1p, log1pf, and log1pl functions were called with an argument having a value of less than one instead of a value of less than negative one. This issue has been corrected.

PCLP-3959

Message 9046 removed as supporting mechanism for AUTOSAR
References to message 9046 (symbol is typographically ambiguous) have been removed from the autosar author files as this message is not currently supported for C++ modules.

PCLP-3974

False position message 2751 when thread root function is prefixed with the address-of operator
If the thread root function passed to the std::thread constructor is prefixed with the address-of operator a false positive message 2751 (indeterminable thread root function) was previously emitted. This issue is now resolved.

PCLP-3984

Properly handle backslashes in the command field of JSON compilation databases
When directory separators are represented using backslashes in the command field of a JSON compilation database, the resulting project configuration generated by pclp_config.py would not include the directory separators. This situation could occur when using cmake with a Makefile generator on Windows. This issue has been resolved.

PCLP-4027

Unintentionally extended comments in pclp_config-generated compiler configuration files
When a compiler option specified via one of –compiler-options, –compiler-c-options, or –compiler-cpp-options ended with a backslash, the explanatory C++-style comment that followed the transformed option could also end with a backslash eliciting message 427 (comment continued via back-slash) and causing any options on the following line to be ignored. For example, using:

--compiler-options=-I\

could result in the following line generated in the produced configuration file:

-i"\" // From compiler option(s): -I\

Compiler options are now enclosed in single quotes within the explanatory comment.

PCLP-4029

Resolve template substitution failure for certain non-type template arguments of enumeration type
An error most likely to manifest through message 5819 where template substitution failed due to the forwarding of the value of a non-type template parameter of enumeration type from an outer class template to a template argument list appearing within the instantiation of an inner member function or constructor template has been resolved.

PCLP-4165 PCLP-3630

Fix potential crash or hang when analyzing repeated definitions of a single function across multiple modules while using a large number of concurrent threads
An issue that could cause a crash or hang during global wrap-up or a later pass when analyzing a large project containing multiple definitions of the same function in many different modules while utilizing a large number of concurrent threads has been resolved.

PCLP-4188 PCLP-3956

Resolve false negative 1540 for data members after a const data member
Message 1540 previously exhibited false negatives for data members appearing subsequent to a data member declared const. This issue has been resolved.

PCLP-4192

Recognize __declspec(uuid)
PC-lint Plus 2.0 beta versions incorrectly emitted message (5957) for all calls to __uuidof because it did not correctly recognize the Microsoft uuid attribute. This regression error has been corrected.

PCLP-4200

Recognize __declspec(thread)
The 2.0 beta versions silently ignored __declspec(thread) instead of treating it as equivalent to thread_local. This regression error has been corrected.

23.4.6 Known Issues

PCLP-939

Message 756 is disabled

PCLP-960

Message 9103 not issued for inter-module reuse

PCLP-2135

False negative 9003 for static variables

PCLP-2603

Message 767 is disabled

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type

PCLP-3197

False negative instance of message 9034 involving compound assignment

PCLP-3198

False positive 9045 for nested structures

PCLP-3213

False positive implicit conversion messages when an explicit cast expression is used as a template argument for a non-type template parameter

PCLP-3223

The undocumented +fil flag is not implemented

PCLP-3569

False positive 550 for variable initializing const reference member using braced syntax

PCLP-3660

False positive instance of message 776 for addition between int and long of equal size

PCLP-3803

False positive 650 for shifted values

PCLP-3856

False positive side-effect related messages for a lambda that has side effects

PCLP-4010

False positive 9049 within lambda body

PCLP-4046

False positive 1764 for universal reference parameter of template instantiated with a lambda



PCLP-939

Message 756 is disabled
Message 756 (global typedef not referenced) is disabled in the current release.

PCLP-960

Message 9103 not issued for inter-module reuse
Message 9103 (identifier with static storage reused) is not issued when a reuse of a static storage identifier occurs in a separate module.

PCLP-2135

False negative 9003 for static variables
A file-scope static variable referenced only within a single function will not be reported by 9003 . The message will be issued for variables that are implicitly or explicitly extern.

PCLP-2603

Message 767 is disabled
Message 767 is disabled in the current release.

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects
A false positive instance of message 522 may be emitted for a call to a const member function despite the presence of external side-effects.

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type
Message 1565 will report when an initializer function has not initialized a non-static data member of the class of which the initializer function is a non-static member function. It will not report based on the status of non-static data members of other objects nested recursively as sub-objects of a non-static data member of class type.

PCLP-3197

False negative instance of message 9034 involving compound assignment
A compound assignment involving operands of different essential type categories may be reported by message 9029 , but compound assignment may not elicit an expected instance of message 9034 .

PCLP-3198

False positive 9045 for nested structures
Message 9045 (complete definition of symbol is unnecessary in this translation unit) may be incorrectly issued for structures whose only use appears within another structure.

PCLP-3213

False positive implicit conversion messages when an explicit cast expression is used as a template argument for a non-type template parameter
When providing a cast expression as a template argument to a non-type template parameter some messages described as reporting implicit conversions may be issued as if the cast operand were implicitly converted to the cast type.

PCLP-3223

The undocumented +fil flag is not implemented
The +fil flag, which would control whether or not indentation checking is applied to labels, is not implemented. This unimplemented flag is not documented in the list of flag options, but a reference to it is made in section 13.4.

PCLP-3569

False positive 550 for variable initializing const reference member using braced syntax
Message 550 (local variable not subsequently accessed) may be incorrectly issued when the only use of the referenced variable is to initialize a const-qualified reference member in the member-init-list of a constructor using braced syntax.

PCLP-3660

False positive instance of message 776 for addition between int and long of equal size
The addition of an int and long while using a configuration where sizeof(int) == sizeof(long) may result in a false positive instance of message 776 .

PCLP-3803

False positive 650 for shifted values
Message 650 (constant out of range for operator) is sometimes incorrectly issued when the result of a shift expression is compared with a constant value.

PCLP-3856

False positive side-effect related messages for a lambda that has side effects
Side effects resulting from the invocation of a closure type’s function call operator may elicit diagnostics (including 522 , 523 , and 438 ) that incorrectly imply the lack of a corresponding side effect.

PCLP-4010

False positive 9049 within lambda body
Message 9049 (increment/decrement operator used in expression with other side-effects) is incorrectly issued for increment and decrement expressions appearing as part of a statement without additional side-effects within the body of a lambda expression.

PCLP-4046

False positive 1764 for universal reference parameter of template instantiated with a lambda
Message 1764 (reference parameter of function could be reference to const) may be incorrectly issued when a function template is instantiated with a lambda as the argument corresponding to a universal reference parameter.

23.4.7 Changes to Beta Functionality Since Version 2.0 Beta 3

PCLP-4190

Resolve false positive messages involving conversions of integer constant expressions

PCLP-4198

Resolve incorrect library classification for file metrics

PCLP-4207

Correct undefined variable regression error within pclp_config



PCLP-4190

Resolve false positive messages involving conversions of integer constant expressions
False positive instances of messages involving the conversion of integer constant expressions such as message 569 in previous betas of version 2.0 have been resolved.

PCLP-4198

Resolve incorrect library classification for file metrics
Library status classification for file metric hosts was introduced in beta 2, but an issue that affected this classification could cause library files to be unexpectedly included in (when -flo is off) or excluded from (when +flo is on) the metric report. This issue has been resolved.

PCLP-4207

Correct undefined variable regression error within pclp_config
The 2.0 beta 3 version of pclp_config would abort if it was unable to determine the version information of the selected compiler. This issue has been corrected.

23.5 Version 1.4.1

23.5.1 Summary

Bugs Fixed

PCLP-3802

Resolve internal error associated with precision messages

PCLP-3818

Resolve false positives related to the use of throw, continue, and return within switch statements

PCLP-3822

Resolve false negatives in non-library code appearing subsequent to an include directive for a library header and prior to any intervening lint comment or include directive for a non-library header

23.6 Version 1.4

23.6.1 Summary

New Features

PCLP-2033

Add message 2418 to report declarations with conflicting strong types

PCLP-2440

Detect and diagnose multi-threading issues

PCLP-2744

Added support for CERT recommendation CON01-C

PCLP-2753

Detect dangerous accesses between threads

PCLP-2757

Detect inconsistent mutex locking order

PCLP-2762

Detect dangerous accesses between threads

PCLP-3022

New message 2415 reports out of range comparisons in loop conditions

PCLP-3550

New builtin __lint_assert function and assert macro override for pclp_config-generated compiler configurations

PCLP-3709

Automatic compiler configuration generation for Texas Instruments Code Composer Studio compilers using pclp_config.py

Improvements

PCLP-805

JSON Compilation Database support for pclp_config

PCLP-1662

Messages 655 and 656 now issued with a type parameter, portrayal of tagless enumerations is improved

PCLP-2072

Message 1520 no longer issued for non-copy non-move assignment operators

PCLP-2299

Improve tracking of active member changes for unions containing structures

PCLP-2331

New options to control modules included in project configurations generated with pclp_config

PCLP-2569

Improved error handling for the -sem option

PCLP-2589

Message 9035 will now report any use of VLAs

PCLP-2681

Slash equivalency in filename patterns

PCLP-2891

Member hiding messages are no longer used to support MISRA C++ Rule 2-10-2

PCLP-3013

Message 1511 no longer reports assignment operators

PCLP-3087

Improved warnings for common misuse of the -i option

PCLP-3134

Messages 655 and 656 now supported for C++ modules

PCLP-3141

Clarify scope of message 565

PCLP-3192

Improvements to message 9020 (header file name with non-standard character sequence)

PCLP-3204

Message 9137 is now deprecated

PCLP-3219

Compound assignment considered a side effect for messages 666 and 2666

PCLP-3260

Improvements to for statement messages 440, 442, 443, and 444

PCLP-3422

Improved reporting of conversions appearing in C++ constructors.

PCLP-3491

Improved precision handling of enumerations without enumerators

PCLP-3508

Improved reporting of conversions appearing in initializer lists

PCLP-3514

Deprecation of the fdu flag option

PCLP-3546

Improved support for AUTOSAR Rule A18-0-3

PCLP-3558

Disassociate inappropriate messages from CERT C guideline MSC12-C

PCLP-3562

Exclude operands of Boolean and enumeration type when checking BARR-C:2018 Rule 5.3c

PCLP-3566

Use /usr/bin/env to select the interpreter for pclp_config

PCLP-3567

Changes to handling of #pragma once and alternate include guards for 451 and 967

PCLP-3572

Improve Value Tracking of switch statements

PCLP-3596

Improved library determination of symbols reported in global wrap-up messages

PCLP-3597

Improved handling of project include directories for configurations generated with pclp_config

PCLP-3598

Improved portrayal of permanent licenses

PCLP-3601

Exceeding maximum #include depth is now an unsuppressible fatal error

PCLP-3604

Use of deprecated types diagnosed outside of declarations

PCLP-3605

Support for MISRA C 2012 AMD-2

PCLP-3616

Perform case-insensitive matching for -efile/+efile when fff flag option is ON

PCLP-3629

Lint comments and macros subject to AST suppressions from special forms of -emacro ((#) or #) within macro argument expansions are now processed at each argument expansion

PCLP-3636

Improve rendering of references in message help

PCLP-3639

Improved compiler configuration for IAR ARM

PCLP-3640

Allow enclosing expression suppressions at the start of an expression

PCLP-3641

Update pclp_config support for Visual Studio 2019 16.7.1 to resolve error 5557 in the xutility header

PCLP-3642

Performance improvements when using a large number of macros

PCLP-3647

Clarify support for MISRA guidelines regarding assistance in identification of binary pointer operations

PCLP-3655

Remove reference to non-existent message

PCLP-3663

Improve wording of 4xxx and 5xxx messages section

PCLP-3666

Make instructions for suppressing coding guideline checking in library files more prominent

PCLP-3690

Correct built-in semantics documentation

PCLP-3691

Added missing built-in semantics for Qt’s QMutex and QRecursiveMutex member functions.

PCLP-3693

Improve value tracking of pointer casts from derived class to base class

PCLP-3695

Resolve false positives related to switch statements nested within loops

PCLP-3698

Resolve false positive 438 for value used within switch case that returns

PCLP-3701

Resolve unexpected interpretations of return values of conversion operators to integral types

PCLP-3703

Document the thread_atomic, thread_non_atomic, and thread_protected semantics

PCLP-3705

Correct if statement lock state inferencing

PCLP-3706

Resolve false positive 644 for variable initialized in all paths of switch statement except those that terminate the program

PCLP-3712

Include exception code in Windows crash message and resolve spurious pre-run crash messages caused by remote code injection by antivirus software

PCLP-3717

Improve handling of function template instantiations for message 2467

PCLP-3718

Improve library classification of symbols with implicit declarations

PCLP-3720

Do not copy special mutex semantics when -function option copies function-wide semantics

PCLP-3723

Resolve false positive 530 on return values of functions with special mutex function semantic

PCLP-3732

Improved intrinsic function support for XC compiler configurations generated with pclp_config

PCLP-3733

Correct the determination of const referenced parameters and atomic types

PCLP-3738

Resolve false positives involving union assignment within a loop and subsequent access to different subobject

PCLP-3739

Remove message 956 as a support mechanism for BARR-C:2018 Rule 1.8c

PCLP-3741

Resolve false positive 438 for variable assigned to prior to switch and read in switch case prior to fallthrough to next case

PCLP-3745

Correct tracking of compound assignments for thread analysis

PCLP-3752

Target macOS 10.15

PCLP-3753

Resolve internal error involving incremented union members

PCLP-3754

Add a section about potential interactions with antivirus software

PCLP-3755

Fix typo in Highlights section of 1.4 Beta 1 changes

PCLP-3757

Remove references to non-existent message 9089 in au-misra2.lnt and au-misra3.lnt

PCLP-3758

Handle class member mutexes passed to locked class constructor

PCLP-3761

Improve handling of Strong Types within one-way hierarchies joined using a binary operator and introduce +ffj

PCLP-3764

Suppress spurious empty lines emitted in configurations generated with pclp_config

PCLP-3775

Update Common Issues section and add FAQ section

PCLP-3788

Improve handling of exceptions to rules supported by message 970

PCLP-3797

Parameterize messages 413 and 613 by symbol for member access expressions

Bugs Fixed

PCLP-2086

False negative 529 or 550 and false positive 953 for condition variables

PCLP-2097

False positive 644 for structure member initialized by conditional structure assignment in C

PCLP-2573

Message 651 no longer issued for empty nested aggregate initialization

PCLP-2814

Improvements to fatal error handling

PCLP-2826

False positive 1576 for specialization via macro expansion

PCLP-3189

False negative 839

PCLP-3196

Resolve an issue where a function that can indirectly call itself recursively where the recursive call occurs in the call chain below a recursive call to a different function could previously have been labeled "calls recursive"

PCLP-3221

Resolve false positives associated with inferences regarding the right operand of a logical operator in a condition within a loop in the presence of knowledge of prior values

PCLP-3222

Improper handling of symbols referenced through a using declaration

PCLP-3305

Message 1785 incorrectly issued for dependent types

PCLP-3391

Improvements to determination of enclosing expressions for –emacro((#),...) suppressions

PCLP-3486

Resolve false positive 929 for initialization of pointer to auto

PCLP-3504

-libdir/+libdir options not matching directories specified with a trailing slash

PCLP-3519

False positive 977 for call to overloaded operator with Boolean parameter

PCLP-3520

False positive 586 for lambda with deduced return type

PCLP-3593

nonnull attribute incorrectly removes preexisting function argument semantics

PCLP-3599

False positive 586 for template argument substitution using typedef

PCLP-3613

Messages inappropriately suppressed following fatal error

PCLP-3679

Resolve an error in the handling of a semantic expression in specific situations involving a left operand of zero and a return semantic identifier

PCLP-3692

Faulty interaction between -u/–u options and -env_save/-env_restore/-env_push/-env_pop

PCLP-3694

Message 9067 no longer issued for dependent-sized arrays or arrays with non-external linkage

PCLP-3696

Resolve internal error or crash that could occur when analyzing invalid code containing syntax errors within a condition variable declaration

PCLP-3725

Restore parameterized suppression state when -env_restore/-env_pop options are used outside a module

PCLP-3790

Resolve false positive 8528 (au-barr.lnt) for anonymous enumerations outside of typedefs

PCLP-3798

Resolve internal error involving compound assignment as operand to comparison

Known Issues

PCLP-2135

False negative 9003 for static variables

PCLP-2391

False positive instance of message 2434 for dereference of pointer lexically subsequent to but excluded from control flow after an earlier conditional deallocation within a loop

PCLP-2603

Message 767 is disabled

PCLP-2614

False positive instance of message 522 for call to const member function but has external side-effects

PCLP-2999

False negative instance of message 1536 involving address of private array element

PCLP-3004

Message 1565 does not report the status of sub-objects within data members of class type

PCLP-3190

False negative instance of message 9011 when loop exit point count is exceeded only with consideration of exit points within nested loops

PCLP-3197

False negative instance of message 9034 involving compound assignment

PCLP-3213

False positive implicit conversion messages when an explicit cast expression is used as a template argument for a non-type template parameter

PCLP-3223

The undocumented +fil flag is not implemented

PCLP-3242

Conditional operator expression where both the second and third operand are of the same enumeration type not treated as resulting in a value of that enumeration type in C for the purposes of message 641

PCLP-3652

Crash when using recent versions of the Asio C++ Library / Boost.Asio

PCLP-3660

False positive instance of message 776 for addition between int and long of equal size

PCLP-3787

Potential syntax error when using std::get<T>(std::variant) or std::holds_alternative from the Visual Studio 2019 standard library

AUTOSAR Summary

PCLP-3599

False positive 586 for template argument substitution using typedef

PCLP-3546

Improved support for AUTOSAR Rule A18-0-3

PCLP-3520

False positive 586 for lambda with deduced return type

CERT C Summary

PCLP-2744

Added support for CERT recommendation CON01-C

PCLP-3558

Disassociate inappropriate messages from CERT C guideline MSC12-C

PCLP-2762

Detect dangerous accesses between threads

PCLP-2757

Detect inconsistent mutex locking order

PCLP-2753

Detect dangerous accesses between threads

MISRA Summary

PCLP-3788

Improve handling of exceptions to rules supported by message 970

PCLP-3757

Remove references to non-existent message 9089 in au-misra2.lnt and au-misra3.lnt

PCLP-3647

Clarify support for MISRA guidelines regarding assistance in identification of binary pointer operations

PCLP-3605

Support for MISRA C 2012 AMD-2

PCLP-3192

Improvements to message 9020 (header file name with non-standard character sequence)

PCLP-3189

False negative 839

PCLP-2891

Member hiding messages are no longer used to support MISRA C++ Rule 2-10-2

PCLP-2589

Message 9035 will now report any use of VLAs

PCLP-3197

False negative instance of message 9034 involving compound assignment

PCLP-3190

False negative instance of message 9011 when loop exit point count is exceeded only with consideration of exit points within nested loops

23.7 Version 1.3.5

23.7.1 Summary

Improvements

PCLP-964

Add thread information to internal error and crash messages

PCLP-1757

Recognize explicit initialization using default constructor and add flag to consider implicit initialization using an explicitly declared default constructor to be an explicit initialization

PCLP-1820

Support message 506 and improve support for message 717

PCLP-2298

New support for AUTOSAR A5-0-2 and M5-0-14 guidelines, improved MISRA C++ support for Rules 5-0-13 and 5-0-14

PCLP-2973

Support for AUTOSAR Rule A12-8-7

PCLP-2975

Support for AUTOSAR Rule A13-2-3

PCLP-2996

Stack usage information now appears in deterministic order

PCLP-3085

Update documentation regarding manual configuration without pclp_config

PCLP-3101

Performance improvements for range-based suppressions

PCLP-3117

Suppress messages issued inside of explicitly defaulted function bodies

PCLP-3119

Message 981 no longer issued for template instantiations

PCLP-3146

Updated example used in description of message 1544

PCLP-3170

Improvements to const variable exemption opt-in interpretation

PCLP-3171

Update description of message 1919

PCLP-3172

Update description of message 1930

PCLP-3184

Parameterized suppression and +paraminfo support for supplemental messages 894 and 897

PCLP-3185

Document that messages 893, 894, and 897 are immune to direct one-line suppressions

PCLP-3188

Remove listing for unused supplemental message 890

PCLP-3193

Improved handling of array arguments for message 857

PCLP-3194

Improvements to support for A5-2-2

PCLP-3199

Clarify that message 9075 operates on objects, not functions

PCLP-3202

Message 829 is now issued for multiple inclusion of headers employing #pragma once and is now applicable to precompiled headers

PCLP-3203

Correct typo in description of message 9134

PCLP-3206

Improve support for reporting block scope function declarations

PCLP-3207

Improve handling of static storage duration variables when calling functions with the assert semantic

PCLP-3212

Report implicit conversions occurring via member-init-list initialization.

PCLP-3214

Improved support for MISRA C 2004 Rule 12.8

PCLP-3218

Message 9019 more accurately reports declarations appearing before an #include directive

PCLP-3241

Added new section describing rules related to processing of parameterized suppressions

PCLP-3258

Remove non-existent message 2409 from product documentation

PCLP-3269

Improved support for MISRA C 2012 Rule 11.2

PCLP-3289

Update description for +fai

PCLP-3303

Added new/missing guidelines for CERT C

PCLP-3311

Support non-variadic functions with printf and scanf semantics

PCLP-3320

Suppress messages issued during expansion of assert macro

PCLP-3341

Flexible refinements to tracking of implementation-defined pointers converted from integral values

PCLP-3359

Consider shift operators to be bitwise operators for the purpose of rule 5-0-21

PCLP-3368

Improve support for Visual Studio 2019 update 16.4

PCLP-3374

Improved support for IAR compiler keywords in generated compiler configurations

PCLP-3381

New message 2536 warns when invalid character encoding is detected in a string literal

PCLP-3382

Add section documenting supported encodings of input files

PCLP-3384

Convert relative paths in include options generated from cl.exe /I and -I options into absolute paths when producing a project configuration using the pclpvscfg.exe utility

PCLP-3386

Add description and example for the non_custodial argument semantic

PCLP-3389

Add note regarding C++ language standard compiler options for Visual Studio when generating a Visual Studio compiler configuration

PCLP-3394

Incorrect use of +rw and -rw_asgn more gracefully handled

PCLP-3396

Use application directory as default location when requesting selection of pclp_config.py in pclpvscfg

PCLP-3397

Add default filenames to pclpvscfg dialogs

PCLP-3400

Improve handling of bit-fields with qualified types

PCLP-3406

Enable use of pclpvscfg with 64-bit versions of Microsoft Visual Studio 2012, 2010, 2008, and 2005

PCLP-3407

Allow language standard options to be controlled by option environments

PCLP-3411

New behavior for messages referring to internal buffers during module processing

PCLP-3423

Improved compatible type handling for message 857

PCLP-3433

Add automated configuration support and documentation for MetaWare ccac

PCLP-3450

Improve selection of ctype.h functions over macros

PCLP-3467

Remove outdated limitation from description of +emacro

PCLP-3468

Include -efunc and +efunc in "How Suppression Options are Applied" section.

PCLP-3471

Correct typo in an instance of message 2425

PCLP-3480

New support for AUTOSAR17 Rule A5-5-1

PCLP-3481

Support for AUTOSAR Rule A7-1-3

PCLP-3483

Support for AUTOSAR Rule A13-5-1

PCLP-3495

Exclude static local variables from stack usage

PCLP-3502

Update Open Source Declarations

PCLP-3506

Add new +fls flag to control handling of static local variables after external calls

PCLP-3509

Update descriptions of several messages

PCLP-3513

Inclusion of PC-lint Plus functional safety certificates and Best Practices document

PCLP-3552

Value of static variable lost when assigning return value of an unwalked function

PCLP-3555

Treat zero-length arrays as incomplete arrays for Value Tracking

PCLP-3565

Improvements to compiler configurations generated for GCC by pclp_config

Bugs Fixed

PCLP-2812

False positive 9045 for union definition

PCLP-2885

False positive 550 for variables captures by reference in a lambda

PCLP-3093

Resolve an issue that could manifest as an incomplete entry in the stack usage report

PCLP-3145

Improve handling of messages 438 and 838 within loops

PCLP-3176

Fix false negative for message 2427

PCLP-3179

Fix missing location when reporting a declaration of main with the inline or constexpr specifier

PCLP-3180

Improve stack usage for switch statements

PCLP-3181

Resolve an issue where union type punning could result in undesirable uninitialized access messages

PCLP-3183

Missing message 2707

PCLP-3187

False negative 451 and 967 for header with controlling macro but no standard include guard.

PCLP-3215

Resolve false positive 473 for address-of array subscript

PCLP-3224

Resolve an issue where members of structures within unions could incorrectly be reported as deallocated

PCLP-3229

Resolve a potential crash involving self-referential constructor initializers

PCLP-3234

Incorrect option syntax in IAR compiler configurations generated with pclp_config

PCLP-3294

Do not issue 1537 when returning a function pointer

PCLP-3310

False positive 593 for custodial pointer always closed/freed in if/else statement

PCLP-3324

Resolve an internal error involving arrays of incomplete types

PCLP-3358

Resolve a missed potential Boolean inference for a ternary operator condition when processing a C module

PCLP-3364

Resolve false negatives involving interval relational-or-equal comparisons

PCLP-3376

Fix possible crash after diagnosing a conflict between a return value allocated by an expression produced by a macro expansion involving the built-in __LINE__ macro and a return value semantic

PCLP-3378

Fix missing declaration issues when naming declarations with identifiers that were subject to -rw options in the presence of lint comments

PCLP-3380

Message 725 incorrectly issued as a warning

PCLP-3388

Corrected processing of implied this arguments (’t’) within -function option.

PCLP-3392

Disable line breaks in Keil μVision ARMCC configuration to resolve IDE navigation issues with long lines

PCLP-3434

Fix an internal error that could occur when a template applies the parameter pack size operator to a non-type template parameter pack of references

PCLP-3442

False positive 542 when assigning negative values to bitfields

PCLP-3465

+efreeze/++efreeze incorrectly prevents parameterized message enabling options from targeting frozen messages

PCLP-3466

Ignore duplicate parameterized suppression options involving partially frozen message sets

PCLP-3469

Crash when processing user-defined function semantic employing invalid argument index

PCLP-3470

False positive 542 for bitfields of unsigned enumeration type

PCLP-3472

Fix invalid UNC path expansion when using %ENCLOSING_DIRECTORY% within a file located on a Windows network drive.

PCLP-3507

Fix false positive 438 during specific walk

PCLP-3543

Corrected typos in au-autosar.lnt

PCLP-3547

Incorrect handling of friend declarations in class templates

PCLP-3561

Removed inappropriate supporting message for MISRA C++ Rule 6-6-3

PCLP-3570

Mesage 3702 not issued when message 3402 suppressed

Known Issues

PCLP-2135

False negative 9003 for static variables

PCLP-3196

A function that can indirectly call itself recursively where the recursive call occurs in the call chain below a recursive call to a different function may be labeled "calls recursive"

PCLP-3213

False positive implicit conversion messages when an explicit cast expression is used as a template argument for a non-type template parameter

PCLP-3221

False positive 413 for conditional evaluation of dereference of pointer inferred to be non-null on the right side of a logical AND expression in the condition of an if statement within a for statement prior to which the pointer had been known to be null

PCLP-3223

The undocumented +fil flag is not implemented

PCLP-3242

Conditional operator expression where both the second and third operand are of the same enumeration type not treated as resulting in a value of that enumeration type in C for the purposes of message 641

PCLP-3260

Message 440 is disabled

PCLP-3519

False positive 977 for call to overloaded operator with Boolean parameter

AUTOSAR

PCLP-3483

Support for AUTOSAR Rule A13-5-1

PCLP-3481

Support for AUTOSAR Rule A7-1-3

PCLP-3480

New support for AUTOSAR17 Rule A5-5-1

PCLP-3206

Improve support for reporting block scope function declarations

PCLP-3194

Improvements to support for A5-2-2

PCLP-2975

Support for AUTOSAR Rule A13-2-3

PCLP-2973

Support for AUTOSAR Rule A12-8-7

PCLP-2298

New support for AUTOSAR A5-0-2 and M5-0-14 guidelines, improved MISRA C++ support for Rules 5-0-13 and 5-0-14

MISRA C 2012

PCLP-3450

Improve selection of ctype.h functions over macros

PCLP-3269

Improved support for MISRA C 2012 Rule 11.2

MISRA C 2004

PCLP-3214

Improved support for MISRA C 2004 Rule 12.8

MISRA C++

PCLP-3359

Consider shift operators to be bitwise operators for the purpose of rule 5-0-21

PCLP-3206

Improve support for reporting block scope function declarations

PCLP-3170

Improvements to const variable exemption opt-in interpretation

PCLP-2298

New support for AUTOSAR A5-0-2 and M5-0-14 guidelines, improved MISRA C++ support for Rules 5-0-13 and 5-0-14

23.8 Version 1.3

23.8.1 Summary

Bugs Fixed

PCLP-1806

Resolve false positives related to initialization of members of returned class objects

PCLP-1835

Internal error A9BE308E (100829) related to use of definition options and precompiled headers

PCLP-1972

False positive 1762

PCLP-2036

Recognize when unconditional transfer of control by nested switch statement contributes to unreachability of statement subsequent to enclosing switch statement

PCLP-2227

Name mangling error with no category for C compound literal within C++ template argument resolved

PCLP-2459

False positive 981 for cast to _Bool in C

PCLP-2521

Respect redundant list initialization in C++17 mode

PCLP-2560

Warning levels supported in -zero_err and +zero_err options

PCLP-2598

False positive 1762 for call to non-const function in member expression

PCLP-2621

Don’t report issue 522/714/729/759/765 for static local symbols

PCLP-2624

Message 967 not always issued when expected

PCLP-2626

Message 1790 should consider indirect base classes

PCLP-2649

False positive 527 for jump statements within control structures within switch statement bodies

PCLP-2663

False positive 9103 involving function templates

PCLP-2668

Message 882 issued as a warning instead of informational

PCLP-2669

Presentation issues with messsages 682 and 882

PCLP-2670

Missing conditional return inference when returning ternary expression

PCLP-2703

Assertion failure or crash when certain headers are included with a precompiled header

PCLP-2704

Message 2454 doesn’t work as expected with -etype

PCLP-2726

Corrected handling of function parameters for clash detection

PCLP-2742

Don’t warn when calling fflush with null pointer

PCLP-2772

Hang or internal error triggered by nested use of -header, lint comments, -indirect, and -d

PCLP-2778

False positive precision-related messages involving shift by non-constant

PCLP-2786

Don’t issue 715 for functions with skipped bodies

PCLP-2793

Don’t complain about use of regparm attribute

PCLP-2795

Correct handling of ~operator in semantics specifications

PCLP-2806

False positive 1927 for classes containing anonymous unions

PCLP-2818

False positive 850 for rvalue reference to for index variable

PCLP-2844

Corrected imposter.c for old C compilers

PCLP-2869

Buffered output streams not flushed before redirection on Windows

PCLP-2894

Hang when instantiating member function of class template with dependent return value needed for deduction of auto return type in dependent caller in Microsoft compatibility mode

PCLP-2897

pclp_config now properly handles options specifying lowercase macros

PCLP-2900

False positive 734 (loss of precision) for excessive precision of cast result

PCLP-2921

The fff flag is now ON by default for Windows builds

PCLP-2925

Incorrect -append option in au-misra3.lnt

PCLP-2959

Message 1932 includes correct base class

PCLP-2986

False positive 9106 for imaginary literal suffixes

PCLP-2998

Improve parsing of constant expressions whose evaluation involves side effects

PCLP-3016

Move incompatible pointer type message from 2450 to 2449

PCLP-3021

Difference between base configurations for 32-bit and 64-bit versions of Visual Studio 2013 and 2015

Documentation Improvements

PCLP-2559

Correct description of -zero_err and +zero_err options

PCLP-2561

Document behavior of pattern consisting entirely of wild card characters

PCLP-2583

Document variants of message 686 for suspicious -i options

PCLP-2634

Updated description for 1564

PCLP-2641

Improve documentation for +fpe

PCLP-2804

Update MISRA support tables

PCLP-2811

Improve 701-704 message documentation

PCLP-2822

Messages 1526 and 1714 not issued for private members

PCLP-2825

New MISRA Support Summaries

PCLP-2860

Clarified meaning of global for messages 757 and 758.

PCLP-2864

Clarify message description for 579

PCLP-2883

Diagnose suspicious uses of late multi-threaded output redirection options

PCLP-2898

Update and distinguish descriptions of 1764 and 1746

PCLP-2899

Correct the citations for messages 901, 1731, and 1906.

PCLP-2905

Update descriptions of -save and -restore options

PCLP-2907

Extend suspicious -i warnings to –i

PCLP-2911

Document the fact that suppression options are not retained in PCH files.

PCLP-2916

Correct decidable classification for MISRA C 2012 Rule 11.2

PCLP-3003

Update description of message 1774

PCLP-3010

Version and beta status added to the manual

General Improvements

PCLP-744

Display current size options when printing help

PCLP-1344

Allow return and goto to replace break in switches for MISRA

PCLP-1351

Message 9106 now includes full MS integer literal suffix

PCLP-1944

Updates and clarifications to message 912

PCLP-1973

Improve handling of forward goto

PCLP-2005

Improvements to handling of list initialization for message 3701

PCLP-2107

Value Tracking for compound literals

PCLP-2215

Ignore framework directory suffix in clang search include path for pclp_config on macOS

PCLP-2250

Improve support for chained cleanup

PCLP-2270

Message 778 no longer issued inside of static assertions

PCLP-2415

Extend inferencing to variables within arithmetic expressions

PCLP-2418

Improved support for IAR compilers

PCLP-2461

Reduce false positives in Value Tracking related to implications of if statement conditions within called functions during loop iteration

PCLP-2462

Consider use of value through reference to different type

PCLP-2470

Report 445 (re-use of for index variable) for arbitrary levels of nesting

PCLP-2485

Add optional string parameter to message 9022

PCLP-2511

Improved handling of references to structures for message 1764

PCLP-2536

Improved Value Tracking for unions

PCLP-2568

pclp_config extracts values of Microsoft C/C++ compiler macros

PCLP-2586

Reduced false positives of "not used" messages involving variables read and written during loops

PCLP-2587

Improve calculation of unsigned addition of inferred values with indeterminate overflow

PCLP-2597

New variable/function/maro parameter for message 774

PCLP-2607

Refinements to template handling for message 2701

PCLP-2610

Messages 548 and 9013 no longer issued in function template instantiations

PCLP-2622

Messages 759 and 765 now issued for single modules

PCLP-2627

Message 9098 softened for casts

PCLP-2628

Enhancements to messages 907 and 908

PCLP-2631

Improved error message for unknown compiler name for pclp_config

PCLP-2632

Expand scope of messages 449 and 2434

PCLP-2635

Clarify text of message 9079

PCLP-2638

Harmonize text for variants of message 648

PCLP-2639

Fix missing "C++" text in message descriptions for -help and -dump_messages options.

PCLP-2658

Message 9233 strengthened for shifts by a known negative value

PCLP-2659

Message 981 is not issued for conversions to class type

PCLP-2664

Refinement to message 1762 for closure members

PCLP-2672

Issues message 305 when failing to open a file

PCLP-2697

Improved message text for -dump_messages and -dump_message_list

PCLP-2698

Support for the __has_unique_object_representations type trait intrinsic

PCLP-2729

Support _Float128 for GCC configurations generated with pclp_config.

PCLP-2773

Message 866 no longer issued for dependent expressions

PCLP-2784

Allow reuse of indirect files in different option environments

PCLP-2803

References to non-existent messages removed from MISRA author files

PCLP-2805

Added reference to MISRA C 2012 AMD-1 Directive 4.14 to au-misra3-amd1.lnt

PCLP-2809

Sort the ’could be const’ messages by source location

PCLP-2813

SGML terminating tags are now written when exiting from a fatal error

PCLP-2821

Warn about call through null function pointer

PCLP-2823

Messages 1931 and 9169 no longer issued for deleted constructors

PCLP-2833

Improved exception handling diagnostics

PCLP-2835

Add space in text of message 1705

PCLP-2839

False negative 1762 due to calling static member function without visible definition

PCLP-2846

Extend situations where message 464 is reported

PCLP-2848

Suppress 1746 for small trivially-copyable types

PCLP-2868

Warn about default constructors defaulted outside their class

PCLP-2875

Exempt friend declarations from message 1784

PCLP-2886

Improved analysis of ’new’ expressions for 1556 and 1764

PCLP-2889

Improved ’pclp_config’ support for older versions of Visual Studio

PCLP-2896

Version check in MISRA configuration files

PCLP-2906

Diagnostic when -restore is used without -save

PCLP-2927

Extend implicit assignment context messages to in-class non-static data member initializers

PCLP-2928

Support -isystem for GCC and clang compilers.

PCLP-2937

Multiple improvements for handling of warning levels.

PCLP-2940

Ignore single redundant unreachable break at end of switch case for message 527 by default

PCLP-2942

Message 9168 no longer reported for declarations with incomplete types

PCLP-2960

Message 1932 no longer issued for forward declarations or template instantiations

PCLP-2962

Reduced memory usage

PCLP-2977

Multiple improvements for message 1915

PCLP-2984

Improved performance and reduced memory usage when using many -append and -deprecate options or MISRA configuration files

PCLP-2989

Improved performance

PCLP-3002

Update default C++ standard from C++14 (-std=c++14) to C++17 (-std=c++17)

PCLP-3014

Issue 1774 for comparison via equality operators

PCLP-3042

Improvements to +fsf flag and semantic monikers for constructors and destructors of class templates

MISRA C 2012 Improvements

PCLP-2060

Support MISRA C 2012 AMD-1 Rule 21.18

PCLP-2537

Treat members of different tagless structures as appearing in separate name spaces for 9046

PCLP-2777

Message 931 removed from MISRA C 2012 rule 13.2

PCLP-2791

Improved support for MISRA C 2012 Rules 17.1, 21.4, 21.5, and 21.10

PCLP-2797

Support MISRA C 2012 Rules 22.4 and 22.6

PCLP-2807

Message 774 added to MISRA C 2012 rule 2.2

PCLP-2914

Improved support for MISRA C 2012 Rule 11.1

PCLP-2915

Improved support for MISRA C 2012 Rule 22.1

PCLP-2918

Improved support for MISRA C 2012 Rule 14.4

PCLP-2919

Improved support for MISRA C 2012 Rule 15.7

PCLP-2920

Consider Boolean strong type hierarchy beyond the Boolean strong type itself for Boolean essential type classification

PCLP-2926

Improved handling of Boolean MISRA C 2012 essential type for false and true macros

MISRA C++ Improvements

PCLP-2700

Message 9114 (MISRA C++ 5-0-3) now reports violations of the rule even when only the underlying type is converted and the actual type is not

PCLP-2705

Improved support for MISRA C++ Rule 7-1-1

PCLP-2741

Improved support for MISRA C++ Rule 5-2-4

PCLP-2774

Correct false positive 1536 messages

PCLP-2798

Improved support for compound assignment operators for rules 5-0-3 and 5-0-6

PCLP-2832

Improved support for MISRA C++ Rule 3-9-3

PCLP-2877

Support digit-related exceptions for character arithmetic

PCLP-2880

Ignore all extern "C" declarations for message 9141 (7-3-1)

PCLP-2881

New interpretation option to restrict definition of constant expression for the purposes of underlying type determination

PCLP-2892

Only report casts in one direction for MISRA C++ 2008 rule 5-2-8

PCLP-2908

Improved support for MISRA C++ Rule 7-1-2

PCLP-2939

Improved support for MISRA C++ 2008 Rule 4-10-2

PCLP-2943

Improved support for MISRA C++ Rule 2-13-2

New Features

PCLP-2022

Add +ffi to format large integer values and ranges relative to nearby integer limits

PCLP-2173

Introductory support for CERT C

PCLP-2193

Track values of objects of pointer-to-member type in Value Tracking

PCLP-2247

Add +fcv to exempt parameters whose only reference was a cast to void from messages indicating that they could be made const

PCLP-2333

Add options to accommodate relative paths in the imposter utility

PCLP-2477

Support for 0.NaN and 0.Infinity

PCLP-2483

New message 2666 - expression with side effects passed to unexpanded parameter of macro

PCLP-2484

New message 9501 - preprocessing directive in call to function

PCLP-2488

New message 973 - unary operator in macro not parenthesized

PCLP-2503

New message 823 - definition of macro ends in semi-colon

PCLP-2562

New message 9040 - possible struct hack declaration for member

PCLP-2571

New message 9502 - multi-statement macro is not enclosed in monocarpic do-while loop

PCLP-2577

New message 3419 - in-class initializer for static data member of floating type is a GNU extension

PCLP-2625

Support for BARR-C:2018 (previously Netrino) coding guidelines

PCLP-2699

New semantics and messages for signals

PCLP-2713

New random number generator and seed function messages with new noliteral argument semantic

PCLP-2739

Built-in function semantics for dangerous Microsoft Windows API IsBadPtr functions

PCLP-2789

New non_custodial semantic

PCLP-2830

New +fup and +fuu flags to clear values after reporting them as null or uninitialized

PCLP-2836

New message 695 - inline function declared without storage-class specifier

PCLP-2888

Visual Studio 2019 support for pclp_config

PCLP-2910

New message 1423 - reinterpret_cast has undefined behavior

PCLP-2929

New AUTOSAR C++ configuration file

PCLP-2948

New message 1756 - variable has static/thread storage duration and non-POD type

PCLP-2949

New message 9215 and added parameter to message 715

PCLP-2950

New message 9414 - ’typeid’ used on expression with side effect

PCLP-2951

New message 9181 - switch contains fewer than two non-default switch cases

PCLP-2952

New message 2618 - non-type specifier appears after a type

PCLP-2954

New message 9418 - enum does not have an explicitly specified underlying type

PCLP-2955

New message 9419 - enum is not a scoped enumeration

PCLP-2956

New message 9415 - ’auto’ variable initialized using list initialization

PCLP-2957

New message 9420 - bitfield does not have unsigned integer or explicitly unsigned enumeration type

PCLP-2958

New message 9432 - class inherits from multiple non-abstract classes

PCLP-2963

Support deprecation of preprocessor directives

PCLP-2966

New message 9422 - virtual function should specify exactly one of ’virtual’, ’override’, or ’final’

PCLP-2967

New message 9421 - virtual function overrides function and is not marked with ’override’ or ’final’

PCLP-2968

New message 1779 - virtual function introduced in class which is marked as ’final’

PCLP-2970

New message 9437 - non-POD class defined with ’struct’ keyword

PCLP-2971

New message 9435 - symbol declared as friend

PCLP-2974

New messages to diagnose literal operators and their use

PCLP-2976

New message 9436 - symbol declared with array type in C++ module

PCLP-2983

New message 2414

PCLP-3015

Visual Studio configuration GUI for pclp_config

PCLP-3017

pclp_config support for Microchip MPLAB X

PCLP-3018

pclp_config support for Keil μVision ARMCC

PCLP-3019

New %ENCLOSING_DIRECTORY% built-in environment variable

PCLP-3044

New CERT C configuration file

23.9 Version 1.2

23.9.1 Summary

Bugs Fixed

PCLP-1904

False positive 9007

PCLP-1957

False positive 915/917 for enumeration constants in C mode

PCLP-1997

False positive 9168 for static array member defined outside of class

PCLP-2026

Non-library regions incorrectly treated as library

PCLP-2099

Constrain ranges of inferenced values in Value Tracking messages

PCLP-2120

Support the ’l’ strong type flag

PCLP-2158

False positive 1539 for template

PCLP-2183

Improved recognition of conditional variable modification for Value Tracking

PCLP-2190

Respect softeners for pointer differences when assigning or joining strong types

PCLP-2192

Result of bitwise OR not always calculated correctly

PCLP-2196

False positive 5731 for __thread in template

PCLP-2219

Improvements to handling of list initialization

PCLP-2226

False positive 527 for conditional break in switch case

PCLP-2229

False positive 438 for variable used in implicit construction of std::initializer_list

PCLP-2238

False positive 733 when assigning to pointer parameter in specific walk

PCLP-2241

False positive 9042 and 9082 for switch statements with leading default case

PCLP-2246

Message 967 not suppressed for -header files using library suppressions

PCLP-2249

Errors issued for uninstantiated templates

PCLP-2258

False positive 958 for structure with union members

PCLP-2261

False negative 737 for equality/relational tests

PCLP-2262

False positive 9090 when throwing a temporary object

PCLP-2268

False positive 587 for expressions with bitwise operations on types with different size or signedness

PCLP-2271

False positive 2434 for specific circumstances involving delete and return

PCLP-2278

Change 1997 to 1998 in set of permitted C++ years for -std

PCLP-2279

False positive 1529 for potentially unresolved overloaded operator&

PCLP-2289

Message 491 incorrectly issued for invalid name in macro definition

PCLP-2315

Crash when using -h2 with empty caret indicator

PCLP-2366

Improved recognition of side effects from std::initializer_list initialization

PCLP-2400

Message 611 no longer issued for implicit conversions

PCLP-2417

Only emit "Resuming file" verbosity messages with -v<integer>

PCLP-2431

Correct handling of -efunc and +efunc options

PCLP-2445

False positive 641 for parenthesized enumeration constant in C mode

PCLP-2447

False positive 743 (negative character constant) in template instantiation

MISRA C 2012 Improvements

PCLP-1059

Support for MISRA C 2012 Rule 20.12

PCLP-1061

Support for MISRA C 2012 Rule 9.2

PCLP-1066

Support for MISRA C 2012 Rule 17.5

PCLP-2176

Improved support for MISRA C 2012 Rule 11.7

PCLP-2443

Improved support for MISRA C 2012 Rule 11.9

PCLP-2455

Support for MISRA C 2012 Rule 5.1

PCLP-2456

Support for MISRA C 2012 Rule 5.2

PCLP-2457

Support for MISRA C 2012 Rule 5.4

MISRA C++ Improvements

PCLP-545

Added support for MISRA C++ Rule 15-3-6

PCLP-1953

Implement MISRA’s amended wording for balancing binary operators in MISRA C++

PCLP-2263

Improved support for MISRA C++ Rule 6-4-3

PCLP-2266

Improved support for MISRA C++ Rule 6-4-6

PCLP-2454

Void pointers no longer reported for Rule 5-2-7

General Improvements

PCLP-41

Support for 16-bit and 32-bit bytes

PCLP-1659

Extended exemptions for message 785

PCLP-1761

Consider base class fields for message 1401

PCLP-1875

Error 4374 suppressed for Visual Studio configurations

PCLP-1885

Tracking of multiple initialization variables in a for statement

PCLP-1887

Message 571 no longer issued for enumeration types

PCLP-1895

Soften 1938 for static-local and const-initialized variables

PCLP-1948

Better recognition of lint comments

PCLP-2119

Extend the strong type ’z’ softener to casts of null pointer constants

PCLP-2133

Honor the value of the fcc flag option for summary output

PCLP-2147

Improved Value Tracking inferencing for booleans

PCLP-2160

-fiz no longer affects initialization of booleans

PCLP-2180

Issue 716 and not 774 for while (1) and while (true)

PCLP-2181

Only issue 1768 once per function

PCLP-2182

Extend value tracking depth for constexpr functions

PCLP-2189

Improved diagnostics for misuse of -a and -s options

PCLP-2218

Suppress message 948 for if constexpr conditions

PCLP-2233

Don’t issue 587, 685, or 837 in instantiations

PCLP-2237

New warnings for improper use of -i

PCLP-2252

Support -d/-u options within files included via -indirect and improve behavior of combining -env_push/-env_pop, -env_save/-env_restore, and -d/-u options

PCLP-2253

Supplemental messages for compiler errors

PCLP-2254

Improved diagnostics for misuse of -strong boolean options

PCLP-2260

Unhelpful 746 when calling built-in atomic intrinsics in dependent contexts

PCLP-2265

Only issue message 9139 once per switch

PCLP-2273

Documentation improvements for VS2017 pclp_config configuration

PCLP-2302

Added symbol parameter to 9018

PCLP-2304

Consider tags used in __builtin_offsetof to be referenced

PCLP-2307

Support testing for non-null before deleting pointer

PCLP-2311

Improved validation of the +group option

PCLP-2312

Improved location information for message 9049

PCLP-2328

Improved error handling for pclp_config

PCLP-2339

Add operator argument to message 514

PCLP-2346

Message 857 softened for casts

PCLP-2388

Recognize std::addressof for 1529

PCLP-2398

Suppressing 893 with -estring

PCLP-2401

Suppress message 1506 in final classes

PCLP-2412

Improved value tracking inferencing

PCLP-2413

Name shadowing involving enumeration constants now reported by 578

PCLP-2416

Increased scope of message 445

PCLP-2420

False positive 9107 for member function template instantiated in a module

PCLP-2438

Message 1773 now issued for references

PCLP-2446

Issue 9045 messages in a deterministic order

PCLP-2469

Message 750 no longer reported when used in short-circuited defined operator

PCLP-2478

Support for response files introduced by compiler-specific option

New Features

PCLP-1052

Added -idlen and message 621

PCLP-1128

New Precision and Pre-determined Predicate Implementations

PCLP-1853

Message 1757 added

PCLP-1994

New -misra_interpret option to apply alternative interpretations to MISRA Rules

PCLP-2177

New fcw flag option to control whether 438 considers writes from called functions

PCLP-2239

New diagnostic for tentative array definition without a size in C mode

PCLP-2267

Improved C++17 Support

PCLP-2275

New fgl flag option to control the use of GNU line markers in preprocessed output

PCLP-2280

New fmt flag option to enable matching of template template-arguments to compatible templates

PCLP-2283

New fmx flag allows disabling of C++ member access control

PCLP-2284

New fzd flag to enable C++14 sized deallocation

PCLP-2357

New -format_category option to configure category representation

PCLP-2387

Add \e escape sequence for inserting ASCII escape into format strings

PCLP-2428

New message 2662 reports out of bounds pointer from scalar pointer

PCLP-2508

New message 2650 reports when a constant is out of range for part of a compound comparison operator

Documentation Enhancements

PCLP-2272

Update entry for messages 413 and 613 to include symbol

PCLP-2282

Better explain how lint comments in macro definitions are handled

PCLP-2301

Add section about using backslash escapes in options

PCLP-2396

Add version information to option and flag option tables

PCLP-2429

Add section documenting minimum and recommended OS/hardware requirements

PCLP-2430

Add section describing how message suppression options are applied

PCLP-2439

Correct notes about +emacro, +elibmacro, and +elibsym

PCLP-2444

Add note about new -efile behavior to "What’s new" section

23.10 Version 1.1

23.10.1 Summary

Bugs Fixed

PCLP-1454

Improved handling of goto for read/write analysis

PCLP-1483

Single line suppressions not always honored when location is macro name

PCLP-1512

Improved handling of -emacro

PCLP-1711

Don’t create null inferences when comparing to the this pointer

PCLP-1826

False positive 9107 for member instantiations

PCLP-1841

Message 923 not issued for reinterpret_cast

PCLP-1894

False positive 641 for parenthesized enumeration constant in C mode

PCLP-1908

False positive 838 for multiple early returns

PCLP-1919

Improved recognition of volatile assignment as an impurity

PCLP-1909

False positive 705 for %jd conversion specifier with intmax_t defined as long long

PCLP-1910

Statements without side effects not diagnosed in specific circumstances

PCLP-1914

Message 826 no longer issued for dynamic_cast

PCLP-1920

Improved custodial semantics for reference parameters

PCLP-1921

Custodial semantic not properly applied for operator call expressions

PCLP-1942

False positive 568/775 for reference member variables

PCLP-1943

False positive 568 for reference types

PCLP-1945

Message 916 now only reports pointer-to-pointer conversions

PCLP-1955

Improperly suppressed messages from library headers

PCLP-1960

Messages 900 and 870 not issued when using 2 passes

PCLP-1974

Support for bidirectional pre-loop inference test direction

PCLP-1993

False positive 1924 for substituted non-type template parameters of enumeration type

PCLP-1995

Reset position indicator character when using -h2

PCLP-2001

Improved handling of pointer parameters for message 733

PCLP-2013

Message 2702 now issued regardless of suppression state of 528

PCLP-2014

False positive 449

PCLP-2015

False positive 9048 for use of enum constant non-type template parameter

PCLP-2029

Improved handling of angle brackets in message 773

PCLP-2068

Extraneous supplemental message

PCLP-2069

Don’t analyze assembly statements

PCLP-2073

Crash when using allocation semantics in user-defined function semantics

PCLP-2077

Incorrect null inference for equality check against non-null pointer

PCLP-2078

Consistent diagnosis of null pointers for array indexing and pointer arithmetic

PCLP-2101

False positive 9176 for implicit conversion of this pointer to base class pointer

PCLP-2102

False Positive 743 for wide character constants

PCLP-2105

False positive 527 after switch containing conditional return

PCLP-2106

Improved Value Tracking of structures in C

PCLP-2108

False positive 1751 for macro defined in header that expands to anonymous namespace in main source file

PCLP-2125

Remove message 504 from MISRA author files

PCLP-2127

False negative 1506

PCLP-2128

Add POD semantics to Standard C library functions

PCLP-2140

False positive 1415 for pointers to void

PCLP-2151

False positive type alias differences for function template specializations

PCLP-2153

Internal error for improper user-defined function return allocation semantics

PCLP-2155

False positive 9034 involving compound assignment

PCLP-2156

Message 9003 no longer issued for local static variables

PCLP-2157

False positive 909 and 910 for certain casts

PCLP-2159

False positive 1727 for member function of class template specializations

PCLP-2163

Strong type of enumerator not recognized when typedef uses incomplete type

PCLP-2169

False positive 758 for implicit instantiations

PCLP-2179

Internal error related to message 9027 when issued in C++ code

PCLP-2191

Structure member initialization status not properly merged after being initialized in both branches of an if statement in C mode

PCLP-2203

Improved Value Tracking of unknown function parameters of structure type

PCLP-2208

Message 1415 issued for type-dependent arguments

MISRA C 2004 Improvements

PCLP-1874

Improved support for MISRA C 2004 Rule 13.1

PCLP-1882

Improved support for MISRA C 2004 Rules 11.1 and 11.2

PCLP-1929

Improved handling of MISRA C 2004 Rule 10.1

PCLP-2009

Improved support for MISRA C 2004 Rule 10.1

PCLP-2018

Improved support for MISRA C 2004 Rules 6.1 and 6.2

PCLP-2037

Improved support for MISRA C 2004 Rules 6.1/6.2 and MISRA C++ Rule 5-0-11

MISRA C 2012 Improvements

PCLP-1037

Improved support for MISRA C 2012 Rule 20.8

PCLP-1528

Update messages used for Rule 11.7 in au-misra3.lnt

PCLP-1776

Improved support for MISRA C 2012 Rule 10.3

PCLP-1778

Improved support for MISRA C 2012 Rule 11.4

PCLP-1779

Improved support for MISRA C 2012 Rule 11.4

PCLP-1780

Improved support for MISRA C 2012 Rule 11.4

PCLP-1781

Improved support for MISRA C 2012 Rule 11.5

PCLP-1879

Improved support for MISRA C 2012 Rule 10.1

PCLP-1880

Improved support for MISRA C 2012 Rule 10.1

PCLP-1881

Improved support for MISRA C 2012 Rule 10.2

PCLP-1898

Improved support for MISRA C 2012 Rule 10.7

PCLP-2017

Do not classify wide character constants as having essentially character type in MISRA C 2012

PCLP-2030

Improved support for MISRA C 2012 Rule 18.8

PCLP-2198

Incorrect MISRA essential type calculation for modulo operations

PCLP-2220

Improved support for MISRA C 2012 Rule 11.5

MISRA C++ Improvements

PCLP-1952

Improved support for MISRA C++ Rule 5-3-4

PCLP-1989

Improved support for MISRA C++ Rule 3-1-1

PCLP-2031

Corrections to au-misra-cpp.lnt for MISRA C++ Rules 17-0-1 and 17-0-2

PCLP-2117

Improved support for MISRA C++ Rule 7-3-6

PCLP-2150

False positive 9113 for compound assignment

PCLP-2170

Increased scope of "related types" for message 9176

General Improvements

PCLP-1768

Improved handling when all paths return in if statement

PCLP-1790

Improved handling of placement new for read-write analysis

PCLP-1795

Improved handling of mutable members in side effects determination

PCLP-1799

Improved handling of user-defined return value semantics

PCLP-1800

Improved handling of enumeration constants of strongly typed enums

PCLP-1813

The +efreeze option now always prevents single-line suppressions

PCLP-1899

Don’t issue 1564 when integer literal is converted/cast

PCLP-1911

Assume side-effect when passing pointer offset to non-const pointer parameter

PCLP-1932

Prototype information now included in message 1411

PCLP-1934

"Could be const" messages softened for typedefs from macros

PCLP-1951

Assume modification of initialized arguments when using -fai

PCLP-1956

Clarified message text for message 956

PCLP-1965

Add symbol information to message 9103

PCLP-1967

Issue message 564 for volatile reads

PCLP-1969

Improved handling of deallocation tracking in if statements

PCLP-1970

False positive 773 for named casts

PCLP-1971

Exempting logical not from message 1564

PCLP-1976

Improved performance for next-statement suppressions

PCLP-1980

1938 no long issued for constexpr variable

PCLP-1985

Improved handling of structures initialized by functions with using fai

PCLP-1987

Improved output format for enum essential types in essential type messages

PCLP-1992

False positive 522 in __asm statement

PCLP-2002

Message 785 softened for aggregate initialization with extra braces

PCLP-2006

Recognition of aggregate initialization evaluation order in C++11

PCLP-2024

Support flexible array members in base classes

PCLP-2039

Clarifications to text of message 9128

PCLP-2050

Improved pclp_config support for macro definition that contain spaces and quotes in Visual Studio configurations

PCLP-2074

Improved Value Tracking handling of while statement condition variable declarations

PCLP-2075

Improve application of dynamic allocation semantics

PCLP-2081

Message 1793 no longer issued for functions with an rvalue reference qualifier

PCLP-2088

Improved handling of premature termination due to stack overflow

PCLP-2098

Improved Value Tracking for unconditional assignment in both branches of an if statement

PCLP-2152

Improved handling of friends and templates for 9004

PCLP-2161

Improved handling of misspelled parameterized suppression options

PCLP-2164

Add symbol parameter to null pointer dereference messages when available

PCLP-2166

Message 904 issued multiple times for repeated declarations

PCLP-2178

Suppress message 1788 for variables marked as unused

PCLP-2185

Improved error handling for invalid size and alignment options

PCLP-2195

Improved handling of possibly null information in user-defined return semantics

PCLP-2200

Improved handling of buffers used with placement new

PCLP-2205

Improved support for C++17 constexpr if

PCLP-2214

Added env-html.lnt, env-html.js, and env-xml.lnt files

New Features

PCLP-1531

Support for IAR compilers and IAR Workbench

PCLP-1889

New message 3450 - subtracting member from ’this’ pointer

PCLP-2051

New fbe flag option and backslash escapes

PCLP-2054

Added support for MISRA C 2012 AMD-1 Rule 12.5

PCLP-2055

Added support for MISRA C 2012 AMD-1 Rule 21.13

PCLP-2057

Added support MISRA C 2012 AMD-1 Rule 21.15

PCLP-2058

Added new message (9098) to support MISRA C 2012 AMD-1 Rule 21.16

PCLP-2059

Add partial support for MISRA C 2012 AMD-1 Rule 21.17

PCLP-2083

Allow the C++17 fallthrough attribute to suppress messages 616 and 825

PCLP-2132

The -help option now responds to message numbers

PCLP-2201

New exit command added to Value Tracking debugger

Documentation Enhancements

PCLP-1926

Add "Flow of Execution" section (1.2) to Reference Manual

PCLP-1949

Fix runaway text in Reference Manaual

PCLP-1966

Update description of message 9049

PCLP-2008

Reference the flf flag in the Value Tracking section of the Reference Manual

PCLP-2012

Improvements to descriptions of select error messages

PCLP-2016

fwc flag removed from manual

PCLP-2049

Miscellaneous documentation corrections

PCLP-2172

Clarify that -egrep doesn’t match text injected via +typename

PCLP-2210

Update description of message 916 to remove MISRA C++ support statement