已关闭
[Bug] dynamic_quant_base.h 空 else 块导致变量未初始化即使用 #2077
shermanrowena创建于 4月15日关闭于 4月30日
4月15日 添加了label:bug
chenqi317
4月24日 评论:
4月24日 评论:
loopCnt 默认为0,不存在未初始化的动作。 代码可以去掉else{}判断
@zhajianqing123 请安排修改


4月25日 将 liujie12345678 设为负责人
4月25日 移除了负责人 zhajianqing123
4月25日 将 cuijie25 设为负责人
cuijie
4月25日 评论:
4月25日 评论:
已移除else{}判断,loopCnt为0的场景,后续计算均不会有问题 @shermanrowena 请确认,若无问题将关闭此Issue


4月30日 添加了label:Accepted
4月30日 添加了label:resolved
问题描述
在
quant/dynamic_quant/op_kernel/dynamic_quant_base.h的InitSmallShapeParams函数中,当blockIdx >= tilingData_.coreNum时,进入空的 else 块,此后变量multiRowNum、loopCnt、remainRow均未被初始化,但后续第 149 行立即使用了这些变量,导致未定义行为。问题位置
文件:
quant/dynamic_quant/op_kernel/dynamic_quant_base.h,第 130–149 行错误代码
if (blockIdx < tilingData_.headCoreNum) { multiRowNum = tilingData_.multiRowNumHeadCore; loopCnt = rowPerHeadCore / multiRowNum; remainRow = rowPerHeadCore % multiRowNum; } else if (blockIdx >= tilingData_.headCoreNum && blockIdx < tilingData_.coreNum) { multiRowNum = tilingData_.multiRowNumTailCore; loopCnt = rowPerTailCore / multiRowNum; remainRow = rowPerTailCore % multiRowNum; } else { // 空块!multiRowNum/loopCnt/remainRow 未初始化 } sizeHalfLen = (tilingData_.rowLen + FIFTEEN) / SIXTEEN * SIXTEEN; // 后续使用了未初始化的 multiRowNum、loopCnt、remainRow影响
当 blockIdx >= coreNum 时,后续使用
multiRowNum、loopCnt、remainRow的代码行为未定义,可能导致数组越界、死循环或结果错误。修复建议
在 else 块中添加对多余核的早退出逻辑(例如
return;),或初始化变量为安全默认值:} else { return; // blockIdx 超出有效核范围,直接返回 }严重程度
高(未定义行为,可能导致 NPU 卡死或计算结果错误)