From ce621fdb2e0ac946424a3d6616f79a6e0f4bf9ea Mon Sep 17 00:00:00 2001 From: "GitHub Actions[bot]" <> Date: Tue, 27 Jan 2026 06:27:18 +0000 Subject: [PATCH] Bot: Update dependencies --- .references/spirv-tools | 2 +- spirv-tools/source/val/validate_cfg.cpp | 32 +++++++++++++++++++++++ spirv-tools/spirv-tools/build-version.inc | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/.references/spirv-tools b/.references/spirv-tools index bcb136c..11dd75d 100644 --- a/.references/spirv-tools +++ b/.references/spirv-tools @@ -1 +1 @@ -77a096c +d3f9ef1 diff --git a/spirv-tools/source/val/validate_cfg.cpp b/spirv-tools/source/val/validate_cfg.cpp index b7e570d..1bd4604 100644 --- a/spirv-tools/source/val/validate_cfg.cpp +++ b/spirv-tools/source/val/validate_cfg.cpp @@ -352,6 +352,34 @@ spv_result_t ValidateLoopMerge(ValidationState_t& _, const Instruction* inst) { return SPV_SUCCESS; } +spv_result_t ValidateLifetime(ValidationState_t& _, const Instruction* inst) { + const uint32_t pointer_id = _.GetOperandTypeId(inst, 0); + const Instruction* pointer_inst = _.FindDef(pointer_id); + if (pointer_inst->opcode() != spv::Op::OpTypePointer) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Op" << spvOpcodeString(inst->opcode()) + << " pointer operand type must be a OpTypePointer."; + } else if (pointer_inst->GetOperandAs(1) != + spv::StorageClass::Function) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Op" << spvOpcodeString(inst->opcode()) + << " pointer operand must be in the Function storage class."; + } + + const uint32_t size = inst->GetOperandAs(1); + if (size != 0) { + if (!_.HasCapability(spv::Capability::Addresses)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Op" << spvOpcodeString(inst->opcode()) + << " size is non-zero, but the Addresses Capability is not " + "declared."; + } + // TODO - "Size must be 0 if Pointer is a pointer to a non-void type" + } + + return SPV_SUCCESS; +} + } // namespace void printDominatorList(const BasicBlock& b) { @@ -1268,6 +1296,10 @@ spv_result_t ControlFlowPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpLoopMerge: if (auto error = ValidateLoopMerge(_, inst)) return error; break; + case spv::Op::OpLifetimeStart: + case spv::Op::OpLifetimeStop: + if (auto error = ValidateLifetime(_, inst)) return error; + break; default: break; } diff --git a/spirv-tools/spirv-tools/build-version.inc b/spirv-tools/spirv-tools/build-version.inc index 7155848..1b4b49b 100644 --- a/spirv-tools/spirv-tools/build-version.inc +++ b/spirv-tools/spirv-tools/build-version.inc @@ -1 +1 @@ -"v2026.1", "SPIRV-Tools v2026.1 v2026.1.rc1-2-g77a096c9" +"v2026.1", "SPIRV-Tools v2026.1 v2026.1-4-gd3f9ef11"