小编Ben*_*ker的帖子

为什么 clang sanitizer 认为无符号数的左移是未定义的?

我知道SO上有很多类似的问题。在称其为重复之前请仔细阅读。如果是的话,我很乐意获得相关问题的参考。

在我看来,clang 消毒程序正在抱怨无符号数字的完全有效的左移。

int main()
{
    unsigned int x = 0x12345678;
    x = x << 12;
    return 15 & x;
}
Run Code Online (Sandbox Code Playgroud)

编译如下:

clang -fsanitize=undefined,integer shift-undefined.cpp -lubsan -lstdc++

结果出现此错误:

shift-undefined.cpp:4:11: runtime error: left shift of 305419896 by 12 places cannot be represented in type 'unsigned int'

我知道有些位会被遗忘,但我认为这对于无符号数字是合法的。是什么赋予了?

c++ sanitizer undefined-behavior

4
推荐指数
1
解决办法
587
查看次数

标签 统计

c++ ×1

sanitizer ×1

undefined-behavior ×1