我第一次尝试将 C++ 中的覆盖范围与 clang 6 集成,并且一直在遵循本指南。
\n\n我成功编译了二进制文件,生成了一个.profraw文件,并.profdata按照步骤 1、2 和 3a 中所述生成了一个文件。但是,当我尝试创建 3b 中所述的面向行的覆盖率报告时,我收到以下消息:
error: build/debug/dane: Failed to load coverage: No coverage data found\nRun Code Online (Sandbox Code Playgroud)\n\n检查.profraw文件后,我发现它是空的。我尝试稍微更改一下代码并再次运行,但生成的代码.profraw始终为空。
我的main.cpp文件:
error: build/debug/dane: Failed to load coverage: No coverage data found\nRun Code Online (Sandbox Code Playgroud)\n\n我的SConstruct文件:
#include <iostream>\n\nint main(int argc, char **argv) {\n std::cout << "Hello, World!" << std::endl;\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n命令行输出:
\n\n\nenv = Environment(CXX=\'clang++\', CXXFLAGS=[\'-Wall\', \'-g\', …Run Code Online (Sandbox Code Playgroud) 我一直在测试clang-llvm,看看我的学校IT部门是否值得将它添加到我们学生编程的机器上.对于我们的所有作业,我们需要使用编译g++ -Wall -W -pedantic-errors *.cpp,所以我只是将命令转换为clang++ -Wall -W -pedantic-errors.我得到了一些我没想到的输出:
Attempting to compile...
In file included from test_library.cpp:6:
In file included from ./test_library.h:64:
In file included from ./library.h:167:
./library.hpp:20:23: warning: unused variable 'e' [-Wunused-variable]
catch(Exception & e)
^
Run Code Online (Sandbox Code Playgroud)
而GCC编译器没有给出catch块中未使用的变量的错误.有什么我可以这样做,以便Clang不会对try/catch块中未使用的变量感到不满,同时保持命令类似于g ++吗?
Clang-LLVM(v2.7)GNU GCC(v4.4.4)Fedora 13
我正在运行最新的TextMate 1.5(在OSX Lion上)并安装了最新的XCode 4.3.通过绕过XCode开始并使用TextMate和命令行进行普通样本和练习,我在学习Objective-C时走的路很慢.在TextMate中命中Cmd-R时,(控制台)会构建并运行类型化的Objective-C控制台程序.但是,它不会编译应该(从我的POV)编译的东西,因为从命令行编译它们与clang工作正常.当我从命令行切换到构建时,我发现当我使用gcc而不是clang时,同样的事情会失败.
我的问题是 - 当我点击Cmd-R获取Objective-C(.m)源文件时,如何说服TextMate使用clang而不是gcc?
(我通过捆绑设置,但无济于事,谷歌搜索等等.所以它必须是一个简单的东西,我很想丢失,或者没有人想过这样.我假设第一个.)
PS我几周前从Windows转换过来,所以不要以为我是Mac专家.
我是LLVM的新手.我听说clang支持CUDA.如何使用clang编译CUDA?我是否必须进行一些配置更改或包含任何特定的头文件?我在网上找不到任何相关信息.有可能吗?
现在当我尝试用clang编译一个虚拟cuda程序时
clang -I /usr/local/cuda/include filename.cu
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
unknown type name '__global__'
__global__ void nothing(int *A)
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!顺便说一句,我在mac中运行它.
我试图理解C语言的clang编译器及其产生的中间代码.
我有一系列编译,生成LLVM-IR的函数,我不明白为什么.
这是第一个:
int f(int x){
}
Run Code Online (Sandbox Code Playgroud)
这会生成LLVM代码
define i32 @f(i32 %x) nounwind uwtable readnone{
ret i32 undef
}
Run Code Online (Sandbox Code Playgroud)
我认为这完全可以理解.函数体未定义!
这是下一个C函数:
int f(int x){
if (x < 0)
{}
else
{}
}
Run Code Online (Sandbox Code Playgroud)
当clang编译它时,它会生成完全相同的LLVM-IR.编译器识别出正文是垃圾,并返回undefined!LLVM知道这是垃圾的方式是它的优化器.Clang - > LLVM使用"返回值收集器"约定 - 在定义函数时 - %1被分配为"返回值".所有返回语句都会更新此值,最终,在函数体末尾的LLVM中有一个ret语句,它基本上返回此值.LLVM发现变量在没有更新或初始化的情况下被分配和返回,并将其设置为undefined.
现在为踢球者!!
int f(int x){
if (x<0)
{}
else
{
return 3;
}
}
Run Code Online (Sandbox Code Playgroud)
转换为以下LLVM-IR.
define i32 @f(i32 %x) nounwind uwtable readnone {
ret i32 3
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,未修改的代码被删除.当(x <0)时,C函数应该是未定义的!任何人都可以解释为什么这个代码被修剪掉了?
我正在使用Xcode 5.0,我将JSON库文件复制到我的项目中,这些文件是用非弧构建的,所以我为这些JSON库编译器源添加了编译器标志"fno-objc-arc".这样做后我得到苹果LLVM 5.o错误.
clang: error: no such file or directory: 'fno-objc-arc'
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个错误.
我正在研究LLVM混淆项目.我已经写了一个llvm传递(让我们说流动扁平化传递),我使用以下命令在源(test.c)上运行它:
clang -emit-llvm test.c -c -o test.bc
opt -load ../../.. LLVMFlattening.so -fla <test.bc>/dev/null
Run Code Online (Sandbox Code Playgroud)
但我已经看到,在O-LLVM项目中,他们使用以下方法实现了相同的目标:
clang -emit-llvm test.c -c -o test.bc -mllvm -fla
Run Code Online (Sandbox Code Playgroud)
有人能告诉我这里的-mllvm是什么,以及如何将其改为简单的命令?
为什么模板函数在LLVM-IR中不显示,如果没有调用函数,从c ++代码发出LLVM IR,不像其他类型的函数(int,float ...)将出现在llvm ir示例中:以下函数func1不会在llvm ir中显示
template <class tmp>
tmp func1 () {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是这个功能func2总是在llvm ir中显示
int func2 () {
// ...
}
Run Code Online (Sandbox Code Playgroud) 我尝试clang-tidy在Windows 上使用-到目前为止没有成功。
作为前提,我已经安装了LLVM 3.9.1。
我的常规编译器是MSVC 2015,我的构建系统是QBS 1.7.2。使用QBS我已经生成了compile_commands.json。当然,该文件包含MSVC 2015 cl.exe标志/参数。以下摘录显示了一个文件的条目:
{
"arguments": [
"C:/Programs/MVS14/VC/bin/amd64/cl.exe",
"/nologo",
"/c",
"/EHsc",
"/Zi",
"/MDd",
"/IC:\\some_ci_job_folder\\src\\some_component\\include",
"/IC:\\some_ci_job_folder\\src\\some_needed_component\\include",
"/IC:\\Programs\\Qt\\Online\\5.6\\msvc2015_64\\include",
"/IC:\\Programs\\Qt\\Online\\5.6\\msvc2015_64\\include\\QtCore",
"/IC:\\Programs\\Qt\\Online\\5.6\\msvc2015_64\\mkspecs\\win32-msvc2015",
"/IC:\\some_ci_job_folder\\target\\build\\win64-vc14-qt56x-debug\\some_component.win64-vc14-qt56x.ce20db24\\qt.headers",
"/D_MBCS",
"/DWIN32",
"/DQT_CORE_LIB",
"/DNOMINMAX",
"/DQT_DISABLE_DEPRECATED_BEFORE=0x000000",
"/DVERSION_ID=\"MAJOR_UNDEF.MINOR_UNDEF-REVISION_UNDEF\"",
"/DVERSION_MAJOR=0",
"/DVERSION_MINOR=0",
"/DVERSION_REVISION=0",
"/DUSES_QT",
"/D_DEBUG",
"/D__mswin__",
"/DUSE_RVALUE_REFS=1",
"/D_CRT_SECURE_NO_DEPRECATE",
"/D_SCL_SECURE_NO_WARNINGS",
"/DWINVER=0x0502",
"/D_WIN32_WINNT=0x0502",
"/D_WIN32_WINDOWS=0x0502",
"/TP",
"/FS",
"/Zm200",
"/W4",
"/FS",
"/GR",
"/wd4018",
"/wd4063",
"/wd4100",
"/wd4121",
"/wd4127",
"/wd4150",
"/wd4189",
"/wd4238",
"/wd4239",
"/wd4244",
"/wd4245",
"/wd4267",
"/wd4290",
"/wd4389",
"/wd4510",
"/wd4512",
"/wd4610",
"/wd4718",
"/wd4481",
"/FoC:\\some_ci_job_folder\\target\\build\\win64-vc14-qt56x-debug\\some_component.win64-vc14-qt56x.ce20db24\\.obj\\f27fede2220bcd32\\foo.cpp.obj",
"/FdC:\\some_ci_job_folder\\target\\build\\win64-vc14-qt56x-debug\\some_component.win64-vc14-qt56x.ce20db24\\.obj\\f27fede2220bcd32\\", …Run Code Online (Sandbox Code Playgroud) 当我使用clang ++ 5.0版编译以下程序时,结果是
错误:函数的初始值设定项看起来不像纯说明符
extern void print(void *ptr);
#define NULL __null
class IInterface
{
public:
virtual void method1() = NULL;
};
int main()
{
void *ptr = NULL;
print(ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
似乎__null不被clang支持吗?但是stackoverflow中的一些帖子建议clang支持__null。如果是这样,我为什么会收到此错误。有人可以建议这里发生了什么吗?
llvm-clang ×10
c++ ×4
clang ×3
clang++ ×2
llvm ×2
objective-c ×2
c ×1
c++14 ×1
clang-tidy ×1
cuda ×1
ios ×1
llvm-ir ×1
textmate ×1
windows ×1