已关闭
pytorch_npu_helper.hpp 头文件 include guard 宏名不匹配导致 ODR 重定义风险 #2
崇理战队创建于  8月13日关闭于  8月18日
崇理战队
8月13日 创建

描述

ops-rec/ascendc/common/torch_plugin/pytorch_npu_helper.hpp#ifndef 保护的宏名与 #define 定义的宏名不一致。#ifndef PYTORCH_NPU_HELPER_HPP_ 使用一个下划线结尾,而 #define PYTORCH_NPU_HELPER_HPP_ssss 多了四个额外字母 's'。这导致 #ifndef 永远通过,头文件保护失效。若该头文件在同一编译单元被多次包含,将触发重定义编译错误。

问题代码

// 文件: ops-rec/ascendc/common/torch_plugin/pytorch_npu_helper.hpp (约第 16-17 行)
#ifndef PYTORCH_NPU_HELPER_HPP_
#define PYTORCH_NPU_HELPER_HPP_ssss

问题分析

头文件包含大量 inline 函数、constexpr 数组、typedef 和模板元编程代码(包括 kATenScalarTypeToAclDataTypeTableGetOpApiFuncAddrEXEC_NPU_CMD 宏、各种 Release 重载等)。由于 #ifndef#define 的宏名不同,预处理器无法检测到重复包含。

虽然当前编译配置下各 torch_extension 插件文件各自只 include 它一次所以未触发问题,但属于典型的 typo bug。一旦有人将该头文件引入到另一个被多处 include 的翻译单元中,就会导致 hard compilation error。

该头文件被多个算子插件共用(disentangle_attention、ln_mul 等),随着算子数量增加,触发概率持续增大。

建议修复

统一宏名:

#ifndef PYTORCH_NPU_HELPER_HPP_
#define PYTORCH_NPU_HELPER_HPP_

或者在定义时使用完全一致的名称。

likedislike
崇理战队
8月13日 添加了label:bug
xiangjie10
8月13日 评论:

👋 您好,感谢向 ops-rec 提交 Issue!
🎉 我们已收到您的反馈,感谢你对开源社区的支持!

📅 处理时效 维护团队将在工作日 24 小时内查看并回复您的问题。
🔍 自助排查(推荐优先查看) 在等待回复期间,您可以先查阅仓库README以及历史 Issue 中相似问题的解决方案,多数问题可快速解决。
💡 为了更快定位问题,请您确保 Issue 包含:

  • 清晰的问题描述
  • 可复现的操作步骤
  • 相关日志、截图或环境信息
    我们会尽快跟进,感谢您的理解与配合!
likedislike
xiangjie10
8月13日 评论:

/label add triaged

likedislike
ascend-robotascend-robot成员
8月13日 添加了label:triaged
QianZH97
QianZH97成员
8月14日 评论:

开发者您好,这块是问题,我们后续会纠正这行代码,感谢您的检视。

likedislike
FangXq成员
8月17日 评论:

/label add feature

likedislike
ascend-robotascend-robot成员
8月17日 添加了label:feature
QianZH97QianZH97成员
8月18日 关联了pull request:[fix] 修改README格式及对SOC型号、triton_ascend版本的配套说明
ascend-robotascend-robot成员
8月18日 关闭了 issue
ascend-robotascend-robot成员
8月18日 添加了label:resolved
taoqiuyu1998taoqiuyu1998成员
12 天前 关联了看板:MindSDK版本issue看板
taoqiuyu1998taoqiuyu1998成员
11 天前 issue状态由 TODO 改变为 DONE