diff options
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 6 | ||||
-rw-r--r-- | clang/test/Index/Inputs/crash-preamble-classes.h | 9 | ||||
-rw-r--r-- | clang/test/Index/crash-preamble-classes.cpp | 8 |
3 files changed, 20 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 526f6802c33..c3975f9f62d 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -15440,10 +15440,10 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, CXXRecord->getDestructor()); } - if (!CXXRecord->isInvalidDecl()) { - // Add any implicitly-declared members to this class. - AddImplicitlyDeclaredMembersToClass(CXXRecord); + // Add any implicitly-declared members to this class. + AddImplicitlyDeclaredMembersToClass(CXXRecord); + if (!CXXRecord->isInvalidDecl()) { // If we have virtual base classes, we may end up finding multiple // final overriders for a given virtual function. Check for this // problem now. diff --git a/clang/test/Index/Inputs/crash-preamble-classes.h b/clang/test/Index/Inputs/crash-preamble-classes.h new file mode 100644 index 00000000000..a8fb5cede05 --- /dev/null +++ b/clang/test/Index/Inputs/crash-preamble-classes.h @@ -0,0 +1,9 @@ +struct Incomplete; + +struct X : Incomplete { + X(); +}; + +struct Y : X { + using X::X; +}; diff --git a/clang/test/Index/crash-preamble-classes.cpp b/clang/test/Index/crash-preamble-classes.cpp new file mode 100644 index 00000000000..e7d4bd70aea --- /dev/null +++ b/clang/test/Index/crash-preamble-classes.cpp @@ -0,0 +1,8 @@ +#include "crash-preamble-classes.h" + +struct Z : Y { + Z() {} +}; + +// RUN: env CINDEXTEST_EDITING=1 \ +// RUN: c-index-test -test-load-source-reparse 5 local -I %S/Inputs %s |