rjmccall added a comment. In https://reviews.llvm.org/D26196#589493, @yaxunl wrote:
> Fixed list initialization of large struct which are mostly initialized by 0 > through memset. > Added tests for casting literal 0 and non-literal integer to pointer. > > There are many more places need to be changed. I am wondering if it makes > sense to split this feature into multiple pieces, e.g. for C and OpenCL, C++, > Objective-C, OpenMP, incrementally. It's fine to split it up. Note that at least some of the Objective-C code doesn't need to be updated, because Objective-C object pointers can't be in an alternate address space. ================ Comment at: lib/CodeGen/CGExprConstant.cpp:1645 if (const RecordType *RT = T->getAs<RecordType>()) { - const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl()); + const RecordDecl *RD = cast<RecordDecl>(RT->getDecl()); return ::EmitNullConstant(*this, RD, /*complete object*/ true); ---------------- The cast<> here is now unnecessary. ================ Comment at: lib/CodeGen/CodeGenModule.h:1159 + /// Does null pointer have zero value. + bool isNullPtrZero(llvm::PointerType *T, QualType QT); + ---------------- This can just take QT; it's not optimized by taking T as well, and in some cases you wouldn't otherwise need to compute that. ================ Comment at: lib/CodeGen/TargetInfo.cpp:7040 + auto AS = PT->getAddressSpace(); + return AS != Ctx.getTargetAddressSpace(LangAS::opencl_local) && AS != 0; +} ---------------- This check is definitely not correct; this function needs to return true when AS == 0, right? Also, you should really just be checking QT.getAddressSpace(). https://reviews.llvm.org/D26196 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits