Author: Chuanqi Xu Date: 2023-01-18T14:15:27+08:00 New Revision: 205b5f63a835bffc22dccfdaed53ee7dac504be1
URL: https://github.com/llvm/llvm-project/commit/205b5f63a835bffc22dccfdaed53ee7dac504be1 DIFF: https://github.com/llvm/llvm-project/commit/205b5f63a835bffc22dccfdaed53ee7dac504be1.diff LOG: [Serialization] Serialize the new added FunctionDeclBits: IsIneligibleOrNotSelected Close https://github.com/llvm/llvm-project/issues/59719. The root cause of the problem is that we forgot to serialize a new introduced bit to FunctionDeclBits. Maybe we need to find some methods to work for detecting this. Added: clang/test/Modules/pr59719.cppm Modified: clang/lib/Serialization/ASTReaderDecl.cpp clang/lib/Serialization/ASTWriterDecl.cpp Removed: ################################################################################ diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 8173f7fb5e56..990806498c94 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -1049,6 +1049,7 @@ void ASTDeclReader::VisitFunctionDecl(FunctionDecl *FD) { FD->setTrivialForCall(Record.readInt()); FD->setDefaulted(Record.readInt()); FD->setExplicitlyDefaulted(Record.readInt()); + FD->setIneligibleOrNotSelected(Record.readInt()); FD->setHasImplicitReturnZero(Record.readInt()); FD->setConstexprKind(static_cast<ConstexprSpecKind>(Record.readInt())); FD->setUsesSEHTry(Record.readInt()); diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index ce16ed2a3e01..ca59dd69f4fd 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -642,6 +642,7 @@ void ASTDeclWriter::VisitFunctionDecl(FunctionDecl *D) { Record.push_back(D->isTrivialForCall()); Record.push_back(D->isDefaulted()); Record.push_back(D->isExplicitlyDefaulted()); + Record.push_back(D->isIneligibleOrNotSelected()); Record.push_back(D->hasImplicitReturnZero()); Record.push_back(static_cast<uint64_t>(D->getConstexprKind())); Record.push_back(D->usesSEHTry()); @@ -2304,6 +2305,7 @@ void ASTWriter::WriteDeclAbbrevs() { Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // TrivialForCall Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // Defaulted Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ExplicitlyDefaulted + Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsIneligibleOrNotSelected Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // ImplicitReturnZero Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 2)); // Constexpr Abv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // UsesSEHTry diff --git a/clang/test/Modules/pr59719.cppm b/clang/test/Modules/pr59719.cppm new file mode 100644 index 000000000000..5aea8992a0ca --- /dev/null +++ b/clang/test/Modules/pr59719.cppm @@ -0,0 +1,57 @@ +// https://github.com/llvm/llvm-project/issues/59780 +// +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/data.cppm -emit-module-interface -o %t/data.pcm +// RUN: %clang_cc1 -std=c++20 %t/main.cpp -fprebuilt-module-path=%t -fsyntax-only -verify + +//--- foo.h +namespace std { + +template <class _Tp> +class expected { +public: + expected(_Tp&& __u) + {} + + constexpr ~expected() + requires(__is_trivially_destructible(_Tp)) + = default; + + constexpr ~expected() + requires(!__is_trivially_destructible(_Tp)) + { + } +}; + +template <class _Tp> +class unique_ptr { +public: + unique_ptr(void* __p) {} + ~unique_ptr() {} +}; + +} + +//--- data.cppm +module; +#include "foo.h" +export module data; +export namespace std { + using std::unique_ptr; + using std::expected; +} + +export std::expected<std::unique_ptr<int>> parse() { + return std::unique_ptr<int>(nullptr); +} + +//--- main.cpp +// expected-no-diagnostics +import data; + +int main(int argc, const char *argv[]) { + std::expected<std::unique_ptr<int>> result = parse(); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits