Reference Manual
for
PC-lint
®
Plus
™
A diagnostic facility for C and C++
Gimpel Software LLC
Version 1.3.5
May 2020
Gimpel Software LLC
3207 Hogarth Lane
Collegeville, PA 19426
United States of America
(610) 584-4261
https://www.gimpel.com
Copyright © 1985–2020 Gimpel Software LLC
All Rights Reserved
No part of this publication may be reproduced, transmitted, transcribed, stored in any retrieval system, or
translated into any language by any means without the express written permission of Gimpel Software LLC.
Digital distributions of this publication duly licensed and authorized by Gimpel Software LLC carry implied
permission for a standard computer system to perform operations necessary to store and display it (including
alternative forms of presentation such as text-to-speech software used for accessibility reasons).
Disclaimer
Gimpel Software LLC has taken due care in preparing this manual and the programs and data (if any)
accompanying it including research, development and testing to ascertain their effectiveness.
Gimpel Software LLC makes no warranties, express or implied, as to the contents of this manual, which is
provided as is, and specifically DISCLAIMS ANY IMPLIED
WARRANTIES
OF
MERCHANTABILITY
OR
FITNESS
FOR ANY PARTICULAR PURPOSE. Gimpel Software LLC further reserves the right to
make changes to the specifications of the program and contents of the manual without obligation to notify
any person or organization of such changes.
Trademarks
PC-lint
®
is a registered trademark of Gimpel Software LLC. PC-lint Plus
™
and the GS logo are trademarks
of Gimpel Software LLC. CERT
®
is a registered trademark of Carnegie Mellon University. MISRA
®
is a
registered trademark of HORIBA MIRA Ltd, held on behalf of the MISRA Consortium. AUTOSAR
®
is
a registered trademark of AUTOSAR GbR. All other products and brand names used in this manual are
registered trademarks or tradenames of their respective holders.
Open Source Declarations
See chapter 20 for declarations in compliance with the licenses of Open Source Software incorporated into
PC-lint Plus. These declarations may include WARRANTY DISCLAIMERS.
Acknowledgements
See chapter 21 for acknowledgements in compliance with the license for other third-party material. These
acknowledgements may include WARRANTY DISCLAIMERS.
CONTENTS CONTENTS
Contents
Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Flow of Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 An Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Installation and Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1 System Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1 Supported Operating Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 Supported File Encodings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.3 Hardware Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.1 Setting the PATH environment variable on Windows . . . . . . . . . . . . . . . . . . 4
2.2.2 Setting the PATH environment variable on Linux . . . . . . . . . . . . . . . . . . . . 5
2.2.3 Setting the PATH environment variable on macOS . . . . . . . . . . . . . . . . . . . 5
2.3 Configuring with pclp_config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3.2 Introduction and Walkthrough of Automated Configuration with pclp_config . . . . 5
2.3.3 Creating a compiler configuration for GCC or Clang . . . . . . . . . . . . . . . . . . 9
2.3.4 Creating a compiler configuration for Microsoft C/C++ compilers . . . . . . . . . . . 10
2.3.5 Creating a compiler configuration for IAR Embedded compilers . . . . . . . . . . . . 11
2.3.6 Creating a compiler configuration for Keil µVision ARMCC . . . . . . . . . . . . . . 13
2.3.7 Creating a compiler configuration for Microchip MPLAB X XC8/XC16/XC32 . . . 13
2.3.8
Creating a compiler configuration for MetaWare
ccac
ARC V2 EM/V2 HS/V3 HS/etc.
14
2.3.9 Creating a project configuration with make or cmake . . . . . . . . . . . . . . . . . . 15
2.3.10 Creating a project configuration with MSBuild on Windows . . . . . . . . . . . . . . 16
2.3.11 Integrating PC-lint Plus with IAR Embedded Workbench . . . . . . . . . . . . . . . 16
2.3.12 Integrating PC-lint Plus with Keil µVision . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.13 Integrating PC-lint Plus with MPLAB X . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.14 Integrating PC-lint Plus with Eclipse-based IDEs . . . . . . . . . . . . . . . . . . . . 19
2.3.15
Using the
pclpvscfg.exe
GUI utility to generate a compiler and project configuration
for Microsoft Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.16 pclp_config Options Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3.17 imposter Options Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3.18 Installing pclp_config prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.19 Installing python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.20 Installing required modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4 Configuring manually . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3 The Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1 Indirect (.lnt) files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 Exit Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3 Built-in version environment variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4 Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1 Rules for Specifying Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1.1 Options within Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.1.2 Lint Comments inside of Macro Definitions . . . . . . . . . . . . . . . . . . . . . . . 33
4.1.3 Options on the Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.4 Specifying Option Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.5 Quoted Options and Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.6 Quotes in Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.7 Braces within Argument Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.8 Braces and Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.9 Brace Types in Brace-Enclosed Argument Lists . . . . . . . . . . . . . . . . . . . . . 36
i
CONTENTS CONTENTS
4.1.10 Option Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1.11 Expansion of Environment Variables in Options . . . . . . . . . . . . . . . . . . . . 36
4.1.12 Escaping Special Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Option Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3 Message Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3.1 Error Inhibition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3.2 Verbosity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3.3 Message Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.4 Processing Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.4.1 Compiler Adaptation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.4.2 Preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.4.3 Tokenizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.4.4 Parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.4.5 Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.5 Data Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.5.1 Scalar Data Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.5.2 Scalar Data Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.6 Miscellaneous Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.6.1 File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.6.2 Global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
4.6.3 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.7 Special Detection Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.7.1 Strong Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.7.2 Miscellaneous Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.7.3 Semantic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.7.4 Value Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.8 Meta Characters for Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.9 How Suppression Options are Applied . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.10 Rules for Parameterized Suppressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.11 Flag Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.12 Compiler Adaptation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4.12.1 Customization Facilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4.12.2 Identifier Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4.12.3 Preprocessor Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4.12.4 In-line assembly code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
4.12.5 Pragmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.12.6 Built-in pragmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.12.7 User pragmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
5 Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.1 Library Header Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.2 Library Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
5.3 Assembly Language Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
6 Precompiled Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.1 Introduction to precompiled headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.2 Designating the precompiled header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6.3 Monitoring precompiled headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6.4 The use of make files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6.5 Lint comment options and precompiled headers . . . . . . . . . . . . . . . . . . . . . . . . . 132
7 Strong Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.1 Rationale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.2 Creating Strong Types with -strong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.3 Strong Types for Array Indices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
7.4 Dimensional Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
7.4.1 Dimensional Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
ii
CONTENTS CONTENTS
7.4.2 Dimensionally Neutral Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.4.3 Antidimensional Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.4.4 Multiplication and Division of Dimensional Types . . . . . . . . . . . . . . . . . . . 138
7.4.5 Dimensional Types and the % operator . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.4.6 Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.4.7 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
7.5 Strong Type Hierarchies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
7.5.1 The Need for a Type Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
7.5.2 The Natural Type Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
7.5.3 Adding to the Natural Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
7.5.4 Restricting Down Assignments (-father) . . . . . . . . . . . . . . . . . . . . . . . . . 144
7.6 Printing the Hierarchy Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.7 Reference Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.7.1 Full Source for the Gravitation Example . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.7.2 The Strong Type of an Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
7.7.3 Canonical Form for Dimensional Strong Types . . . . . . . . . . . . . . . . . . . . . 146
7.7.4 Message Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
8 Value Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
8.1.1 Anatomy of a Value Tracking Message . . . . . . . . . . . . . . . . . . . . . . . . . . 147
8.2 Value Inferencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.2.1 Conditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.2.2 Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.3 Integer Range Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.4 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.5 Value Display Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.5.1 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.5.2 Pointers in General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.5.3 Pointers to a Single Datum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.5.4 Pointers to Buffers with Multiple Elements . . . . . . . . . . . . . . . . . . . . . . . 149
8.5.5 Objects of Structure or Class Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.5.6 File Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8.5.7 Uninitialized Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8.6 General Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8.7 Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8.8 Interfunction and Intermodule Value Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . 151
8.9 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.9.1 Initial Values of Static Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.9.2 The Correlated Variables Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.9.3 Terminal Depth Assistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.10 Changes from Older Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
9 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.1 Function Mimicry (-function) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.1.1 Special Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.1.2 Function Listing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
9.1.3 Other names with special behavior that cannot be mimicked . . . . . . . . . . . . . 162
9.2 Semantic Specifications (-sem) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
9.2.1 Possible Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
9.2.2 Semantic Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
9.2.2.1 Return Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
9.2.2.2 Return Semantic Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
9.2.2.3 Function-wide semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
9.2.2.4 Overload-Specific Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
9.2.3 Notes on Semantic Specifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
iii