Skip to content

Commit e2ff40c

Browse files
committed
[CHERI][clang] Require the preserve tags argument
This ensures that we don't accidentally regress code generation when merging from upstream.
1 parent 68a95b9 commit e2ff40c

File tree

4 files changed

+27
-19
lines changed

4 files changed

+27
-19
lines changed

clang/lib/CodeGen/CGBuilder.h

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -283,37 +283,33 @@ class CGBuilderTy : public CGBuilderBaseTy {
283283
}
284284

285285
using CGBuilderBaseTy::CreateMemCpy;
286-
llvm::CallInst *CreateMemCpy(
287-
Address Dest, Address Src, llvm::Value *Size,
288-
llvm::PreserveCheriTags PreserveTags = llvm::PreserveCheriTags::TODO,
289-
bool IsVolatile = false) {
286+
llvm::CallInst *CreateMemCpy(Address Dest, Address Src, llvm::Value *Size,
287+
llvm::PreserveCheriTags PreserveTags,
288+
bool IsVolatile = false) {
290289
return CreateMemCpy(Dest.getPointer(), Dest.getAlignment().getAsAlign(),
291290
Src.getPointer(), Src.getAlignment().getAsAlign(), Size,
292291
PreserveTags, IsVolatile);
293292
}
294-
llvm::CallInst *CreateMemCpy(
295-
Address Dest, Address Src, uint64_t Size,
296-
llvm::PreserveCheriTags PreserveTags = llvm::PreserveCheriTags::TODO,
297-
bool IsVolatile = false) {
293+
llvm::CallInst *CreateMemCpy(Address Dest, Address Src, uint64_t Size,
294+
llvm::PreserveCheriTags PreserveTags,
295+
bool IsVolatile = false) {
298296
return CreateMemCpy(Dest.getPointer(), Dest.getAlignment().getAsAlign(),
299297
Src.getPointer(), Src.getAlignment().getAsAlign(), Size,
300298
PreserveTags, IsVolatile);
301299
}
302300

303301
using CGBuilderBaseTy::CreateMemCpyInline;
304-
llvm::CallInst *CreateMemCpyInline(
305-
Address Dest, Address Src, uint64_t Size,
306-
llvm::PreserveCheriTags PreserveTags = llvm::PreserveCheriTags::TODO) {
302+
llvm::CallInst *CreateMemCpyInline(Address Dest, Address Src, uint64_t Size,
303+
llvm::PreserveCheriTags PreserveTags) {
307304
return CreateMemCpyInline(
308305
Dest.getPointer(), Dest.getAlignment().getAsAlign(), Src.getPointer(),
309306
Src.getAlignment().getAsAlign(), getInt64(Size), PreserveTags);
310307
}
311308

312309
using CGBuilderBaseTy::CreateMemMove;
313-
llvm::CallInst *CreateMemMove(
314-
Address Dest, Address Src, llvm::Value *Size,
315-
llvm::PreserveCheriTags PreserveTags = llvm::PreserveCheriTags::TODO,
316-
bool IsVolatile = false) {
310+
llvm::CallInst *CreateMemMove(Address Dest, Address Src, llvm::Value *Size,
311+
llvm::PreserveCheriTags PreserveTags,
312+
bool IsVolatile = false) {
317313
return CreateMemMove(Dest.getPointer(), Dest.getAlignment().getAsAlign(),
318314
Src.getPointer(), Src.getAlignment().getAsAlign(),
319315
Size, PreserveTags, IsVolatile);

clang/lib/CodeGen/CGCall.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2763,10 +2763,13 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
27632763
// FIXME: We should have a common utility for generating an aggregate
27642764
// copy.
27652765
CharUnits Size = getContext().getTypeSizeInChars(Ty);
2766+
assert(!CGM.getTarget().areAllPointersCapabilities() &&
2767+
"Missing test case for llvm::PreserveCheriTags");
27662768
Builder.CreateMemCpy(
27672769
AlignedTemp.getPointer(), AlignedTemp.getAlignment().getAsAlign(),
27682770
ParamAddr.getPointer(), ParamAddr.getAlignment().getAsAlign(),
2769-
llvm::ConstantInt::get(IntPtrTy, Size.getQuantity()));
2771+
llvm::ConstantInt::get(IntPtrTy, Size.getQuantity()),
2772+
llvm::PreserveCheriTags::TODO);
27702773
V = AlignedTemp;
27712774
}
27722775
ArgVals.push_back(ParamValue::forIndirect(V));
@@ -2969,7 +2972,10 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI,
29692972
}
29702973

29712974
if (SrcSize > DstSize) {
2972-
Builder.CreateMemCpy(Ptr, AddrToStoreInto, DstSize);
2975+
assert(!CGM.getTarget().areAllPointersCapabilities() &&
2976+
"Missing test case for llvm::PreserveCheriTags");
2977+
Builder.CreateMemCpy(Ptr, AddrToStoreInto, DstSize,
2978+
llvm::PreserveCheriTags::TODO);
29732979
}
29742980

29752981
} else {
@@ -5018,10 +5024,13 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
50185024
// of the destination type to allow loading all of it. The bits past
50195025
// the source value are left undef.
50205026
if (SrcSize < DstSize) {
5027+
assert(!CGM.getTarget().areAllPointersCapabilities() &&
5028+
"Missing test case for llvm::PreserveCheriTags");
50215029
Address TempAlloca
50225030
= CreateTempAlloca(STy, Src.getAlignment(),
50235031
Src.getName() + ".coerce");
5024-
Builder.CreateMemCpy(TempAlloca, Src, SrcSize);
5032+
Builder.CreateMemCpy(TempAlloca, Src, SrcSize,
5033+
llvm::PreserveCheriTags::TODO);
50255034
Src = TempAlloca;
50265035
} else {
50275036
Src = Builder.CreateBitCast(Src,

clang/lib/CodeGen/CGExprCXX.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,8 @@ static void EmitNullBaseClassInitialization(CodeGenFunction &CGF,
561561
CharUnits StoreOffset = Store.first;
562562
CharUnits StoreSize = Store.second;
563563
llvm::Value *StoreSizeVal = CGF.CGM.getSize(StoreSize);
564+
assert(!CGF.getTarget().areAllPointersCapabilities() &&
565+
"Missing test case for llvm::PreserveCheriTags");
564566
CGF.Builder.CreateMemCpy(
565567
CGF.Builder.CreateConstInBoundsByteGEP(DestPtr, StoreOffset),
566568
CGF.Builder.CreateConstInBoundsByteGEP(SrcPtr, StoreOffset),

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4832,7 +4832,8 @@ static void emitDepobjElements(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
48324832
Address(CGF.Builder.CreateGEP(DependenciesArray.getElementType(),
48334833
DependenciesArray.getPointer(), Pos),
48344834
DependenciesArray.getAlignment());
4835-
CGF.Builder.CreateMemCpy(DepAddr, Base.getAddress(CGF), Size);
4835+
CGF.Builder.CreateMemCpy(DepAddr, Base.getAddress(CGF), Size,
4836+
llvm::PreserveCheriTags::TODO);
48364837

48374838
// Increase pos.
48384839
// pos += size;

0 commit comments

Comments
 (0)