[PATCH] D105112: [clang] Add -fdump-record-layouts-canonical option
David Tenty via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 30 18:14:36 PDT 2021
daltenty updated this revision to Diff 355741.
daltenty added a comment.
- Update test case with nested typedef
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D105112/new/
https://reviews.llvm.org/D105112
Files:
clang/include/clang/Basic/LangOptions.def
clang/include/clang/Driver/Options.td
clang/lib/AST/RecordLayoutBuilder.cpp
clang/test/Layout/dump-canonical.cpp
Index: clang/test/Layout/dump-canonical.cpp
===================================================================
--- /dev/null
+++ clang/test/Layout/dump-canonical.cpp
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 -emit-llvm-only -fdump-record-layouts %s | FileCheck %s
+// RUN: %clang_cc1 -emit-llvm-only -fdump-record-layouts-canonical %s | FileCheck %s -check-prefix CANONICAL
+
+typedef long foo_t;
+
+
+struct a {
+ foo_t x;
+} b;
+
+struct c {
+ typedef foo_t bar_t;
+ bar_t x;
+} d;
+
+// CHECK: 0 | foo_t
+// CHECK: 0 | c::bar_t
+// CANONICAL-NOT: 0 | foo_t
+// CANONICAL-NOT: 0 | c::bar_t
+// CANONICAL: 0 | long
Index: clang/lib/AST/RecordLayoutBuilder.cpp
===================================================================
--- clang/lib/AST/RecordLayoutBuilder.cpp
+++ clang/lib/AST/RecordLayoutBuilder.cpp
@@ -3577,7 +3577,10 @@
} else {
PrintOffset(OS, FieldOffset, IndentLevel);
}
- OS << Field.getType().getAsString() << ' ' << Field << '\n';
+ const QualType &FieldType = C.getLangOpts().DumpRecordLayoutsCanonical
+ ? Field.getType().getCanonicalType()
+ : Field.getType();
+ OS << FieldType.getAsString() << ' ' << Field << '\n';
}
// Dump virtual bases.
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -5381,13 +5381,16 @@
def fdump_record_layouts_simple : Flag<["-"], "fdump-record-layouts-simple">,
HelpText<"Dump record layout information in a simple form used for testing">,
MarshallingInfoFlag<LangOpts<"DumpRecordLayoutsSimple">>;
+def fdump_record_layouts_canonical : Flag<["-"], "fdump-record-layouts-canonical">,
+ HelpText<"Dump record layout information with canonical field types">,
+ MarshallingInfoFlag<LangOpts<"DumpRecordLayoutsCanonical">>;
def fdump_record_layouts_complete : Flag<["-"], "fdump-record-layouts-complete">,
HelpText<"Dump record layout information for all complete types">,
MarshallingInfoFlag<LangOpts<"DumpRecordLayoutsComplete">>;
def fdump_record_layouts : Flag<["-"], "fdump-record-layouts">,
HelpText<"Dump record layout information">,
MarshallingInfoFlag<LangOpts<"DumpRecordLayouts">>,
- ImpliedByAnyOf<[fdump_record_layouts_simple.KeyPath, fdump_record_layouts_complete.KeyPath]>;
+ ImpliedByAnyOf<[fdump_record_layouts_simple.KeyPath, fdump_record_layouts_complete.KeyPath, fdump_record_layouts_canonical.KeyPath]>;
def fix_what_you_can : Flag<["-"], "fix-what-you-can">,
HelpText<"Apply fix-it advice even in the presence of unfixable errors">,
MarshallingInfoFlag<FrontendOpts<"FixWhatYouCan">>;
Index: clang/include/clang/Basic/LangOptions.def
===================================================================
--- clang/include/clang/Basic/LangOptions.def
+++ clang/include/clang/Basic/LangOptions.def
@@ -265,6 +265,7 @@
BENIGN_LANGOPT(ElideConstructors , 1, 1, "C++ copy constructor elision")
BENIGN_LANGOPT(DumpRecordLayouts , 1, 0, "dumping the layout of IRgen'd records")
BENIGN_LANGOPT(DumpRecordLayoutsSimple , 1, 0, "dumping the layout of IRgen'd records in a simple form")
+BENIGN_LANGOPT(DumpRecordLayoutsCanonical , 1, 0, "dumping the AST layout of records using canonical field types")
BENIGN_LANGOPT(DumpRecordLayoutsComplete , 1, 0, "dumping the AST layout of all complete records")
BENIGN_LANGOPT(DumpVTableLayouts , 1, 0, "dumping the layouts of emitted vtables")
LANGOPT(NoConstantCFStrings , 1, 0, "no constant CoreFoundation strings")
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D105112.355741.patch
Type: text/x-patch
Size: 3634 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210701/8660d3e9/attachment.bin>
More information about the cfe-commits
mailing list