工具与软件:
您好!
如果只有周声明(没有弱实现)、则在优化级别2时(可能会看到)"weak" none void 函数的优化时、TI clang 编译器生成的代码可能存在问题。 在 TI Clang v.2.1.3中找到、但它也可用于 v.3.2.2 (尚未使用 v.4进行检查)。
我正在发送一个示例来向您展示问题–使用优化0生成变量 r 的值为0 (如果是优化2、则变量 r 错误地设置为1)。
此致、
Dimitar
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
您好!
如果只有周声明(没有弱实现)、则在优化级别2时(可能会看到)"weak" none void 函数的优化时、TI clang 编译器生成的代码可能存在问题。 在 TI Clang v.2.1.3中找到、但它也可用于 v.3.2.2 (尚未使用 v.4进行检查)。
我正在发送一个示例来向您展示问题–使用优化0生成变量 r 的值为0 (如果是优化2、则变量 r 错误地设置为1)。
此致、
Dimitar
很抱歉、我花了一段时间才理解本例中的行为。 我认为最好从编译器生成的汇编代码层面对其进行解释。
在编译期间、在链接之前、编译器会生成...
bl checkX
在该假设后立即指示 R0 的结果 复选框 .
将其识别出来 复选框 没有定义、会改变它 BL 指令进入...
nop nop
这是唯一的变化。 注意优化级别如何不起作用。
因此、当不检查弱函数是否未定义时、在任何优化级别都可能出现意外结果。 只有在您的特定情况下、才会发生这样的情况: -O0 得出预期结果、和 -O2 可得出不同的结果。
谢谢。此致、
-George.