diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-10-13 01:55:36 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-10-13 01:55:36 +0000 |
commit | 5b34958b46dc14267d1b06099c3bd43e748716fc (patch) | |
tree | c3e9bded9164d23dfcc44b90914d040d087e18e5 /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | ad38fbffad842c3baf4589139271d16d14af0357 (diff) | |
download | bcm5719-llvm-5b34958b46dc14267d1b06099c3bd43e748716fc.tar.gz bcm5719-llvm-5b34958b46dc14267d1b06099c3bd43e748716fc.zip |
Support for destroying operator delete, per C++2a proposal P0722.
This feature is not (yet) approved by the C++ committee, so this is liable to
be reverted or significantly modified based on committee feedback.
No functionality change intended for existing code (a new type must be defined
in namespace std to take advantage of this feature).
llvm-svn: 315662
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 1283b006dfb..c3c6c3e3d88 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -1901,9 +1901,12 @@ void ASTDeclReader::VisitCXXDestructorDecl(CXXDestructorDecl *D) { if (auto *OperatorDelete = ReadDeclAs<FunctionDecl>()) { auto *Canon = cast<CXXDestructorDecl>(D->getCanonicalDecl()); + auto *ThisArg = Record.readExpr(); // FIXME: Check consistency if we have an old and new operator delete. - if (!Canon->OperatorDelete) + if (!Canon->OperatorDelete) { Canon->OperatorDelete = OperatorDelete; + Canon->OperatorDeleteThisArg = ThisArg; + } } } @@ -4113,9 +4116,12 @@ void ASTDeclReader::UpdateDecl(Decl *D, // record. auto *Del = ReadDeclAs<FunctionDecl>(); auto *First = cast<CXXDestructorDecl>(D->getCanonicalDecl()); + auto *ThisArg = Record.readExpr(); // FIXME: Check consistency if we have an old and new operator delete. - if (!First->OperatorDelete) + if (!First->OperatorDelete) { First->OperatorDelete = Del; + First->OperatorDeleteThisArg = ThisArg; + } break; } |