From 5c4fc581d5fe8427f03ec90b0d745453398aa3ad Mon Sep 17 00:00:00 2001 From: Amy Huang Date: Tue, 29 Sep 2020 16:19:08 -0700 Subject: [PATCH] [DebugInfo] Add types from constructor homing to the retained types list. Add class types to the retained types list to make sure they don't get dropped if the constructor is optimized out later. Differential Revision: https://reviews.llvm.org/D88522 --- clang/lib/CodeGen/CGDebugInfo.cpp | 2 +- clang/test/CodeGenCXX/debug-info-limited-ctor.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 27c584f..88aace8 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -1726,7 +1726,7 @@ llvm::DISubprogram *CGDebugInfo::CreateCXXMemberFunction( // info is emitted. if (DebugKind == codegenoptions::DebugInfoConstructor) if (const CXXConstructorDecl *CD = dyn_cast(Method)) - completeClass(CD->getParent()); + completeUnusedClass(*CD->getParent()); llvm::DINodeArray TParamsArray = CollectFunctionTemplateParams(Method, Unit); llvm::DISubprogram *SP = DBuilder.createMethod( diff --git a/clang/test/CodeGenCXX/debug-info-limited-ctor.cpp b/clang/test/CodeGenCXX/debug-info-limited-ctor.cpp index cf2e89e..cf7adad 100644 --- a/clang/test/CodeGenCXX/debug-info-limited-ctor.cpp +++ b/clang/test/CodeGenCXX/debug-info-limited-ctor.cpp @@ -9,7 +9,7 @@ struct B { B(); } TestB; -// CHECK-DAG: !DICompositeType(tag: DW_TAG_structure_type, name: "C"{{.*}}DIFlagTypePassByValue +// CHECK-DAG: ![[C:[0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C"{{.*}}DIFlagTypePassByValue struct C { C() {} } TestC; @@ -73,3 +73,7 @@ void f(K k) {} void L() { auto func = [&]() {}; } + +// Check that types are being added to retained types list. +// CHECK-DAG: !DICompileUnit{{.*}}retainedTypes: ![[RETAINED:[0-9]+]] +// CHECK-DAG: ![[RETAINED]] = {{.*}}![[C]] -- 2.7.4