From a78fa9ec7a1a7cb5d2c62ef822e70ec7bbe415f4 Mon Sep 17 00:00:00 2001 From: Adrian Prantl <aprantl@apple.com> Date: Mon, 22 Aug 2016 22:23:58 +0000 Subject: [PATCH] Module debug info: Don't assert when encountering an incomplete definition in isDefinedInClangModule() and assume that the incomplete definition is not defined in the module. This broke the -gmodules self host recently. rdar://problem/27894367 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279485 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGDebugInfo.cpp | 3 ++- test/Modules/Inputs/DebugNestedA.h | 8 ++++++++ test/Modules/Inputs/DebugNestedB.h | 7 +++++++ test/Modules/Inputs/module.map | 10 ++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 test/Modules/Inputs/DebugNestedA.h create mode 100644 test/Modules/Inputs/DebugNestedB.h diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index a153193a53f..af0cd02ed2f 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -1655,7 +1655,8 @@ static bool isDefinedInClangModule(const RecordDecl *RD) { if (!RD->isExternallyVisible() && RD->getName().empty()) return false; if (auto *CXXDecl = dyn_cast<CXXRecordDecl>(RD)) { - assert(CXXDecl->isCompleteDefinition() && "incomplete record definition"); + if (!CXXDecl->isCompleteDefinition()) + return false; auto TemplateKind = CXXDecl->getTemplateSpecializationKind(); if (TemplateKind != TSK_Undeclared) { // This is a template, check the origin of the first member. diff --git a/test/Modules/Inputs/DebugNestedA.h b/test/Modules/Inputs/DebugNestedA.h new file mode 100644 index 00000000000..58dc2a7df74 --- /dev/null +++ b/test/Modules/Inputs/DebugNestedA.h @@ -0,0 +1,8 @@ +/* -*- C++ -*- */ +template <typename T> class Base {}; +template <typename T> struct A : public Base<A<T>> { + void f(); +}; + +class F {}; +typedef A<F> AF; diff --git a/test/Modules/Inputs/DebugNestedB.h b/test/Modules/Inputs/DebugNestedB.h new file mode 100644 index 00000000000..7f75d0946e2 --- /dev/null +++ b/test/Modules/Inputs/DebugNestedB.h @@ -0,0 +1,7 @@ +/* -*- C++ -*- */ +#include "DebugNestedA.h" +class C { + void run(AF &af) { + af.f(); + } +}; diff --git a/test/Modules/Inputs/module.map b/test/Modules/Inputs/module.map index a683190e182..2beb942861a 100644 --- a/test/Modules/Inputs/module.map +++ b/test/Modules/Inputs/module.map @@ -422,3 +422,13 @@ module MacroFabs1 { module DiagOutOfDate { header "DiagOutOfDate.h" } + +module DebugNestedA { + header "DebugNestedA.h" + export * +} + +module DebugNestedB { + header "DebugNestedB.h" + export * +} -- GitLab