有关clang LLVM编译器前端的问题。有关C的一般问题,请使用C标记。
在哪里可以找到 Clang-Tidy“可读性-标识符-命名”检查器的可用选项列表?
用例 我想为在我的代码库上运行的 Clang-Tidy 配置可读性标识符命名检查器。 背景 clang-tidy 中的检查器可以提供 CheckOptions,例如: 氏族...
我正在使用 LLVM 来迭代基本块 for (const 函数 &F : *M) for (const BasicBlock &BB : F) for (const 指令 &I : BB){ ...... } 我想知道: ...
为什么我在 Clang 上而不是 GCC 上得到“for 声明不引用类、类模板或类模板部分特化”
我目前有这段代码,它不会在 GCC 上引发编译器错误,但会在 clang 上引发此编译器错误: 错误:声明的嵌套名称说明符“MyEnum::”未引用...
Clang 覆盖生成空的 default.profraw 文件
我正在对库进行模糊测试,并使用 clang 覆盖率来获取代码覆盖率。这是我运行的命令: m smp-模糊器-cov LLVM_PROFILE_FILE =“/scratch/smp-fuzzer-out/default.profraw&qu...
为什么手动设置入口点时 MSVC 链接器(和 lld-link)表现得很奇怪?
我试图使用clang在Windows中编译一个程序,以便我可以使用类似于gcc的cmdline选项,同时静态链接到UCRT库(ucrt.lib)。此外,我还想指定
使用从源代码构建的 Clang 对 AArch64 进行交叉编译
我正在尝试在 Ubuntu 上使用 clang 交叉编译到 AArch64。我已经安装了正确的软件包,并且能够使用预打包的 clang 成功编译,但使用自建的
我将代码简化为这个非常短的示例: 模板 结构A { A(std::convertible_to> auto&&... 操作); std::元组 我将代码简化为这个非常短的示例: template<class ...F> struct A { A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions); std::tuple<std::tuple<std::string, F>...> _actions; }; template<class ...F> A<F...>::A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions) : _actions{ std::tuple{ actions... } }{} 我没觉得有什么问题。但是 clang (-std=c++23) 给出了这个错误: <source>:13:66: error: pack expansion contains parameter packs 'actions:auto' and 'F' that have different lengths (1 vs. 0) 13 | A<F...>::A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions) | ~ ^ ~~~~~~~ <source>:13:10: note: while calculating associated constraint of template '' here 13 | A<F...>::A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions) | ^ <source>:13:10: error: out-of-line definition of 'A<F...>' does not match any declaration in 'A<F...>' 13 | A<F...>::A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions) | ^ 2 errors generated. 编译器资源管理器演示 这似乎是一个 clang 错误,已在最新的 clang trunk 中修复。 演示
如何在没有 .lib 的情况下在 Windows 中直接 clang 链接到 DLL
TinyCC 和 GCC 都支持无 lib 链接,在一段时间内有利于直接链接到 DLL 文件(因为自 Win3.1 以来 lib 没有真正的用途)。但由于某些原因,在 Windows 中,Cl...
clang (LLVM) 内联汇编 - 具有无用溢出/重新加载的多重约束
clang / gcc:当操作数可以满足寄存器或内存位置时,某些内联汇编操作数可以满足多个约束,例如“rm”。举个例子,...
如何使用“clang-win”工具集构建调试Boost静态库?
我在使用 clang-win 工具集构建标准和运行时支持库的调试版本时遇到问题(使用 msvc 工具集一切都按预期工作) 具体来说,我正在尝试构建 mt-gd
clang++ 和 g++ 编译器在打印字符指针时给出不同的输出[重复]
clang++ 和 g++ 编译器在打印 char 指针时给出不同的输出 #包括 整数 main(int argc, char** argv){ 字符a = 'a'; 字符* aptr = &a; std::cout << ap...
#包括 整数 main(int argc, char** argv){ 字符a = 'a'; 字符* aptr = &a; std::cout << aptr << " : " << a << std::endl; return 0; } w...
我正在使用 clang 工具从现有代码库自动生成一些代码。 在某些情况下,我想使用枚举类型,因此我想包含它。我能够获取文件的路径
我一直在将 Windows 库移植到 Linux,但在声明 struct error_t 时失败。 gcc 和 clang 都给出错误消息: /usr/include/x86_64-linux-gnu/bits/types/error_t.h:2...
clang-format 可以将每个函数完全排列在一行上吗?
我想格式化一组 C++ 文件,以便每个函数或函数模板完全定义在一行上。输入如下: 模板 无效 foo(int i) { 返回; } 温度...
对于非常大的应用程序,如何修复因“ARM64 分支超出范围”而失败的构建?
我们无法在优化级别设置为“无”的情况下在 Xcode 中构建 iOS 应用程序: Xcode 在链接器阶段给出错误: ld: b(l) ARM64 分支超出范围(138312952 最大值为 +/-128MB):来自 _main (
在 Clang 19 中使用 opt 检索控制流图会产生不透明指针问题
我想使用 opt 来获取 C 代码的控制流图,使用 clang 18。它不起作用,说一些不透明指针的问题。任何想法? root@2f18de92db5f:/# cat example.c #包括 我想使用 opt 来获取 C 代码的控制流图,使用 clang 18。它不起作用,说一些不透明指针的问题。有什么想法吗? root@2f18de92db5f:/# cat example.c #include <stdio.h> void foo(int n) { if (n > 0) { printf("Positive\n"); } else { printf("Non-positive\n"); } } int main() { foo(10); foo(-5); return 0; } root@2f18de92db5f:/# clang -S -emit-llvm example.c -o example.ll root@2f18de92db5f:/# opt -dot-cfg example.ll example.ll:12:17: warning: ptr type is only supported in -opaque-pointers mode store i32 %0, ptr %2, align 4 ^ opt: example.ll:12:17: error: expected type store i32 %0, ptr %2, align 4 您的 opt 版本不是 18。使用 opt-18,这是您正在运行的命令的输出: $ opt --version Homebrew LLVM version 18.1.8 Optimized build. Default target: arm64-apple-darwin23.5.0 Host CPU: apple-m1 $ opt -dot-cfg example.ll opt: Unknown command line argument '-dot-cfg'. Try: 'opt --help' opt: Did you mean '--dot-dom'? $ opt -passes=dot-cfg example.ll WARNING: You're attempting to print out a bitcode file. This is inadvisable as it may cause display problems. If you REALLY want to taste LLVM bitcode first-hand, you can force output with the `-f' option. Writing '.foo.dot'... Writing '.main.dot'... 使用新的通行证管理器,应使用 -passes=<pass-pipeline> 调用通行证。
考虑这个简单的例子: 结构类{ 结构内部{}; 静态内a; }; 我无法使用以下语法定义这个 a: 自动类::a = 内部{}; - gcc 和 msvc 都类似地抱怨...
我正在尝试使用 clang 编译一个没有优化的特定函数,以防止某些与安全相关的 memset() 调用被优化掉。 根据文档...
我目前正在使用 travis ci 检查补丁,因为它们进入 github,并试图找出是否有 clang-format 3.9(因为 travis ci 目前仅支持 ubuntu 14.04...