From ad4648afa139b2044ce5e1ff86e73319b3b633f7 Mon Sep 17 00:00:00 2001 From: Billy Moses Date: Fri, 27 Mar 2026 03:09:15 +0000 Subject: [PATCH] Error if inttoptr during sret/root movement --- enzyme/Enzyme/Utils.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/enzyme/Enzyme/Utils.cpp b/enzyme/Enzyme/Utils.cpp index 6ffb42c296d..aee0032740f 100644 --- a/enzyme/Enzyme/Utils.cpp +++ b/enzyme/Enzyme/Utils.cpp @@ -4750,9 +4750,28 @@ llvm::Value *moveSRetToFromRoots(llvm::IRBuilder<> &B, llvm::Type *jltype, } case SRetRootMovement::SRetValueToRootPointer: { Value *outloc = GradientUtils::extractMeta(B, sret, path); - outloc = B.CreatePointerCast( - outloc, PointerType::get(StructType::get(outloc->getContext(), {}), - Tracked)); + if (!outloc->getType()->isPointerTy()) { + if (CustomErrorHandler) { + std::string str; + llvm::raw_string_ostream ss(str); + ss << "Illegal unboxed parameter in moveSRetToFromRoots. Expected " + "pointer type, got: " + << *outloc->getType(); + CustomErrorHandler(ss.str().c_str(), wrap(outloc), + ErrorType::InternalError, nullptr, nullptr, + wrap(&B)); + } else { + llvm::errs() << "Illegal unboxed parameter in moveSRetToFromRoots. " + "Expected pointer type, got: " + << *outloc->getType() << "\n"; + llvm_unreachable("Attempted to root unboxed aggregate element " + "which is an integer instead of pointer"); + } + } else { + outloc = B.CreatePointerCast( + outloc, PointerType::get( + StructType::get(outloc->getContext(), {}), Tracked)); + } B.CreateStore(outloc, loc); break; }