diff options
| author | Eli Friedman <efriedma@quicinc.com> | 2024-09-24 20:31:54 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-24 20:31:54 -0700 |
| commit | d50eaac12f0cdfe27e942290942b06889ab12a8c (patch) | |
| tree | 81cbcd78259adfe621a638f8fc4ce6259ebb0046 /clang/lib/CodeGen/CGExprAgg.cpp | |
| parent | 18b9d49ce3370c012fdd04ec87d854d53293f6a6 (diff) | |
| download | llvm-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.cpp | 40 |
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, |
