aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGExprAgg.cpp
diff options
context:
space:
mode:
authorEli Friedman <efriedma@quicinc.com>2024-09-24 20:31:54 -0700
committerGitHub <noreply@github.com>2024-09-24 20:31:54 -0700
commitd50eaac12f0cdfe27e942290942b06889ab12a8c (patch)
tree81cbcd78259adfe621a638f8fc4ce6259ebb0046 /clang/lib/CodeGen/CGExprAgg.cpp
parent18b9d49ce3370c012fdd04ec87d854d53293f6a6 (diff)
downloadllvm-d50eaac12f0cdfe27e942290942b06889ab12a8c.zip
llvm-d50eaac12f0cdfe27e942290942b06889ab12a8c.tar.gz
llvm-d50eaac12f0cdfe27e942290942b06889ab12a8c.tar.bz2
Revert "[clang][CodeGen] Zero init unspecified fields in initializers in C" (#109898)
Reverts llvm/llvm-project#97121 Causing failures on LNT bots; log shows a crash in ConstStructBuilder::BuildStruct.
Diffstat (limited to 'clang/lib/CodeGen/CGExprAgg.cpp')
-rw-r--r--clang/lib/CodeGen/CGExprAgg.cpp40
1 files changed, 2 insertions, 38 deletions
diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp
index 43f3bcc..bbfc667 100644
--- a/clang/lib/CodeGen/CGExprAgg.cpp
+++ b/clang/lib/CodeGen/CGExprAgg.cpp
@@ -1698,17 +1698,6 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
// Prepare a 'this' for CXXDefaultInitExprs.
CodeGenFunction::FieldConstructionScope FCS(CGF, Dest.getAddress());
- const bool ZeroInitPadding =
- CGF.CGM.shouldZeroInitPadding() && !Dest.isZeroed();
- const Address BaseLoc = Dest.getAddress().withElementType(CGF.Int8Ty);
- auto DoZeroInitPadding = [&](CharUnits Offset, CharUnits Size) {
- if (Size.isPositive()) {
- Address Loc = CGF.Builder.CreateConstGEP(BaseLoc, Offset.getQuantity());
- llvm::Constant *SizeVal = CGF.Builder.getInt64(Size.getQuantity());
- CGF.Builder.CreateMemSet(Loc, CGF.Builder.getInt8(0), SizeVal, false);
- }
- };
-
if (record->isUnion()) {
// Only initialize one field of a union. The field itself is
// specified by the initializer list.
@@ -1733,37 +1722,17 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
if (NumInitElements) {
// Store the initializer into the field
EmitInitializationToLValue(InitExprs[0], FieldLoc);
- if (ZeroInitPadding) {
- CharUnits TotalSize =
- Dest.getPreferredSize(CGF.getContext(), DestLV.getType());
- CharUnits FieldSize =
- CGF.getContext().getTypeSizeInChars(FieldLoc.getType());
- DoZeroInitPadding(FieldSize, TotalSize - FieldSize);
- }
} else {
// Default-initialize to null.
- if (ZeroInitPadding)
- EmitNullInitializationToLValue(DestLV);
- else
- EmitNullInitializationToLValue(FieldLoc);
+ EmitNullInitializationToLValue(FieldLoc);
}
+
return;
}
// Here we iterate over the fields; this makes it simpler to both
// default-initialize fields and skip over unnamed fields.
- const ASTRecordLayout &Layout = CGF.getContext().getASTRecordLayout(record);
- CharUnits SizeSoFar = CharUnits::Zero();
for (const auto *field : record->fields()) {
- if (ZeroInitPadding) {
- unsigned FieldNo = field->getFieldIndex();
- CharUnits Offset =
- CGF.getContext().toCharUnitsFromBits(Layout.getFieldOffset(FieldNo));
- DoZeroInitPadding(SizeSoFar, Offset - SizeSoFar);
- CharUnits FieldSize =
- CGF.getContext().getTypeSizeInChars(field->getType());
- SizeSoFar = Offset + FieldSize;
- }
// We're done once we hit the flexible array member.
if (field->getType()->isIncompleteArrayType())
break;
@@ -1805,11 +1774,6 @@ void AggExprEmitter::VisitCXXParenListOrInitListExpr(
}
}
}
- if (ZeroInitPadding) {
- CharUnits TotalSize =
- Dest.getPreferredSize(CGF.getContext(), DestLV.getType());
- DoZeroInitPadding(SizeSoFar, TotalSize - SizeSoFar);
- }
}
void AggExprEmitter::VisitArrayInitLoopExpr(const ArrayInitLoopExpr *E,