================ @@ -2456,6 +2461,139 @@ static RValue EmitHipStdParUnsupportedBuiltin(CodeGenFunction *CGF, return RValue::get(CGF->Builder.CreateCall(UBF, Args)); } +template <class T> +void RecursivelyClearPaddingImpl(CodeGenFunction &CGF, Value *Ptr, QualType Ty, size_t CurrentStartOffset, size_t &RunningOffset, T&& WriteZeroAtOffset); + +template <class T> +void ClearPaddingStruct(CodeGenFunction &CGF, Value *Ptr, QualType Ty, StructType *ST, + size_t CurrentStartOffset, size_t &RunningOffset, T&& WriteZeroAtOffset) { + std::cerr << "\n struct! " << ST->getName().data() << std::endl; + auto SL = CGF.CGM.getModule().getDataLayout().getStructLayout(ST); + + auto R = dyn_cast<CXXRecordDecl>(Ty->getAsRecordDecl()); + if(!R) { + std::cerr << "\n not a CXXRecordDecl" << std::endl; + + } + const ASTRecordLayout &ASTLayout = CGF.getContext().getASTRecordLayout(R); + for (auto Base : R->bases()) { + std::cerr << "\n\n base!" << std::endl; + // Zero padding between base elements. + auto BaseRecord = cast<CXXRecordDecl>(Base.getType()->getAsRecordDecl()); + auto Offset = static_cast<size_t>( + ASTLayout.getBaseClassOffset(BaseRecord).getQuantity()); + // Recursively zero out base classes. + auto Index = SL->getElementContainingOffset(Offset); ---------------- huixie90 wrote:
I removed all the code using LLVM layouts https://github.com/llvm/llvm-project/pull/75371 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits