问题标签 [llvm-clang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compiler-errors - unique_ptr 作为类成员和移动语义无法使用 clang 编译
我无法让 clang(Apple LLVM 版本 4.2 (clang-425.0.28))编译这些类:
我想按如下方式运行构造函数:
但如果我这样做,我会得到以下编译器错误:../src/C++11-2.cpp:66:10: 错误:调用 'std::unique_ptr' C.m_ptr( ptrB);
我可以通过运行来解决编译器问题,Cl(std::move(ptrB))
但这实际上并没有将 A 的所有权从 ptrB 移开:我仍然可以运行ptrB->f()
而不会导致运行时崩溃......其次,构造函数不是很令人满意,因为我想隐藏std::move
类接口中的实现。
提前致谢。
llvm - 如何查看 llvm 转换过程所做的更改
如何在 c 程序中查看转换传递(如死代码消除)所做的更改。就像我在终端上运行以下命令一样,它会创建一个 .bc 文件,通过该文件我可以看到 IR。但是如何在 c 程序中查看 -dce 所做的更改。命令:$opt in.bc -o out.bc -dce
clang - clang 添加一个新的 pragma
我想知道哪些所有 llvm IR 语句对应于 clang 中特定 pragma 中的代码。我的编译指示具有以下结构。
我需要知道标记 me pragma 的左大括号和右大括号之间存在哪些所有 stmts。
我们可以将一些元数据附加到这些 stmts 吗?如果是的话,任何人都可以指出我的一些参考。
我在谷歌上搜索并找到了这个
添加一个 pragma 处理程序,它在操作接口上有一个回调。添加回调的 sema 实现,它在 Sema 对象中设置一些内部位。在“for”语句中添加一个新位,以指定它是否具有#pragma 优化集。修改 codegin 以根据该位发出元数据。
任何人都可以提供更多详细信息。
我正在使用最新的 llvm (llvm 3.4)
注意:对任何方向的任何帮助表示赞赏。我知道 llvm 可能会进行优化以移动语句。但这对我来说很好
c - Clang C 到 LLVM 编译修剪“错误代码”
我试图了解 C 的 clang 编译器,以及它产生的中间代码。
我有一系列编译、生成 LLVM-IR 的函数,但我不明白为什么。
这是第一个:
这会产生 LLVM 代码
我认为这是完全可以理解的。函数体未定义!
这是下一个 C 函数:
当 clang 编译它时,它会生成完全相同的 LLVM-IR。编译器识别出主体是垃圾,并返回未定义!!!LLVM 知道这是垃圾的方式是它的优化器。Clang --> LLVM 使用“返回值收集器”约定——在定义函数时——%1 被分配为“返回值”。所有的 return 语句都会更新这个值,最终,在 LLVM 的函数体末尾有一个 ret 语句,它本质上会返回这个值。LLVM 看到一个变量在没有更新或初始化的情况下被分配和返回,并将其设置为 undefined。
现在是踢球者!
转换为以下 LLVM-IR。
由于某种原因,未定义的代码被剪掉了。当 (x<0)!! 时,C 函数应该是未定义的!谁能解释为什么这段代码被删掉了?
c++ - Apple LLVM 4.2 段错误使用基于范围的循环和引用
我不确定这是否是 Xcode 4.6.3 (4H1503) 附带的 LLVM 的实际错误,或者我正在做的事情确实不符合犹太教规。代码片段如下
其中matrix
a vector
of vector
s 包含布尔值。我已经用 Visual Studio 2012 开发了一段时间,这似乎不是问题,但是应用程序也需要在 Mac 上运行,所以我继续测试它......我有点很惊讶我无法编译它。经过仔细检查,我发现我从 clang 本身得到了一个完整的段错误,这通常表明正在发生非常糟糕的恶作剧。因此,我迅速隔离了这段代码,并使用整数索引和所有爵士乐将循环更改为更农民的版本。它就像一个魅力。
我是否正确假设我的原始循环应该正常工作(即使在 SO 中我也看到过类似的事情,除了 VS2012 真的没有什么可说的)还是我犯了一个严重的错误,你真的不应该使用这样的引用?
在向 Apple 报告错误之前,我想知道这一点。
编辑
clang -x c++ -std=c++11 -stdlib=libc++
用产量编译
我没有粘贴最后提到的文件,因为它们非常大并且似乎没有添加任何信息(只是一堆库头,然后我在文件末尾粘贴了上面的确切代码)。此外,如果您拥有与我相同的编译器,您应该能够自己获得它们。
compiler-construction - 用于 C++ 输入的 LLVM 中的 FunctionPass
我试图通过 LLVM 解析代码来在我的 C/C++ 代码中打印所有函数的名称。我参考了此处给出的示例http://llvm.org/docs/WritingAnLLVMPass.html#basic-code-required 该示例适用于 C 代码输入,但对于 C++ 输入,它在一个简单的 Hello World 程序中显示以下函数名称
__cxx_global_var_init
主要的
全球_I_a
然后我发现 LLVM 与 iostream 存在一定的问题,如下所述:http: //llvm.org/docs/FAQ.html#what-is-this-llvm-global-ctors-and-global-ia-stuff-that -happens-when-i-include-iostream
我从我的代码中删除了 iostream,然后我只得到了“main”作为输出。
但是对于可以说包含以下函数的多功能 C++ 程序:convertperm、findType 和 main(没有 iostream),我得到以下输出
_Z11convertpermSs
_Z8findtypeSs
主要的
多功能C程序正常工作
任何人都可以提供解决此问题的方法吗?
assembly - ARM Assembly 用铿锵声走帧指针
我在 ARM 架构上使用 -pg 使用 Clang 3.3 编译一些代码,我看到一个空的 C 函数:
现在看起来像:
现在我知道 r7 被用作帧计数器,如果 -ffunction-section 和 -no-omit-frame-pointer 是,我可以向后遍历它以获取当前调用者的堆栈和 lr 堆栈指定的。但是,当我尝试编写将执行此操作的代码时,它不起作用:
r0 在这里尝试成为被调用者的 lr 绝对是错误的,我相信 r1 也是如此,因为我使用了 mov,所以我没有 lr 中的完整 32 位。
谁能指出我做错了什么?
c++ - 将几个 LLVM C++ 模块链接在一起 lli 中的段错误
我正在尝试一个非常简单的 LLVM/clang 示例,但似乎失败了。
我尝试以下方法:
- clang++ -emit-llvm -c -x c++ -o main.bc -isystem include/main.cc
- clang++ -emit-llvm -c -x c++ -o test_class.bc -isystem include/test_class.cc
- llvm-link main.bc test_class.bc -o all.bc
- lli all.bc
但是,4. 失败(段错误):
我对这应该如何工作有根本的误解吗?我的最终目标是使用 libclang API 进行编译部分,但现在了解我在这里做错了什么会很棒!谢谢!
我附上了以下示例的源代码:
包括/test_class.h:
test_class.cc:
主.cc:
c++ - #define XX 在 C 中有什么作用?
在LLVM 项目的源代码中,它显示:stdbool.h
在最后 4 行中,有 3 行 from #define X X
。为什么要这么做?它有什么区别?这不会强制编译器替换,比如说,true
吗true
?
ubuntu - 构建 LLVM 3.4 和 clang 时出错
所以我已经按照 LLVM 3.4 此处http://llvm.org/docs/GettingStarted.html#getting-started-quickly-a-summary的“快速入门”指南中的说明进行 LLVM 和 clang 安装,但是我在运行“make”命令时遇到了一些错误。
“make”命令花了大约 45 分钟来处理所有内容,然后在接近尾声时出现了一些错误,我附上了屏幕截图。运行“make check-all”后,它会说有两个错误。
我还看到了 Ubuntu 13.04 附带的 LLVM 版本,并且它具有高达 3.2 的预编译版本,至少这是我执行“sudo apt-cache search llvm”命令时显示的内容,但是,我至少需要已安装 3.3 版。
似乎这些错误可能是由于 g++ 编译器在某个时候崩溃造成的,所以我想知道,是否有办法让我至少安装 LLVM 3.3 和 clang?
过去三天我一直在整个网络上搜索,包括这个网站,以找到解决方案,但是,我似乎无法在任何地方找到任何解决方案,所以我在这里询问。我将不胜感激任何可以解决此问题的帮助。
谢谢!