小编Nik*_*yev的帖子

C未定义的行为.严格别名规则或错误对齐?

我无法解释这个程序的执行行为:

#include <string> 
#include <cstdlib> 
#include <stdio.h>

typedef char u8;
typedef unsigned short u16;

size_t f(u8 *keyc, size_t len)
{
    u16 *key2 = (u16 *) (keyc + 1);
    size_t hash = len;
    len = len / 2;

    for (size_t i = 0; i < len; ++i)
        hash += key2[i];
    return hash;
}

int main()
{
    srand(time(NULL));
    size_t len;
    scanf("%lu", &len);
    u8 x[len];
    for (size_t i = 0; i < len; i++)
        x[i] = rand();

    printf("out %lu\n", f(x, len));
}
Run Code Online (Sandbox Code Playgroud)

因此,当使用带有gcc的-O3编译并使用参数25运行时,它会引发段错误.没有优化它工作正常.我已经对它进行了反汇编:它正在进行矢量化,并且编译器假定 …

c gcc strict-aliasing memory-alignment

13
推荐指数
3
解决办法
2368
查看次数

llc 没有 debug 或 -view-dag-combine1-dags 选项

llc通过包管理器在我的计算机上安装了程序(当然我安装了 LLVM,6.0.0 版本)。另外,我还从源头构建了它。我想要的是查看由 llvm 生成的 DAG。但是,不幸的是,我-debug-view-dag-combine1-dags两个版本的llc. 这让我发疯,因为到处都写着这个标志应该对我有帮助,但没有提到如果我没有它们该怎么办。在 help 和 man 中,没有这样的选项。我安装了graphviz、dot和gv,应该不是问题。

编译的版本llc

./llc -version
LLVM (http://llvm.org/):
LLVM version 7.0.0svn
Optimized build.
Default target: x86_64-unknown-linux-gnu
Host CPU: broadwell

Registered Targets:
   and targets...
Run Code Online (Sandbox Code Playgroud)

我已经使用 RelWithDebugInfo 标志构建了它,也许我应该使用 Debug 标志构建它?或者 cmake 中是否有任何我应该启用的标志?我相信我已经用谷歌搜索得够多了,但我找不到任何信息。

llvm llc

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

标签 统计

c ×1

gcc ×1

llc ×1

llvm ×1

memory-alignment ×1

strict-aliasing ×1