Col*_*len 2 optimization clang
我一直在努力追查铿锵声中的一个错误,我认为我对它的再现相当微小.这是我的计划:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define x_Is_Digit(x) isdigit((unsigned char) (x))
void Odd_Behavior(char * version)
{
char * ptr, *tmp;
for (ptr = version; x_Is_Digit(*ptr); ptr++);
ptr++;
for (tmp = ptr; x_Is_Digit(*ptr); ptr++);
if (ptr == tmp)
printf("%08x == %08x! Really?\n", ptr, tmp);
}
int main()
{
char buffer[100];
strcpy(buffer, "3.8a");
Odd_Behavior(buffer);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
当我用优化编译它时,在Xcode下载包含的clang("Apple clang 2.1")中:
clang++ -Os optimizebug.cpp
Run Code Online (Sandbox Code Playgroud)
然后运行它报告:
6b6f2be3 == 6b6f2be2! Really?
Run Code Online (Sandbox Code Playgroud)
至少可以说,这让我觉得有些奇怪.如果我删除x_Is_Digit中的(unsigned char)强制转换,它可以正常工作.
我是否遇到过clang中的错误?或者我在这里做了什么导致某种未定义的行为?如果我用-O0编译它,我不会遇到问题.
对我来说当然看起来像个错误.Clang主线不显示这个(至少在darwin/x86-64上).请在llvm.org/bugs上提交错误信息,详细说明如何重现这一点.堆栈溢出不是报告编译器错误的好地方:)
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |