[PATCH] D104484: [clang] Add cc1 option for dumping layout for all complete types
David Tenty via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 22 07:02:32 PDT 2021
daltenty updated this revision to Diff 353636.
daltenty added a comment.
- clang-format
- Address comments
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D104484/new/
https://reviews.llvm.org/D104484
Files:
clang/include/clang/Basic/LangOptions.def
clang/include/clang/Driver/Options.td
clang/lib/AST/Decl.cpp
clang/test/Layout/dump-complete.cpp
Index: clang/test/Layout/dump-complete.cpp
===================================================================
--- /dev/null
+++ clang/test/Layout/dump-complete.cpp
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -emit-llvm-only -fdump-record-layouts-complete %s | FileCheck %s
+
+struct a {
+ int x;
+};
+
+struct b {
+ char y;
+} foo;
+
+class c {};
+
+class d;
+
+// CHECK: 0 | struct a
+// CHECK: 0 | struct b
+// CHECK: 0 | class c
+// CHECK-NOT: 0 | class d
Index: clang/lib/AST/Decl.cpp
===================================================================
--- clang/lib/AST/Decl.cpp
+++ clang/lib/AST/Decl.cpp
@@ -4581,6 +4581,13 @@
void RecordDecl::completeDefinition() {
assert(!isCompleteDefinition() && "Cannot redefine record!");
TagDecl::completeDefinition();
+
+ ASTContext &Ctx = getASTContext();
+
+ // Layouts are dumped when computed, so if we are dumping for all complete
+ // types, we need to force usage to get types that wouldn't be used elsewhere.
+ if (Ctx.getLangOpts().DumpRecordLayoutsComplete)
+ (void)Ctx.getASTRecordLayout(this);
}
/// isMsStruct - Get whether or not this record uses ms_struct layout.
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -5371,10 +5371,13 @@
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_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]>;
+ ImpliedByAnyOf<[fdump_record_layouts_simple.KeyPath, fdump_record_layouts_complete.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
@@ -266,6 +266,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(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")
BENIGN_LANGOPT(InlineVisibilityHidden , 1, 0, "hidden visibility for inline C++ methods")
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D104484.353636.patch
Type: text/x-patch
Size: 3185 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210622/6207033f/attachment-0001.bin>
More information about the cfe-commits
mailing list