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 llvm-svn: 279485
This commit is contained in:
parent
9f5c83b914
commit
a72972b985
|
@ -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.
|
||||
|
|
|
@ -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;
|
|
@ -0,0 +1,7 @@
|
|||
/* -*- C++ -*- */
|
||||
#include "DebugNestedA.h"
|
||||
class C {
|
||||
void run(AF &af) {
|
||||
af.f();
|
||||
}
|
||||
};
|
|
@ -422,3 +422,13 @@ module MacroFabs1 {
|
|||
module DiagOutOfDate {
|
||||
header "DiagOutOfDate.h"
|
||||
}
|
||||
|
||||
module DebugNestedA {
|
||||
header "DebugNestedA.h"
|
||||
export *
|
||||
}
|
||||
|
||||
module DebugNestedB {
|
||||
header "DebugNestedB.h"
|
||||
export *
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue