[PATCH] D83183: [clang] Rework how and when APValues are dumped
Bruno Ricci via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Jul 5 15:28:35 PDT 2020
riccibruno created this revision.
riccibruno added reviewers: aaron.ballman, steveire, ilya-biryukov, sammccall, martong.
riccibruno added a project: clang.
Herald added subscribers: cfe-commits, rnkovacs.
Currently `APValue`s are dumped as a single string. This becomes quickly completely
unreadable since `APValue` is a tree-like structure. Even a simple example is not pretty:
struct S { int arr[4]; float f; };
constexpr S s = { .arr = {1,2}, .f = 3.1415f };
// Struct fields: Array: Int: 1, Int: 2, 2 x Int: 0, Float: 3.141500e+00
With this patch this becomes:
-Struct
|-field: Array size=4
| |-elements: Int 1, Int 2
| `-filler: 2 x Int 0
`-field: Float 3.141500e+00
Additionally `APValue`s are currently only dumped as part of visiting a `ConstantExpr`.
This patch also dump the value of the initializer (if any) of constexpr variable declarations:
constexpr int foo(int a, int b) { return a + b - 42; }
constexpr int a = 1, b = 2;
constexpr int c = foo(a, b) > 0 ? foo(a, b) : foo(b, a);
// VarDecl 0x62100008aec8 <col:3, col:57> col:17 c 'const int' constexpr cinit
// |-value: Int -39
// `-ConditionalOperator 0x62100008b4d0 <col:21, col:57> 'int'
// <snip>
Do the above by moving the dump functions to `TextNodeDumper` which already has
the machinery to display trees. The cases `APValue::LValue`, `APValue::MemberPointer`
and `APValue::AddrLabelDiff` are left as they were before (unimplemented).
We try to display multiple elements on the same line if they are considered to be "simple".
This is to avoid wasting large amounts of vertical space in an example like:
constexpr int arr[8] = {0,1,2,3,4,5,6,7};
// VarDecl 0x62100008bb78 <col:3, col:42> col:17 arr 'int const[8]' constexpr cinit
// |-value: Array size=8
// | |-elements: Int 0, Int 1, Int 2, Int 3
// | `-elements: Int 4, Int 5, Int 6, Int 7
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D83183
Files:
clang/include/clang/AST/APValue.h
clang/include/clang/AST/ASTNodeTraverser.h
clang/include/clang/AST/JSONNodeDumper.h
clang/include/clang/AST/TextNodeDumper.h
clang/lib/AST/APValue.cpp
clang/lib/AST/ASTDumper.cpp
clang/lib/AST/JSONNodeDumper.cpp
clang/lib/AST/TextNodeDumper.cpp
clang/test/AST/alignas_maybe_odr_cleanup.cpp
clang/test/AST/ast-dump-APValue-anon-union.cpp
clang/test/AST/ast-dump-APValue-arithmetic.cpp
clang/test/AST/ast-dump-APValue-array.cpp
clang/test/AST/ast-dump-APValue-struct.cpp
clang/test/AST/ast-dump-APValue-todo.cpp
clang/test/AST/ast-dump-APValue-union.cpp
clang/test/AST/ast-dump-APValue-vector.cpp
clang/test/AST/ast-dump-attr.cpp
clang/test/AST/ast-dump-color.cpp
clang/test/AST/ast-dump-constant-expr.cpp
clang/test/AST/ast-dump-decl.cpp
clang/test/AST/ast-dump-records.cpp
clang/test/AST/ast-dump-stmt.cpp
clang/test/AST/pr43983.cpp
clang/test/Import/switch-stmt/test.cpp
clang/test/Tooling/clang-check-ast-dump.cpp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83183.275575.patch
Type: text/x-patch
Size: 65060 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200705/1fe24d58/attachment-0001.bin>
More information about the cfe-commits
mailing list