mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-26 09:49:48 +00:00
dd5571d51a
Differential Revision: https://reviews.llvm.org/D77458
826 lines
49 KiB
ReStructuredText
826 lines
49 KiB
ReStructuredText
.. index:: pp-trace
|
|
|
|
==================================
|
|
pp-trace User's Manual
|
|
==================================
|
|
|
|
.. toctree::
|
|
:hidden:
|
|
|
|
:program:`pp-trace` is a standalone tool that traces preprocessor
|
|
activity. It's also used as a test of Clang's PPCallbacks interface.
|
|
It runs a given source file through the Clang preprocessor, displaying
|
|
selected information from callback functions overridden in a
|
|
`PPCallbacks <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html>`_
|
|
derivation. The output is in a high-level YAML format, described in
|
|
:ref:`OutputFormat`.
|
|
|
|
.. _Usage:
|
|
|
|
pp-trace Usage
|
|
==============
|
|
|
|
Command Line Format
|
|
-------------------
|
|
|
|
``pp-trace [<pp-trace-options>] <source-file> [-- <front-end-options>]``
|
|
|
|
``<pp-trace-options>`` is a place-holder for options
|
|
specific to pp-trace, which are described below in
|
|
:ref:`CommandLineOptions`.
|
|
|
|
``<source-file>`` specifies the source file to run through the preprocessor.
|
|
|
|
``<front-end-options>`` is a place-holder for regular
|
|
`Clang Compiler Options <https://clang.llvm.org/docs/UsersManual.html#command-line-options>`_,
|
|
which must follow the <source-file>.
|
|
|
|
.. _CommandLineOptions:
|
|
|
|
Command Line Options
|
|
--------------------
|
|
|
|
.. option:: -callbacks <comma-separated-globs>
|
|
|
|
This option specifies a comma-separated list of globs describing the list of
|
|
callbacks that should be traced. Globs are processed in order of appearance.
|
|
Positive globs add matched callbacks to the set, netative globs (those with
|
|
the '-' prefix) remove callacks from the set.
|
|
|
|
* FileChanged
|
|
* FileSkipped
|
|
* FileNotFound
|
|
* InclusionDirective
|
|
* moduleImport
|
|
* EndOfMainFile
|
|
* Ident
|
|
* PragmaDirective
|
|
* PragmaComment
|
|
* PragmaDetectMismatch
|
|
* PragmaDebug
|
|
* PragmaMessage
|
|
* PragmaDiagnosticPush
|
|
* PragmaDiagnosticPop
|
|
* PragmaDiagnostic
|
|
* PragmaOpenCLExtension
|
|
* PragmaWarning
|
|
* PragmaWarningPush
|
|
* PragmaWarningPop
|
|
* MacroExpands
|
|
* MacroDefined
|
|
* MacroUndefined
|
|
* Defined
|
|
* SourceRangeSkipped
|
|
* If
|
|
* Elif
|
|
* Ifdef
|
|
* Ifndef
|
|
* Else
|
|
* Endif
|
|
|
|
.. option:: -output <output-file>
|
|
|
|
By default, pp-trace outputs the trace information to stdout. Use this
|
|
option to output the trace information to a file.
|
|
|
|
.. _OutputFormat:
|
|
|
|
pp-trace Output Format
|
|
======================
|
|
|
|
The pp-trace output is formatted as YAML. See https://yaml.org/ for general
|
|
YAML information. It's arranged as a sequence of information about the
|
|
callback call, including the callback name and argument information, for
|
|
example:::
|
|
|
|
---
|
|
- Callback: Name
|
|
Argument1: Value1
|
|
Argument2: Value2
|
|
(etc.)
|
|
...
|
|
|
|
With real data:::
|
|
|
|
---
|
|
- Callback: FileChanged
|
|
Loc: "c:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-include.cpp:1:1"
|
|
Reason: EnterFile
|
|
FileType: C_User
|
|
PrevFID: (invalid)
|
|
(etc.)
|
|
- Callback: FileChanged
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-include.cpp:5:1"
|
|
Reason: ExitFile
|
|
FileType: C_User
|
|
PrevFID: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/Input/Level1B.h"
|
|
- Callback: EndOfMainFile
|
|
...
|
|
|
|
In all but one case (MacroDirective) the "Argument" scalars have the same
|
|
name as the argument in the corresponding PPCallbacks callback function.
|
|
|
|
Callback Details
|
|
----------------
|
|
|
|
The following sections describe the purpose and output format for each callback.
|
|
|
|
Click on the callback name in the section heading to see the Doxygen
|
|
documentation for the callback.
|
|
|
|
The argument descriptions table describes the callback argument information
|
|
displayed.
|
|
|
|
The Argument Name field in most (but not all) cases is the same name as the
|
|
callback function parameter.
|
|
|
|
The Argument Value Syntax field describes the values that will be displayed
|
|
for the argument value. It uses an ad hoc representation that mixes literal
|
|
and symbolic representations. Enumeration member symbols are shown as the
|
|
actual enum member in a (member1|member2|...) form. A name in parentheses
|
|
can either represent a place holder for the described value, or confusingly,
|
|
it might be a literal, such as (null), for a null pointer.
|
|
Locations are shown as quoted only to avoid confusing the documentation generator.
|
|
|
|
The Clang C++ Type field is the type from the callback function declaration.
|
|
|
|
The description describes the argument or what is displayed for it.
|
|
|
|
Note that in some cases, such as when a structure pointer is an argument
|
|
value, only some key member or members are shown to represent the value,
|
|
instead of trying to display all members of the structure.
|
|
|
|
`FileChanged <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a7cc8cfaf34114fc65e92af621cd6464e>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
FileChanged is called when the preprocessor enters or exits a file, both the
|
|
top level file being compiled, as well as any #include directives. It will
|
|
also be called as a result of a system header pragma or in internal renaming
|
|
of a file.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Reason (EnterFile|ExitFile|SystemHeaderPragma|RenameFile) PPCallbacks::FileChangeReason Reason for change.
|
|
FileType (C_User|C_System|C_ExternCSystem) SrcMgr::CharacteristicKind Include type.
|
|
PrevFID ((file)|(invalid)) FileID Previous file, if any.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: FileChanged
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-include.cpp:1:1"
|
|
Reason: EnterFile
|
|
FileType: C_User
|
|
PrevFID: (invalid)
|
|
|
|
`FileSkipped <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#ab5b338a0670188eb05fa7685bbfb5128>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
FileSkipped is called when a source file is skipped as the result of header
|
|
guard optimization.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ========================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ========================================================
|
|
ParentFile ("(file)" or (null)) const FileEntry The file that #included the skipped file.
|
|
FilenameTok (token) const Token The token in ParentFile that indicates the skipped file.
|
|
FileType (C_User|C_System|C_ExternCSystem) SrcMgr::CharacteristicKind The file type.
|
|
============== ================================================== ============================== ========================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: FileSkipped
|
|
ParentFile: "/path/filename.h"
|
|
FilenameTok: "filename.h"
|
|
FileType: C_User
|
|
|
|
`FileNotFound <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a3045151545f987256bfa8d978916ef00>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
FileNotFound is called when an inclusion directive results in a file-not-found error.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== =====================================================================================================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== =====================================================================================================================================
|
|
FileName "(file)" StringRef The name of the file being included, as written in the source code.
|
|
RecoveryPath (path) SmallVectorImpl<char> If this client indicates that it can recover from this missing file, the client should set this as an additional header search patch.
|
|
============== ================================================== ============================== =====================================================================================================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: FileNotFound
|
|
FileName: "/path/filename.h"
|
|
RecoveryPath:
|
|
|
|
`InclusionDirective <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a557d9738c329793513a6f57d6b60de52>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
InclusionDirective is called when an inclusion directive of any kind (#include</code>, #import</code>, etc.) has been processed, regardless of whether the inclusion will actually result in an inclusion.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ============================================================================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ============================================================================================================
|
|
HashLoc "(file):(line):(col)" SourceLocation The location of the '#' that starts the inclusion directive.
|
|
IncludeTok (token) const Token The token that indicates the kind of inclusion directive, e.g., 'include' or 'import'.
|
|
FileName "(file)" StringRef The name of the file being included, as written in the source code.
|
|
IsAngled (true|false) bool Whether the file name was enclosed in angle brackets; otherwise, it was enclosed in quotes.
|
|
FilenameRange "(file)" CharSourceRange The character range of the quotes or angle brackets for the written file name.
|
|
File "(file)" const FileEntry The actual file that may be included by this inclusion directive.
|
|
SearchPath "(path)" StringRef Contains the search path which was used to find the file in the file system.
|
|
RelativePath "(path)" StringRef The path relative to SearchPath, at which the include file was found.
|
|
Imported ((module name)|(null)) const Module The module, whenever an inclusion directive was automatically turned into a module import or null otherwise.
|
|
============== ================================================== ============================== ============================================================================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: InclusionDirective
|
|
IncludeTok: include
|
|
FileName: "Input/Level1B.h"
|
|
IsAngled: false
|
|
FilenameRange: "Input/Level1B.h"
|
|
File: "D:/Clang/llvmnewmod/clang-tools-extra/test/pp-trace/Input/Level1B.h"
|
|
SearchPath: "D:/Clang/llvmnewmod/clang-tools-extra/test/pp-trace"
|
|
RelativePath: "Input/Level1B.h"
|
|
Imported: (null)
|
|
|
|
`moduleImport <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#af32dcf1b8b7c179c7fcd3e24e89830fe>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
moduleImport is called when there was an explicit module-import syntax.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ===========================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ===========================================================
|
|
ImportLoc "(file):(line):(col)" SourceLocation The location of import directive token.
|
|
Path "(path)" ModuleIdPath The identifiers (and their locations) of the module "path".
|
|
Imported ((module name)|(null)) const Module The imported module; can be null if importing failed.
|
|
============== ================================================== ============================== ===========================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: moduleImport
|
|
ImportLoc: "d:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-modules.cpp:4:2"
|
|
Path: [{Name: Level1B, Loc: "d:/Clang/llvmnewmod/clang-tools-extra/test/pp-trace/pp-trace-modules.cpp:4:9"}, {Name: Level2B, Loc: "d:/Clang/llvmnewmod/clang-tools-extra/test/pp-trace/pp-trace-modules.cpp:4:17"}]
|
|
Imported: Level2B
|
|
|
|
`EndOfMainFile <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a63e170d069e99bc1c9c7ea0f3bed8bcc>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
EndOfMainFile is called when the end of the main file is reached.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ======================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ======================
|
|
(no arguments)
|
|
============== ================================================== ============================== ======================
|
|
|
|
Example:::
|
|
|
|
- Callback: EndOfMainFile
|
|
|
|
`Ident <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a3683f1d1fa513e9b6193d446a5cc2b66>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Ident is called when a #ident or #sccs directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
str (name) const std::string The text of the directive.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: Ident
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-ident.cpp:3:1"
|
|
str: "$Id$"
|
|
|
|
`PragmaDirective <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a0a2d7a72c62184b3cbde31fb62c6f2f7>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaDirective is called when start reading any pragma directive.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== =================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== =================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Introducer (PIK_HashPragma|PIK__Pragma|PIK___pragma) PragmaIntroducerKind The type of the pragma directive.
|
|
============== ================================================== ============================== =================================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaDirective
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
Introducer: PIK_HashPragma
|
|
|
|
`PragmaComment <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#ace0d940fc2c12ab76441466aab58dc37>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaComment is called when a #pragma comment directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Kind ((name)|(null)) const IdentifierInfo The comment kind symbol.
|
|
Str (message directive) const std::string The comment message directive.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaComment
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
Kind: library
|
|
Str: kernel32.lib
|
|
|
|
`PragmaDetectMismatch <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#ab11158c9149fb8ad8af1903f4a6cd65d>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaDetectMismatch is called when a #pragma detect_mismatch directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Name "(name)" const std::string The name.
|
|
Value (string) const std::string The value.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaDetectMismatch
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
Name: name
|
|
Value: value
|
|
|
|
`PragmaDebug <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a57cdccb6dcc07e926513ac3d5b121466>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaDebug is called when a #pragma clang __debug directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
DebugType (string) StringRef Indicates type of debug message.
|
|
============== ================================================== ============================== ================================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaDebug
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
DebugType: warning
|
|
|
|
`PragmaMessage <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#abb42935d9a9fd8e2c4f51cfdc4ea2ae1>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaMessage is called when a #pragma message directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== =======================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== =======================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Namespace (name) StringRef The namespace of the message directive.
|
|
Kind (PMK_Message|PMK_Warning|PMK_Error) PPCallbacks::PragmaMessageKind The type of the message directive.
|
|
Str (string) StringRef The text of the message directive.
|
|
============== ================================================== ============================== =======================================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaMessage
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
Namespace: "GCC"
|
|
Kind: PMK_Message
|
|
Str: The message text.
|
|
|
|
`PragmaDiagnosticPush <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a0f3ff19762baa38fe6c5c58022d32979>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaDiagnosticPush is called when a #pragma gcc diagnostic push directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Namespace (name) StringRef Namespace name.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaDiagnosticPush
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
Namespace: "GCC"
|
|
|
|
`PragmaDiagnosticPop <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#ac94d789873122221fba8d76f6c5ea45e>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaDiagnosticPop is called when a #pragma gcc diagnostic pop directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Namespace (name) StringRef Namespace name.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaDiagnosticPop
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
Namespace: "GCC"
|
|
|
|
`PragmaDiagnostic <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#afe7938f38a83cb7b4b25a13edfdd7bdd>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaDiagnostic is called when a #pragma gcc diagnostic directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Namespace (name) StringRef Namespace name.
|
|
mapping (0|MAP_IGNORE|MAP_WARNING|MAP_ERROR|MAP_FATAL) diag::Severity Mapping type.
|
|
Str (string) StringRef Warning/error name.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaDiagnostic
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
Namespace: "GCC"
|
|
mapping: MAP_WARNING
|
|
Str: WarningName
|
|
|
|
`PragmaOpenCLExtension <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a92a20a21fadbab4e2c788f4e27fe07e7>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaOpenCLExtension is called when OpenCL extension is either disabled or enabled with a pragma.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==========================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==========================
|
|
NameLoc "(file):(line):(col)" SourceLocation The location of the name.
|
|
Name (name) const IdentifierInfo Name symbol.
|
|
StateLoc "(file):(line):(col)" SourceLocation The location of the state.
|
|
State (1|0) unsigned Enabled/disabled state.
|
|
============== ================================================== ============================== ==========================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaOpenCLExtension
|
|
NameLoc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:10"
|
|
Name: Name
|
|
StateLoc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:18"
|
|
State: 1
|
|
|
|
`PragmaWarning <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#aa17169d25fa1cf0a6992fc944d1d8730>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaWarning is called when a #pragma warning directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
WarningSpec (string) StringRef The warning specifier.
|
|
Ids [(number)[, ...]] ArrayRef<int> The warning numbers.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaWarning
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
WarningSpec: disable
|
|
Ids: 1,2,3
|
|
|
|
`PragmaWarningPush <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#ae5626ef70502687a859f323a809ed0b6>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaWarningPush is called when a #pragma warning(push) directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
Level (number) int Warning level.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaWarningPush
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
Level: 1
|
|
|
|
`PragmaWarningPop <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#ac98d502af8811b8a6e7342d7cd2b3b95>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
PragmaWarningPop is called when a #pragma warning(pop) directive is read.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
============== ================================================== ============================== ==============================
|
|
|
|
Example:::
|
|
|
|
- Callback: PragmaWarningPop
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-pragma.cpp:3:1"
|
|
|
|
`MacroExpands <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a9bc725209d3a071ea649144ab996d515>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
MacroExpands is called when ::HandleMacroExpandedIdentifier when a macro invocation is found.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ======================================================================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ======================================================================================================
|
|
MacroNameTok (token) const Token The macro name token.
|
|
MacroDirective (MD_Define|MD_Undefine|MD_Visibility) const MacroDirective The kind of macro directive from the MacroDirective structure.
|
|
Range ["(file):(line):(col)", "(file):(line):(col)"] SourceRange The source range for the expansion.
|
|
Args [(name)|(number)|<(token name)>[, ...]] const MacroArgs The argument tokens. Names and numbers are literal, everything else is of the form '<' tokenName '>'.
|
|
============== ================================================== ============================== ======================================================================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: MacroExpands
|
|
MacroNameTok: X_IMPL
|
|
MacroDirective: MD_Define
|
|
Range: [(nonfile), (nonfile)]
|
|
Args: [a <plus> y, b]
|
|
|
|
`MacroDefined <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a8448fc9f96f22ad1b93ff393cffc5a76>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
MacroDefined is called when a macro definition is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================================================
|
|
MacroNameTok (token) const Token The macro name token.
|
|
MacroDirective (MD_Define|MD_Undefine|MD_Visibility) const MacroDirective The kind of macro directive from the MacroDirective structure.
|
|
============== ================================================== ============================== ==============================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: MacroDefined
|
|
MacroNameTok: X_IMPL
|
|
MacroDirective: MD_Define
|
|
|
|
`MacroUndefined <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#acb80fc6171a839db8e290945bf2c9d7a>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
MacroUndefined is called when a macro #undef is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================================================
|
|
MacroNameTok (token) const Token The macro name token.
|
|
MacroDirective (MD_Define|MD_Undefine|MD_Visibility) const MacroDirective The kind of macro directive from the MacroDirective structure.
|
|
============== ================================================== ============================== ==============================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: MacroUndefined
|
|
MacroNameTok: X_IMPL
|
|
MacroDirective: MD_Define
|
|
|
|
`Defined <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a3cc2a644533d0e4088a13d2baf90db94>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Defined is called when the 'defined' operator is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================================================
|
|
MacroNameTok (token) const Token The macro name token.
|
|
MacroDirective (MD_Define|MD_Undefine|MD_Visibility) const MacroDirective The kind of macro directive from the MacroDirective structure.
|
|
Range ["(file):(line):(col)", "(file):(line):(col)"] SourceRange The source range for the directive.
|
|
============== ================================================== ============================== ==============================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: Defined
|
|
MacroNameTok: MACRO
|
|
MacroDirective: (null)
|
|
Range: ["D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:8:5", "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:8:19"]
|
|
|
|
`SourceRangeSkipped <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#abdb4ebe11610f079ac33515965794b46>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
SourceRangeSkipped is called when a source range is skipped.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== =========================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== =========================
|
|
Range ["(file):(line):(col)", "(file):(line):(col)"] SourceRange The source range skipped.
|
|
============== ================================================== ============================== =========================
|
|
|
|
Example:::
|
|
|
|
- Callback: SourceRangeSkipped
|
|
Range: [":/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:8:2", ":/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:9:2"]
|
|
|
|
`If <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a645edcb0d6becbc6f256f02fd1287778>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
If is called when an #if is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ===================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ===================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
ConditionRange ["(file):(line):(col)", "(file):(line):(col)"] SourceRange The source range for the condition.
|
|
ConditionValue (true|false) bool The condition value.
|
|
============== ================================================== ============================== ===================================
|
|
|
|
Example:::
|
|
|
|
- Callback: If
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:8:2"
|
|
ConditionRange: ["D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:8:4", "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:9:1"]
|
|
ConditionValue: false
|
|
|
|
`Elif <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a180c9e106a28d60a6112e16b1bb8302a>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Elif is called when an #elif is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ===================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ===================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
ConditionRange ["(file):(line):(col)", "(file):(line):(col)"] SourceRange The source range for the condition.
|
|
ConditionValue (true|false) bool The condition value.
|
|
IfLoc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
============== ================================================== ============================== ===================================
|
|
|
|
Example:::
|
|
|
|
- Callback: Elif
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:10:2"
|
|
ConditionRange: ["D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:10:4", "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:11:1"]
|
|
ConditionValue: false
|
|
IfLoc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:8:2"
|
|
|
|
`Ifdef <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a0ce79575dda307784fd51a6dd4eec33d>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Ifdef is called when an #ifdef is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
MacroNameTok (token) const Token The macro name token.
|
|
MacroDirective (MD_Define|MD_Undefine|MD_Visibility) const MacroDirective The kind of macro directive from the MacroDirective structure.
|
|
============== ================================================== ============================== ==============================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: Ifdef
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-conditional.cpp:3:1"
|
|
MacroNameTok: MACRO
|
|
MacroDirective: MD_Define
|
|
|
|
`Ifndef <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#a767af69f1cdcc4cd880fa2ebf77ad3ad>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Ifndef is called when an #ifndef is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ==============================================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ==============================================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the directive.
|
|
MacroNameTok (token) const Token The macro name token.
|
|
MacroDirective (MD_Define|MD_Undefine|MD_Visibility) const MacroDirective The kind of macro directive from the MacroDirective structure.
|
|
============== ================================================== ============================== ==============================================================
|
|
|
|
Example:::
|
|
|
|
- Callback: Ifndef
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-conditional.cpp:3:1"
|
|
MacroNameTok: MACRO
|
|
MacroDirective: MD_Define
|
|
|
|
`Else <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#ad57f91b6d9c3cbcca326a2bfb49e0314>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Else is called when an #else is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ===================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ===================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the else directive.
|
|
IfLoc "(file):(line):(col)" SourceLocation The location of the if directive.
|
|
============== ================================================== ============================== ===================================
|
|
|
|
Example:::
|
|
|
|
- Callback: Else
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:10:2"
|
|
IfLoc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:8:2"
|
|
|
|
`Endif <https://clang.llvm.org/doxygen/classclang_1_1PPCallbacks.html#afc62ca1401125f516d58b1629a2093ce>`_ Callback
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Endif is called when an #endif is seen.
|
|
|
|
Argument descriptions:
|
|
|
|
============== ================================================== ============================== ====================================
|
|
Argument Name Argument Value Syntax Clang C++ Type Description
|
|
============== ================================================== ============================== ====================================
|
|
Loc "(file):(line):(col)" SourceLocation The location of the endif directive.
|
|
IfLoc "(file):(line):(col)" SourceLocation The location of the if directive.
|
|
============== ================================================== ============================== ====================================
|
|
|
|
Example:::
|
|
|
|
- Callback: Endif
|
|
Loc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:10:2"
|
|
IfLoc: "D:/Clang/llvm/clang-tools-extra/test/pp-trace/pp-trace-macro.cpp:8:2"
|
|
|
|
Building pp-trace
|
|
=================
|
|
|
|
To build from source:
|
|
|
|
1. Read `Getting Started with the LLVM System`_ and `Clang Tools
|
|
Documentation`_ for information on getting sources for LLVM, Clang, and
|
|
Clang Extra Tools.
|
|
|
|
2. `Getting Started with the LLVM System`_ and `Building LLVM with CMake`_ give
|
|
directions for how to build. With sources all checked out into the
|
|
right place the LLVM build will build Clang Extra Tools and their
|
|
dependencies automatically.
|
|
|
|
* If using CMake, you can also use the ``pp-trace`` target to build
|
|
just the pp-trace tool and its dependencies.
|
|
|
|
.. _Getting Started with the LLVM System: https://llvm.org/docs/GettingStarted.html
|
|
.. _Building LLVM with CMake: https://llvm.org/docs/CMake.html
|
|
.. _Clang Tools Documentation: https://clang.llvm.org/docs/ClangTools.html
|
|
|