This revision was automatically updated to reflect the committed changes. Closed by commit rC324062: [Sema] Add implicit members even for invalid CXXRecordDecls (authored by ibiryukov, committed by ).
Changed prior to commit: https://reviews.llvm.org/D42810?vs=132443&id=132546#toc Repository: rC Clang https://reviews.llvm.org/D42810 Files: lib/Sema/SemaDecl.cpp test/Index/Inputs/crash-preamble-classes.h test/Index/crash-preamble-classes.cpp Index: test/Index/Inputs/crash-preamble-classes.h =================================================================== --- test/Index/Inputs/crash-preamble-classes.h +++ test/Index/Inputs/crash-preamble-classes.h @@ -0,0 +1,9 @@ +struct Incomplete; + +struct X : Incomplete { + X(); +}; + +struct Y : X { + using X::X; +}; Index: test/Index/crash-preamble-classes.cpp =================================================================== --- test/Index/crash-preamble-classes.cpp +++ 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 Index: lib/Sema/SemaDecl.cpp =================================================================== --- lib/Sema/SemaDecl.cpp +++ lib/Sema/SemaDecl.cpp @@ -15440,10 +15440,10 @@ 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.
Index: test/Index/Inputs/crash-preamble-classes.h =================================================================== --- test/Index/Inputs/crash-preamble-classes.h +++ test/Index/Inputs/crash-preamble-classes.h @@ -0,0 +1,9 @@ +struct Incomplete; + +struct X : Incomplete { + X(); +}; + +struct Y : X { + using X::X; +}; Index: test/Index/crash-preamble-classes.cpp =================================================================== --- test/Index/crash-preamble-classes.cpp +++ 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 Index: lib/Sema/SemaDecl.cpp =================================================================== --- lib/Sema/SemaDecl.cpp +++ lib/Sema/SemaDecl.cpp @@ -15440,10 +15440,10 @@ 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.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits