[clang] 99e6ef3 - [clang][NFC] Add missing placement-new after Allocate() calls (#68382)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 6 04:50:11 PDT 2023
Author: Vlad Serebrennikov
Date: 2023-10-06T07:50:07-04:00
New Revision: 99e6ef3e7c6e342beb2ad6b5e64d1e5fd2f24d2b
URL: https://github.com/llvm/llvm-project/commit/99e6ef3e7c6e342beb2ad6b5e64d1e5fd2f24d2b
DIFF: https://github.com/llvm/llvm-project/commit/99e6ef3e7c6e342beb2ad6b5e64d1e5fd2f24d2b.diff
LOG: [clang][NFC] Add missing placement-new after Allocate() calls (#68382)
While working on #68377 inspecting `Allocate()` calls, I found out that
there are couple of places where we forget to use placement-new to
create objects in the allocated memory.
Added:
Modified:
clang/lib/AST/DeclCXX.cpp
clang/lib/AST/DeclObjC.cpp
clang/lib/Serialization/ASTReaderDecl.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp
index 42bab4ed51b7290..a92b788366434ce 100644
--- a/clang/lib/AST/DeclCXX.cpp
+++ b/clang/lib/AST/DeclCXX.cpp
@@ -1484,7 +1484,8 @@ void CXXRecordDecl::setCaptures(ASTContext &Context,
if (Captures[I].isExplicit())
++Data.NumExplicitCaptures;
- *ToCapture++ = Captures[I];
+ new (ToCapture) LambdaCapture(Captures[I]);
+ ToCapture++;
}
if (!lambdaIsDefaultConstructibleAndAssignable())
diff --git a/clang/lib/AST/DeclObjC.cpp b/clang/lib/AST/DeclObjC.cpp
index e934a81d086e3c0..e1eef2dbd9c3d28 100644
--- a/clang/lib/AST/DeclObjC.cpp
+++ b/clang/lib/AST/DeclObjC.cpp
@@ -931,8 +931,8 @@ void ObjCMethodDecl::setParamsAndSelLocs(ASTContext &C,
unsigned Size = sizeof(ParmVarDecl *) * NumParams +
sizeof(SourceLocation) * SelLocs.size();
ParamsAndSelLocs = C.Allocate(Size);
- std::copy(Params.begin(), Params.end(), getParams());
- std::copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
+ std::uninitialized_copy(Params.begin(), Params.end(), getParams());
+ std::uninitialized_copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
}
void ObjCMethodDecl::getSelectorLocs(
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp
index d553b3c6d78dedc..6a2f607d916c472 100644
--- a/clang/lib/Serialization/ASTReaderDecl.cpp
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp
@@ -2002,13 +2002,16 @@ void ASTDeclReader::ReadCXXDefinitionData(
case LCK_StarThis:
case LCK_This:
case LCK_VLAType:
- *ToCapture++ = Capture(Loc, IsImplicit, Kind, nullptr,SourceLocation());
+ new (ToCapture)
+ Capture(Loc, IsImplicit, Kind, nullptr, SourceLocation());
+ ToCapture++;
break;
case LCK_ByCopy:
case LCK_ByRef:
auto *Var = readDeclAs<VarDecl>();
SourceLocation EllipsisLoc = readSourceLocation();
- *ToCapture++ = Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
+ new (ToCapture) Capture(Loc, IsImplicit, Kind, Var, EllipsisLoc);
+ ToCapture++;
break;
}
}
More information about the cfe-commits
mailing list