r330153 - Revert "[CodeGen] Fix a crash that occurs when a non-trivial C struct with a"
Akira Hatanaka via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 16 12:53:59 PDT 2018
Author: ahatanak
Date: Mon Apr 16 12:53:59 2018
New Revision: 330153
URL: http://llvm.org/viewvc/llvm-project?rev=330153&view=rev
Log:
Revert "[CodeGen] Fix a crash that occurs when a non-trivial C struct with a"
This reverts commit r330151, which caused bots to fail.
Modified:
cfe/trunk/lib/CodeGen/CGNonTrivialStruct.cpp
cfe/trunk/test/CodeGenObjC/strong-in-c-struct.m
Modified: cfe/trunk/lib/CodeGen/CGNonTrivialStruct.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGNonTrivialStruct.cpp?rev=330153&r1=330152&r2=330153&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGNonTrivialStruct.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGNonTrivialStruct.cpp Mon Apr 16 12:53:59 2018
@@ -21,11 +21,10 @@ using namespace clang;
using namespace CodeGen;
// Return the size of a field in number of bits.
-static uint64_t getFieldSize(const FieldDecl *FD, QualType FT,
- ASTContext &Ctx) {
- if (FD && FD->isBitField())
+static uint64_t getFieldSize(const FieldDecl *FD, ASTContext &Ctx) {
+ if (FD->isBitField())
return FD->getBitWidthValue(Ctx);
- return Ctx.getTypeSize(FT);
+ return Ctx.getTypeSize(FD->getType());
}
namespace {
@@ -188,7 +187,7 @@ struct CopyStructVisitor : StructVisitor
Ts... Args) {
assert(!FT.isVolatileQualified() && "volatile field not expected");
ASTContext &Ctx = asDerived().getContext();
- uint64_t FieldSize = getFieldSize(FD, FT, Ctx);
+ uint64_t FieldSize = getFieldSize(FD, Ctx);
// Ignore zero-sized fields.
if (FieldSize == 0)
@@ -337,7 +336,7 @@ struct GenBinaryFuncName : CopyStructVis
uint64_t OffsetInBits =
this->Ctx.toBits(CurStackOffset) + this->getFieldOffsetInBits(FD);
this->appendStr("_tv" + llvm::to_string(OffsetInBits) + "w" +
- llvm::to_string(getFieldSize(FD, FT, this->Ctx)));
+ llvm::to_string(getFieldSize(FD, this->Ctx)));
}
};
@@ -596,25 +595,16 @@ struct GenBinaryFunc : CopyStructVisitor
template <class... Ts>
void visitVolatileTrivial(QualType FT, const FieldDecl *FD, CharUnits Offset,
std::array<Address, 2> Addrs) {
- LValue DstLV, SrcLV;
- if (FD) {
- QualType RT = QualType(FD->getParent()->getTypeForDecl(), 0);
- llvm::PointerType *PtrTy = this->CGF->ConvertType(RT)->getPointerTo();
- Address DstAddr = this->getAddrWithOffset(Addrs[DstIdx], Offset);
- LValue DstBase = this->CGF->MakeAddrLValue(
- this->CGF->Builder.CreateBitCast(DstAddr, PtrTy), FT);
- DstLV = this->CGF->EmitLValueForField(DstBase, FD);
- Address SrcAddr = this->getAddrWithOffset(Addrs[SrcIdx], Offset);
- LValue SrcBase = this->CGF->MakeAddrLValue(
- this->CGF->Builder.CreateBitCast(SrcAddr, PtrTy), FT);
- SrcLV = this->CGF->EmitLValueForField(SrcBase, FD);
- } else {
- llvm::PointerType *Ty = this->CGF->ConvertType(FT)->getPointerTo();
- Address DstAddr = this->CGF->Builder.CreateBitCast(Addrs[DstIdx], Ty);
- Address SrcAddr = this->CGF->Builder.CreateBitCast(Addrs[SrcIdx], Ty);
- DstLV = this->CGF->MakeAddrLValue(DstAddr, FT);
- SrcLV = this->CGF->MakeAddrLValue(SrcAddr, FT);
- }
+ QualType RT = QualType(FD->getParent()->getTypeForDecl(), 0);
+ llvm::PointerType *PtrTy = this->CGF->ConvertType(RT)->getPointerTo();
+ Address DstAddr = this->getAddrWithOffset(Addrs[DstIdx], Offset);
+ LValue DstBase = this->CGF->MakeAddrLValue(
+ this->CGF->Builder.CreateBitCast(DstAddr, PtrTy), FT);
+ LValue DstLV = this->CGF->EmitLValueForField(DstBase, FD);
+ Address SrcAddr = this->getAddrWithOffset(Addrs[SrcIdx], Offset);
+ LValue SrcBase = this->CGF->MakeAddrLValue(
+ this->CGF->Builder.CreateBitCast(SrcAddr, PtrTy), FT);
+ LValue SrcLV = this->CGF->EmitLValueForField(SrcBase, FD);
RValue SrcVal = this->CGF->EmitLoadOfLValue(SrcLV, SourceLocation());
this->CGF->EmitStoreThroughLValue(SrcVal, DstLV);
}
Modified: cfe/trunk/test/CodeGenObjC/strong-in-c-struct.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/strong-in-c-struct.m?rev=330153&r1=330152&r2=330153&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenObjC/strong-in-c-struct.m (original)
+++ cfe/trunk/test/CodeGenObjC/strong-in-c-struct.m Mon Apr 16 12:53:59 2018
@@ -70,11 +70,6 @@ typedef struct {
volatile char i6;
} Bitfield1;
-typedef struct {
- id x;
- volatile int a[16];
-} VolatileArray ;
-
#endif
#ifdef USESTRUCT
@@ -545,17 +540,4 @@ void test_strong_in_union() {
U t;
}
-// CHECK: define void @test_copy_constructor_VolatileArray(
-// CHECK: call void @__copy_constructor_8_8_s0_AB8s4n16_tv64w32_AE(
-
-// CHECK: define linkonce_odr hidden void @__copy_constructor_8_8_s0_AB8s4n16_tv64w32_AE(
-// CHECK: %[[V12:.*]] = bitcast i8** %{{.*}} to i32*
-// CHECK: %[[V13:.*]] = bitcast i8** %{{.*}} to i32*
-// CHECK: %[[V14:.*]] = load volatile i32, i32* %[[V13]], align 4
-// CHECK: store volatile i32 %[[V14]], i32* %[[V12]], align 4
-
-void test_copy_constructor_VolatileArray(VolatileArray *a) {
- VolatileArray t = *a;
-}
-
#endif /* USESTRUCT */
More information about the cfe-commits
mailing list