oontvoo created this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Repro: - Annotate the unique_ptr class with trivial_abi (eg., https://godbolt.org/z/-rprsc) - ./build/bin/clang++ -stdlib=libc++ -I../libcxx/memory Crash: @ 0x559d129463fc clang::CXXRecordDecl::defaultedCopyConstructorIsDeleted() @ 0x559d1288d3e5 clang::Sema::checkIllFormedTrivialABIStruct()::$_7::operator()() @ 0x559d12884c34 clang::Sema::checkIllFormedTrivialABIStruct() @ 0x559d1288412e clang::Sema::CheckCompletedCXXClass() @ 0x559d1288d843 clang::Sema::ActOnFinishCXXMemberSpecification() @ 0x559d12020109 clang::Parser::ParseCXXMemberSpecification() @ 0x559d1201e80c clang::Parser::ParseClassSpecifier() @ 0x559d1204e807 clang::Parser::ParseDeclarationSpecifiers() @ 0x559d120e9aa9 clang::Parser::ParseSingleDeclarationAfterTemplate() @ 0x559d120e8f21 clang::Parser::ParseTemplateDeclarationOrSpecialization() @ 0x559d120e8886 clang::Parser::ParseDeclarationStartingWithTemplate() @ 0x559d1204a1d4 clang::Parser::ParseDeclaration() @ 0x559d12004b1d clang::Parser::ParseExternalDeclaration() @ 0x559d12017689 clang::Parser::ParseInnerNamespace() @ 0x559d12017024 clang::Parser::ParseNamespace() @ 0x559d1204a29b clang::Parser::ParseDeclaration() @ 0x559d12004c74 clang::Parser::ParseExternalDeclaration() Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D83263 Files: clang/lib/Sema/SemaDeclCXX.cpp Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -9719,6 +9719,11 @@ // Ill-formed if the copy and move constructors are deleted. auto HasNonDeletedCopyOrMoveConstructor = [&]() { + // If we know there exist users-defined move/copy ctors, don't try to infer + // the deletion of implicit ones becausee Sema may not have the info yet. + if (RD.hasUserDeclaredMoveConstructor() || + RD.hasUserDeclaredCopyConstructor()) + return true; if (RD.needsImplicitCopyConstructor() && !RD.defaultedCopyConstructorIsDeleted()) return true;
Index: clang/lib/Sema/SemaDeclCXX.cpp =================================================================== --- clang/lib/Sema/SemaDeclCXX.cpp +++ clang/lib/Sema/SemaDeclCXX.cpp @@ -9719,6 +9719,11 @@ // Ill-formed if the copy and move constructors are deleted. auto HasNonDeletedCopyOrMoveConstructor = [&]() { + // If we know there exist users-defined move/copy ctors, don't try to infer + // the deletion of implicit ones becausee Sema may not have the info yet. + if (RD.hasUserDeclaredMoveConstructor() || + RD.hasUserDeclaredCopyConstructor()) + return true; if (RD.needsImplicitCopyConstructor() && !RD.defaultedCopyConstructorIsDeleted()) return true;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits