forked from OSchip/llvm-project
Revert "[ASTImporter][Structural Eq] Check for isBeingDefined"
This reverts commit r345760 because it caused an assertion in the lldb test suite. This is the log from the build bot: http://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/12003/ llvm-svn: 345784
This commit is contained in:
parent
46376966ea
commit
7045c72b95
|
@ -1016,8 +1016,7 @@ static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
|
|||
return false;
|
||||
|
||||
// Compare the definitions of these two records. If either or both are
|
||||
// incomplete (i.e. it is a forward decl), we assume that they are
|
||||
// equivalent.
|
||||
// incomplete, we assume that they are equivalent.
|
||||
D1 = D1->getDefinition();
|
||||
D2 = D2->getDefinition();
|
||||
if (!D1 || !D2)
|
||||
|
@ -1032,11 +1031,6 @@ static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context,
|
|||
if (D1->hasExternalLexicalStorage() || D2->hasExternalLexicalStorage())
|
||||
return true;
|
||||
|
||||
// If one definition is currently being defined, we do not compare for
|
||||
// equality and we assume that the decls are equal.
|
||||
if (D1->isBeingDefined() || D2->isBeingDefined())
|
||||
return true;
|
||||
|
||||
if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {
|
||||
if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {
|
||||
if (D1CXX->hasExternalLexicalStorage() &&
|
||||
|
|
|
@ -3726,45 +3726,6 @@ TEST_P(ImportFunctionTemplateSpecializations, DefinitionThenPrototype) {
|
|||
EXPECT_EQ(To1->getPreviousDecl(), To0);
|
||||
}
|
||||
|
||||
TEST_P(ASTImporterTestBase,
|
||||
ImportShouldNotReportFalseODRErrorWhenRecordIsBeingDefined) {
|
||||
{
|
||||
Decl *FromTU = getTuDecl(
|
||||
R"(
|
||||
template <typename T>
|
||||
struct B;
|
||||
)",
|
||||
Lang_CXX, "input0.cc");
|
||||
auto *FromD = FirstDeclMatcher<ClassTemplateDecl>().match(
|
||||
FromTU, classTemplateDecl(hasName("B")));
|
||||
|
||||
Import(FromD, Lang_CXX);
|
||||
}
|
||||
|
||||
{
|
||||
Decl *FromTU = getTuDecl(
|
||||
R"(
|
||||
template <typename T>
|
||||
struct B {
|
||||
void f();
|
||||
B* b;
|
||||
};
|
||||
)",
|
||||
Lang_CXX, "input1.cc");
|
||||
FunctionDecl *FromD = FirstDeclMatcher<FunctionDecl>().match(
|
||||
FromTU, functionDecl(hasName("f")));
|
||||
Import(FromD, Lang_CXX);
|
||||
auto *FromCTD = FirstDeclMatcher<ClassTemplateDecl>().match(
|
||||
FromTU, classTemplateDecl(hasName("B")));
|
||||
auto *ToCTD = cast<ClassTemplateDecl>(Import(FromCTD, Lang_CXX));
|
||||
EXPECT_TRUE(ToCTD->isThisDeclarationADefinition());
|
||||
|
||||
// We expect no (ODR) warning during the import.
|
||||
auto *ToTU = ToAST->getASTContext().getTranslationUnitDecl();
|
||||
EXPECT_EQ(0u, ToTU->getASTContext().getDiagnostics().getNumWarnings());
|
||||
}
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(ParameterizedTests, DeclContextTest,
|
||||
::testing::Values(ArgVector()), );
|
||||
|
||||
|
|
Loading…
Reference in New Issue