Tag: clang

LLVM – 使用clang自动运行自己的通行证

我为llvm写了一些自己的传递,以便与clang一起使用它们。 我将它们集成在llvm中(不是动态加载的)。 当我输入时,它们甚至列在Optimizations available:部分中: opt –help-hidden 当我打电话给clang时,我想自动运行我自己的一个通行证作为最后一个 : clang ./hello.bc -o ./hello 甚至用c代码: clang ./hello.c -o ./hello 当我手动使用opt运行传递时,会生成修改后的ByteCode并将其写入新的.bc文件: opt -my-pass ./hello_optimized.bc 当我用clang编译修改后的.bc时,会再次运行普通的clang优化,这会破坏我手动执行的传递的优化: clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized 我的问题是: 如何使用clang自动运行我自己的书面传递作为最后一次传递? 另一种可能的解决方案是完全停用所有通行证,或者至少取消clang / opt的死代码/function。 我怎么能这样做?

具有自动存储持续时间的两个不同对象在地址比较下是否相等?

特别是,允许​​不同函数中两个自动变量的地址比较如下: sink.c #include #include void sink(void *l, void *r) { puts(l == r ? “equal” : “not equal”); exit(0); } main.c中 typedef struct { char x[32]; } Foo; void sink(void *l, void *r); Foo make(void *p) { Foo f2; sink(&f2, p); return f2; } int main() { Foo f1 = make(&f1); } 我希望这打印not equal因为f1和f2是不同的对象。 使用gcc我得到的not […]

有没有办法让GCC / Clang知道C中的inheritance?

我正在编写一个C库,它使用一些简单的面向对象的inheritance,如下所示: struct Base { int x; }; struct Derived { struct Base base; int y; }; 现在我想将Derived *传递给一个带有Base *的函数: int getx(struct Base *arg) { return arg->x; }; int main() { struct Derived d; return getx(&d); }; 这是有效的,当然是类型安全的,但编译器不知道这一点。 有没有办法告诉编译器这是类型安全的? 我只关注GCC并在这里铿锵作响,因此欢迎编译器特定的答案。 我有一些模糊的记忆,看到一些代码使用__attribute__((inherits(Base))或类似的东西,但我的记忆可能在撒谎。

clang链接器问题

我刚尝试了最新的llvm和clang trunk版本。 他们编译时没有开箱即用的单一警告,但我在连接一个hello world示例时遇到了问题。 我的代码是 #include int main(){ printf(“hello\n”); } 如果我编译使用 clang test.c 我收到以下错误 /usr/bin/ld: crt1.o: No such file: No such file or directory clang: error: linker command failed with exit code 1 (use -v to see invocation) 使用-v显示gnu ld被调用为 “/usr/bin/ld” –eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a.out crt1.o crti.o crtbegin.o -L -L/../../.. /tmp/cc-0XJTsG.o -lgcc […]

有没有办法在单个翻译单元中使用GCC __attribute __((noreturn))和?

在C11中,有一个关键字_Noreturn ,它是一个函数说明符(如inline is),表示函数没有返回 – 它调用exit()或等效函数。 还有一个标题 ,其完整定义是: 7.23 _Noreturn ¶1标题定义宏 noreturn 它扩展到_Noreturn 。 在GNU C(GCC)中,有一个属性__attribute__((noreturn)) ,它基本上执行相同的工作。 一个区别是__attribute__((noreturn))可以出现在函数声明__attribute__((noreturn))之前或之后: extern __attribute__((noreturn)) void err_error(const char *format, …); extern void err_error(const char *format, …) __attribute__((noreturn)); 问题是,如果在转换单元(TU)中包含 ,则__attribute__((noreturn))任何后续使用都会映射到__attribute__((_Noreturn)) ,这会导致编译失败,因为属性_Noreturn无法识别(即使关键字被识别为关键字)。 也就是说,据我所知,你不能同时使用这两个系统。 有什么方法可以解决这个问题,除了: 使用该属性使用的所有代码的大爆炸,或 使用不完全优雅的_Noreturn关键字? 您可以通过测试__STDC_VERSION__ >= 201112L来检测C11 – 该值由技术勘误1指定,因为标准意外地保留了未完全指定的值: __STDC_VERSION__整数常量201ymmL 。 178) 178)该宏未在ISO / IEC 9899:1990中规定,在ISO / IEC 9899:1990 / Amd.1:1995中指定为199409L,在ISO […]

替代-pg与Clang?

我想分析CPU(如果可能的样本),尽可能小的性能影响(因此类似于GCC的-pg ),用Clang编译的二进制文件。 是否有替代方法使用代码检测,或产生类似于gprof的输出?

触发Clang静态分析器的示例代码

我希望看到一小段但完整的代码片段会导致Clang的静态分析器抱怨。 我的动机主要是我试图让它在我的PIC32代码上工作,我需要一种方法来区分“所有代码都很好”和“它实际上没有做任何事情”。 这也是一种好奇心,因为我自己似乎无法想出一个简单的例子。 C89 / ANSI或C99很好,理想情况下我希望看到它发现一个简单的内存泄漏。 我的用法是 clang –analyze test.c

在llvm中的IR代码中添加函数调用

你能举个例子,如何添加函数的简单调用 foo(x); 我在我的IR代码中使用llvm中的传递?

在NetBeans中集成Clang?

在NetBeans中集成Clang涉及哪些步骤? 我还想在NetBeans中看到Clang错误和警告消息。 这将主要用于C开发。

如何利用Clang的AST?

我正在考虑将Clang的AST用于我的C代码并对AST进行一些分析。 关于从哪里开始,如何获得Clang的AST,教程或这方面的任何内容的一些指示将是非常有帮助的! 我一直试图找到一些,我得到了这个链接 ,这是2年前创建的。 但由于某种原因,它不适合我。 教程中的示例代码给了我太多错误。 所以我不确定,如果我正确构建代码或者教程有些问题。 但我也很乐意从其他一些页面开始。