已关闭
[Bug-Report|缺陷反馈]: aclnnSinc/aclnnInplaceSinc/aclnnTriangularSolve 用户入参判空返回 561103 而非文档契约 161001 #3359
liuhanwen8创建于  28 天前关闭于  18 天前
liuhanwen8
liuhanwen8
28 天前 创建

Describe the current behavior / 问题描述 (Mandatory / 必填)

aclnnSinc / aclnnInplaceSinc / aclnnTriangularSolve 的用户入参判空分支返回内部错误码 561103(ACLNN_ERR_INNER_NULLPTR),而接口文档明确声明应返回 161001(ACLNN_ERR_PARAM_NULLPTR):

  • math/sinc/op_api/aclnn_sinc.cpp:105:CHECK_RET(CheckNotNull(self, out), ACLNN_ERR_INNER_NULLPTR);
  • math/sinc/op_api/aclnn_sinc.cpp:118:OP_CHECK_NULL(self, return ACLNN_ERR_INNER_NULLPTR);
  • math/triangular_solve/op_host/op_api/aclnn_triangular_solve.cpp:125:CHECK_RET(CheckNotNull(self, A, xOut), ACLNN_ERR_INNER_NULLPTR);

文档契约(两算子文档均声明):

  • math/sinc/docs/aclnnSinc&aclnnInplaceSinc.md 返回码表:ACLNN_ERR_PARAM_NULLPTR 161001 — 传入的 self 或 out 是空指针
  • math/triangular_solve/docs/aclnnTriangularSolve.md 返回码表:ACLNN_ERR_PARAM_NULLPTR 161001 — 传入的 self、A、xOut、mOut 中存在空指针

同族正确对照:math/sin/op_api/aclnn_sin.cpp:74 CHECK_RET(CheckNotNull2Tensor(self, out), ACLNN_ERR_PARAM_NULLPTR);(sinc 与 sin 同属一元数学函数族、检查形态一致,仅错误码不同,差异属遗漏非设计)。族内先例 #2501(aclnnArange 空指针预期 161001 实报 561103,已闭环修复)。

影响:内部错误码泄漏到用户面,按 161001 设计的负向用例/监控漏判,并将「用户入参为空」误归因为框架内部异常。

Environment Information / 环境信息 (Mandatory / 必填)

  • 昇腾硬件型号:Ascend 910_93(npu-smi 显示 Ascend910),单卡
  • CANN 版本:9.2.0
  • 代码基线:ops-math master(2026-09-29)
  • 调用方式:C 直调 aclnn 两段式接口

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

// self/out 为合法 FLOAT{3,4};tsolve 为 self{3,1}、A{3,3}、xOut{3,1}、mOut{3,3}
aclnnSincGetWorkspaceSize(nullptr, out, &ws, &ex);                     // 期望 161001
aclnnInplaceSincGetWorkspaceSize(nullptr, &ws, &ex);                   // 期望 161001
aclnnTriangularSolveGetWorkspaceSize(nullptr, A, false, false, false, xOut, mOut, &ws, &ex);  // 期望 161001

Describe the expected behavior / 预期结果 (Mandatory / 必填)

三处判空分支返回 ACLNN_ERR_PARAM_NULLPTR(161001),与文档返回码表及同族 aclnnSin 一致。

建议修复:aclnn_sinc.cpp:105/118、aclnn_triangular_solve.cpp:125 改返 ACLNN_ERR_PARAM_NULLPTR。

910_93 / CANN 9.2.0 实测:

用例 期望 实测
aclnnSinc self=nullptr 161001 561103
aclnnSinc out=nullptr 161001 561103
aclnnTriangularSolve self=nullptr 161001 561103
对照 aclnnSin self=nullptr 161001 161001
控制组(全合法入参) 0 0(sinc/sin/tsolve 均 0)

注:561102 为 ACLNN_ERR_INNER_NOT_TRANS_EXECUTOR,本问题实际返回码为 561103(ACLNN_ERR_INNER_NULLPTR)。

likedislike
liuhanwen8liuhanwen8
28 天前 添加了label:bug-report
陈思
陈思成员
27 天前 评论:

您好,感谢反馈!

问题分析

已核对 ops-math 固定提交 b6c9f6922c18d42230fd4a993722fef247ef91ac,三处用户 Tensor 入参判空确实返回了 ACLNN_ERR_INNER_NULLPTR(561103):aclnnSinc 的 CheckParams、aclnnInplaceSinc 的 CheckInplaceParams,以及 aclnnTriangularSolve 的 CheckParams。这些状态由 GetWorkspaceSize 原样返回,并非只有日志打印成内部错误码;校验发生在计算任务构建之前,因此问题位于公共 API 参数检查层。Sinc 实现、TriangularSolve 实现

接口文档对这些必需 Tensor 入参为空规定返回 ACLNN_ERR_PARAM_NULLPTR(161001),现有分支与该约定不一致,会影响调用方区分参数错误与内部错误。Sinc 文档、TriangularSolve 文档

处理方向

可行的修正是在上述三处将用户入参判空的返回值改为 ACLNN_ERR_PARAM_NULLPTR,并同步调整对应负向用例;内部临时 Tensor 创建失败等分支仍应保留内部错误码,避免将内部故障误归为用户参数问题。

另外,TriangularSolve 的 mOut 需要单独区分:当前实现允许它为 nullptr,并相应跳过该输出的检查和拷贝,现有用例也期望成功。因此本次必需参数判空应覆盖 self、A、xOut,不能因返回码表列出了 mOut 就把可选输出改成必填;该表述也需要与现有可选语义对齐。我们会继续跟踪相关接口与文档的一致性问题。

likedislike
陈思
陈思成员
27 天前 评论:

/assign tan_xin

likedislike
陈思陈思成员
27 天前 将 tan_xin 设为负责人
CANN-robotCANN-robot成员
18 天前 关闭了 issue
CANN-robotCANN-robot成员
18 天前 添加了label:resolved