diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index a153193a53fea626f20b6c106ec97d4e28ac0eb2..af0cd02ed2f128aabd4bb450519d6d4d8fecafb2 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 0000000000000000000000000000000000000000..58dc2a7df74926cd98ed8429d1ebaf4c7203f9a5 --- /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 0000000000000000000000000000000000000000..7f75d0946e20eb6c338cdc886abbc0124722558b --- /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 a683190e18251dcdfdad13804271c79690bc2987..2beb942861a469faf27dadc30a0e16240c689d6d 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 * +}