给定文件
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
不幸的是,当我尝试在我信任的SPIM MIPS模拟器中运行它时,我发现SPIM对象几乎覆盖了它的每一行。不仅“.Section.mdebug.abi32”行,而且
格式为“.cfi*”的任何行——甚至更令人困惑的是(因为在我看来它像MIPS…)行“lui$2,%hi(u gnu_local_gp)”被反对
当编译使用通过MacPorts(boost、opencv等)安装的库的项目时,我需要通过-I和-L参数传递库并包含文件位置
默认情况下,是否有任何“官方”方式来引导这些位置的苹果原生叮当外观
我想我可以做一个bash脚本,效果是
clang -I/opt/local/include -L/opt/local/lib %@
调用它而不是编译器,但是有没有更干净的方法自动将clang指向这些位置
我不是在寻找基于Xcode的修复程序,而是希望能够从命令行编译,而无需每次手动键入上述参数
有什么建议
我是新来的clangastmatcher。我已经阅读了一些教程,并试图获得所有的c'tor初始化
输入代码
Person(char性别):m_性别(性别)
^^^^^^^^^^^^^^^^您应该尝试一下clang查询。使用它,您可以交互式地查询加载的AST,并轻松尝试不同的匹配器
无论如何,你想要的可能是:
constructorDecl(forEachConstructorInitializer(ctorInitializer().bind(“ctorInitializer”))
您应该尝试一
标签: Clang
warningssuppress-warnings
上下文
我阅读了关于关闭特定警告的部分。它通常适用于除-Wgnu零变量宏参数之外的所有警告
代码是:
MyHeader.hpp
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments"
#import "header generating -Wgnu-zero-variadic-macro-arguments warning"
#pragma cla
标签: Clang
clang++thread-sanitizer
ThreadSanitarizer和ThreadSanitarizer之间有区别吗?--当被-fsanize黑名单的llvm特定编译器标志使用时=
什么时候我应该使用一个而不是另一个?ASFAIK黑名单代码根本没有tsan检测,而抑制的代码是运行时的事情,因此被抑制的代码仍然被tsan监控,但根本没有报告,这样报告就不会被已知种族污染
这会对性能产生影响
我如何知道clang::NamedDecl包含函数的标识符?
我的指针指向了clang::namedecl您可以使用isa或dyn\u cast,例如
if (FunctionDecl *F = dyn_cast<FunctionDecl>(myNamedDecl)) {
// use F
}
if(FunctionDecl*F=dyn_cast(mynamedecl)){
//使用F
}
使用该方法,我有一些节点对应于一个函数的条件。为什么会这样?因为dyn_cast也触
我现在正在用libfuzzer做一些工作,但是当我用官方的玩具例子做的时候。运行此命令时:
clang++ -fsanitize=address -fsanitize-coverage=edge test-fuzzer.cc Fuzzer*.o
发生了一个错误
clang: error: invalid value 'edge' in 'fsanitize-coverage=edge'
似乎clang支持这个论点,但我想知道我如何才能看到支持的价值。。。
我用unbuntu14.04安装了a
这个问题特别涉及LLVM 3.9。预先提问:
我还需要做些什么来获取函数属性以获取参数吗?我已经包括了我在下面对LLVM代码库所做的更改
函数属性有参数后,如何访问该参数?在我当前的解决方案中,会创建一个新属性,而我的过程访问的值是错误的
之前,我成功地添加了不带参数的函数属性,然后将它们应用于源代码中的函数,最后在LLVM IR中观察到它们,如前所述。我尝试按照llvm.org上的llvm dev列表中给出的建议添加一个带有参数的函数属性。该线程还提供如何访问参数的建议。然而,我无法在我的
标签: Clang
stdclang++libc++
我需要使用自定义libc++所以我将-nostinc++传递给CMAKE_CXX_标志。这对于库很好,但对于可执行文件,我得到以下警告:
clang: warning: argument unused during compilation: '-nostdinc++' [-Wunused-command-line-argument]
问题:为什么
更多详细信息
传递给编译器的我的CMAKE_CXX_标志为:
set(CMAKE_CXX_FLAGS "-nostdinc++ -isystem $
标签: Clang
linker-errorstitanium-modules
我在加载钛模块时出现以下错误:
clang: error: linker command failed with exit code 1 (use -v to see invocation) [ERROR]
[ERROR] Error: Traceback (most recent call last):
File "/Users/goodlogics/Library/Application Support/Titanium/mobilesdk/osx/3.1.0.GA/iphone/bu
然后,我使用llvm链接将所有库*.bc文件合并到一个位代码文件中,如下所示
llvm-link -o MyLibrary.bc somefile.bc someotherfile.bc etc.bc
我将其概念化为类似于创建对象文件的归档,但我不认为基于事情的运行方式这是正确的
然后,我使用与上面类似的命令编译项目的源文件。然后,我使用llvm链接(再次)将这些代码与库位代码文件组合成一个类似这样的位代码文件
llvm-link -o app.bc1 main.bc x.bc y.bc pa
我有一个与opt工具一起工作的ModulePass,但是我很难弄清楚如何让命令行中的clang可以使用它。我当前使用我的通行证的工作流是:
clang-c-emit llvm[c源代码文件]
llvm链接[llvm位代码文件]
opt-load[PassName].so-[PassName][链接的llvm文件]
llc[结果位码文件]
gcc[结果汇编程序文件]-o[目标]
< P>我想把我的PASS与CLAN命令行集成在一起,这样它就可以作为现有软件(例如C++标准库)的一部分被调用,而不必
标签: Clang
clang++suppress-warnings
我在编译代码时收到多个叮当声警告,它们位于名为的第三方库中
如何抑制这些警告,以便只从自己的代码中获取警告
我正在使用CMake编译我的项目,并尝试了不同的Clang选项,即
-iystem /usr/include/boost
及
在
但我仍然收到与相关的警告
受影响的文件始终是.cpp文件,因此CMAKECXX\u标志应生效
如果我用
set( CMAKE_VERBOSE_MAKEFILE 1 )
我得到以下输出
cd /tmp/Sandbox && /usr/lib/c
我使用llvm3.8创建一个ModulePass,给定一个函数名,它迭代所有模块的函数并搜索该名称。
一旦找到该函数,它将使用随机选择的字符串重命名它
我需要在iOS Xcode项目上运行此过程,因此我通过在项目的构建设置中写入其他_C_标志来执行过程:
-Xclang-load-Xclang路径/to/my/ModulePass/RenameFunction.dlyb-mllvm-funcName=“functionName”
第一件我无法弄清楚的事情是为了正确重命名函数应该使用的扩展点:
s
标签: Clang
llvm-clangclang-ast-matchers
我正在使用clang matcher获得结果节点。从结果节点中,我可以得到行号,比如说17。现在,我想在这一行中获得完整的源代码。请帮忙
让我详细解释一下。我有一个叮当作响的匹配器,可以在源代码中找到浮动文字。例如,第17行,sr=2.0*rt_urand_Upu32_Yd_f_pw_snf(u)是源代码,然后它与2.0匹配。这是我的媒人:
const auto PA = floatLiteral(
isExpansionInMai
我正在尝试使用clang的Analyzer框架(带有checker等)获取函数调用序列
我编写了一个Checker,它使用checkPreCall方法来处理函数调用。我试图查看一些简单的函数调用,比如f(x,y),我想查看传递给函数的变量的名称
利用Expr是一种Stmt的事实,我使用了printpery函数来获取变量名,但显然,如果参数是x+2或类似的东西,我会将x+2作为输出
有没有更好的方法来检索变量的名称,或者甚至找出它是简单表达式(x)还是复杂表达式(x+2)
我运行了clang++-v testfile.cpp,发现目录C:\LLVM\lib\clang\3.9.0\include中缺少许多标准头。我从下载了一个用于32位windows的clang 3.9.0预构建二进制文件
有人能帮我整理一下这个烂摊子,并解释一下为什么在clang的预构建版本中缺少标准库吗?我在网上搜索了好几个小时,想找到这个问题的答案和解决方案,但没有找到。提前谢谢
为什么clang的预构建版本中缺少标准库
您的Windows二进制下载仅包含二进制生成工具
加上一些特定于叮当声
我使用clang用-S-emit llvm编译这段代码:
int sub2(int n) {
return n - 2
}
这是它输出的代码:
; Function Attrs: nounwind
define i32 @_Z4sub2i(i32) #0 {
%2 = alloca i32, align 4
store i32 %0, i32* %2, align 4
%3 = load i32, i32* %2, align 4
%4 = sub ns
在我的项目工作中,我一直致力于开发一个语言服务器来对C/C++源代码执行静态分析。此过程需要对LLVM-IR进行分析以执行静态分析检查。
我一直在使用下面的命令为我的C/C++程序生成LLVM-IR代码。它是硬编码的,并通过system()命令调用
clang-O3-emit llvm hello.c-c-o hello.bc
上述用法会导致安全漏洞,因此需要避免。我当前的任务是使用LLVM基础设施提供的C/C++API在独立进程中将源文件转换为LLVM-IR
作为LLVM存储库的新手,我发现很
我有一个叮当作响的工具应用程序,它遍历一个AST并用损坏的名称打印出来。它在clang10中工作得很好,但是在(简单的)到clang11的端口之后,它是一个分段故障,我无法指出问题所在。从回溯来看,我似乎设法获得了一个不可强制转换的AST节点
#0 getKind () at /build/llvm-toolchain-11-11.0.1~++20201218093139+43ff75f2c3fe/clang/include/clang/AST/DeclBase.h:433
#1 class
有没有办法通过pass在llvm ir中创建新的threa_局部变量?当然GlobalVariablector具有要设置的必要TLS位:
请注意,线程局部变量需要运行时的一些支持,等等。因此,它不是任何地方都可以使用的(有些平台根本不支持它们)。当然GlobalVariablector具有要设置的必要TLS位:
请注意,线程局部变量需要运行时提供一些支持,等等。因此,它不是在任何地方都可用的(有些平台根本不支持它们)。线程支持是编译器的运行时库必须提供的(如果语言支持多线程,有些语言则不支持),
我是LLVMIR新手,我有一个LLVMIR源代码,它使用了一些外部声明函数。
这些功能是在C++文件中实现的。
所以我的问题是:
如何在LLVM IR?中调用这些C++函数?
P> >将C++文件编译成LLVM IR,以及链接它们?< P>假设LLVM IR声明与C++编译器兼容,则应该能够将C++编译成本地对象文件,将LLVM IR编译成本地对象文件,并使用原生链接器链接它们,除了“BAMES53建议”之外,还可以编译C++到LLVM IR,并将它们链接到IR级别。或者你可以有一个C++程序
编译项目时,我遇到以下错误:
/usr/bin/ld: skipping incompatible ../../Build/qtpropertybrowser/Linux/Develop/libqtpropertybrowser.a when searching for -lqtpropertybrowser
/usr/bin/ld: cannot find -lqtpropertybrowser
/usr/bin/ld: skipping incompatible ../../Build/li
如何使用Clang获得逻辑代码行?
例如,在此代码片段中:
int main()
{
int x = 10;
printf("%d",
x);
return 0;
}
当我以Stmts的形式遍历代码时,得到的Stmts为:
printf(“%d”
x) )
如何将它们合并到一个Stmt中,或者如何将源代码解读为不受新行限制的代码行?请在问题中包含您当前的代码。您能否显示“以Stmt方式遍历代码”的代码并获得该输出?clang API通常根本不应该关心换行符。请在问题中包含您当前的代码。您能
标签: Clang
c++builderclang++llvm-clang
我正忙于将C++Builder 10.232位DLL项目编译为64位DLL
这个DLL是一些其他专有软件的插件。
此应用程序的SDK中规定:
为64位版本的应用程序设置“结构成员对齐”
投影到8字节
因为我不想接触SDK的头文件,所以我需要一种方法告诉BCC64使用8字节的对齐方式作为默认值
看着
对于那些编译器选项有一个表,但是对于BCC64不幸的是,到处都是N/a
我如何告诉C++Builder的64位编译器使用该打包,为什么基于叮当的BCC32c支持这些设置,而同样基于叮当的BCC64不支
标签: Clang
glibcclang++ninjagn
我正在使用和Ninja构建Chromium项目,但遇到以下错误:
$ ninja -C out/Release/
...
...
../../third_party/llvm-build/Release+Asserts/bin/clang++: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ~/client/third_party/llvm-build/Release+Asserts/bin/../lib/lib
这个问题纯粹是从研究的角度来看的,而现在我并没有考虑它的任何实际方面
就像我们有反编译器,它可以接收二进制代码并生成LLVM IR,比如
或
还有很多其他的。
我们是否有一些代码生成器可以将LLVM IR转换为Clang AST
先谢谢你
找到一个已删除的项目-
正在寻找更多信息。从AST到LLVM IR是一条单行道
看看这张照片。
高级编程语言的源代码文件(可能是C、C++或RIST)转换为CLANAST。这是一种数据结构,它了解编程语言本身的源代码结构。AST是特定于编程语言的。它是对
我正在处理带有3个自定义内部函数的LLVM IR扩展:自定义加载、自定义存储和自定义GEP。这些指令的功能基本上与常规加载、存储和GEP指令类似,但我不能用原始指令替换它们,因为它们包含额外的元数据。显然,最好将元数据存储为属性,但在这一点上,删除这些本质需要太多的更改,根本不是一个选项。我是否有办法使用/修改MemoryDependenceAnalysis,以便它能够处理这些内在特性?检查源代码并在每次使用LoadInst、StoreInst和GetElementPtrInst时进行修改是一个
Ubuntu 20.04 LTS
LLVM版本:10.0.0
叮当声——版本=8.0.1
我在尝试加载JIT库时遇到此错误
LLVMIRGen:libjit.bc:错误:未知属性种类(61)(生产者:“LLVM10.0.0”读取器:“LLVM 8.0.1”)
F0409 12:00:00.167050 23677 LLVMIRGen.cpp:216]检查失败:llmodule.get()无法加载JIT库。您使用的是不匹配的LLVM和Clang版本。也许你需要卸载其中一个
clang有一个选项,-x,可用于指定传递给它的后续源文件的语言。这样使用时会出现问题:
clang -x c++ one.cc a.o b.o c.o
clang将尝试将目标文件a.o,b.o,c.o解释为源代码
有没有办法取消-x选项的效果,以便我可以在同一命令行上传递对象文件
clang -x c++ one.cc SOMEOPTION a.o b.o c.o
什么是SOMEOPTION以允许clang将.o文件解释为对象文件
我需要使用这个复杂的命令行,因为我使用的是一个自动调用编译
我在我的.clang格式文件中使用以下选项:
AlignConsecutiveDeclarations: true
PointerAlignment: Right
当前格式设置结果如下所示:
char * var1;
SomeOtherType *var2;
int var3;
我期望的结果是:
char *var1; //note the changed position of *
SomeOtherType *var2;
int
Clang编译器基于LLVM基础设施构建,Clang前端获取C/C++源代码并生成LLVM-IR,谁负责使用优化器和代码生成
由于优化器过程库是按生成优化代码的顺序战略性地放置和调用的,因此指定的顺序在哪里,以及由谁生成目标代码?这是Clang fronted程序的一部分,还是有任何其他程序进行此优化和生成?可以说,实际上有两个Clangs
一个是前端:它只是进行解析,构建抽象语法树(AST),并应用各种语义检查。它还可以做一些静态分析和其他有用的事情。可以使用-cc1选项访问前端,例如:cla
是否存在clangformat的-output replacements xml选项的文档?我需要知道输出意味着什么。不幸的是,我认为这在任何地方都没有记录。
我想提取以下字符串
"clang version 10.0.0 (https://github.com/llvm/llvm-project.git aa71c977ba9828496270f53edd66665c8244f679)"
从
我试过了
NamedMDNode *NM2 = M.getNamedMetadata("llvm.ident");
NM2->dump()
但不确定如何以字符串格式获取信息。我怀疑,Module::getNamedMetadata(“llvm.iden
标签: Clang
abstract-syntax-tree
Win10-64,clang v11.0.0,VS2019
我的基本问题是,为什么直接从该头文件生成的AST中缺少我头文件中大多数自定义代码的AST信息,但却出现在包含该头文件的实现文件中(以及如何解决该问题)。除非我在抄写和简化下面的代码时输入了错误,否则它确实可以正确编译、链接和运行。当我使用
clang.exe -Xclang -ast-dump -fsyntax-only MyClass.h
它包含包含的iostream头文件通常有数千行,但我的代码只有以下两行:
|-VarDecl
我不太了解ClangAPI,所以请原谅这个愚蠢的问题
如果我为一个与C++有相同或相似特性的语言构建编译器,我能用CLANAPI来为我负责代码生成吗?例如,假设我实现了一个解析器来解析以下代码:
def class Adder
def func Add(x as int, y as int) as int
return x + y
现在假设我解析了这段代码,并且有了AST,我可以使用ClangAPI为我生成这个类的代码吗
我知道我可以使用LLVM API,我已经这样做了,但是L
标签: Clang
constantssignatureclang-tidy
我有这个c文件
#include "pointer.h"
int switcher(int * i) {
int a = *i;
switch (a) {
case 1:
return 0;
default:
return 1;
}
}
并且关联的标题仅包含一行
int switcher(int * i);
这是使用叮当声编译的
如果我现在使用clang tidy clang tidy-
我正在尝试使用clang为riscv64制作IR
当我使用llc--version时,它显示了许多目标,包括riscv64
但当我使用以下命令时:
clang -target riscv64 hello.c
clang -target riscv64-unknown-linux hello.c
它显示clang-4.0:错误:未知目标三重'riscv64未知linux',请使用-triple或-arch
我没有使用ucb bar的llvm进行riscv。我正在使用llvm.org上游的risc
我想修改clang codegen模块,使用Builder.createCall方法创建一个gcc内置函数(例如uuBuiltin_frame_address)调用。有什么建议吗?对于\u内置\u框架\u地址您可以特别使用。谢谢,这很有帮助。
llvm ar将多个llvm位代码文件归档到一个可链接到程序的归档库中。存档操作按预期工作。同样,可以使用llvm nm来显示生成的存档中的所有符号
但是,我注意到生成的归档文件不能被其他标准llvm工具使用,例如,llc、lli和llvm链接
为了使用生成的存档文件,我必须从存档文件中提取所有位代码文件,然后由llc直接使用它们
问题:
通过llvm ar,是否有更优雅或高效的方法来使用生成的存档文件
可以直接使用位码存档文件,如下所示:
像llc、lli、opt等LLVM工具不能直接对位码存
我有一个结构,其中有两个位字段,clang/llvm将它们组合成一个类型,我想知道如何使它准确地转换我给它的内容
我从以下代码开始:
int main()
{
enum enum_type { D1 = -1, D2 = 1 };
struct enum_struct
{
enum_type field1 : 64;
enum_type field2 : 128;
};
enum_struct x = { D1, D2 };
}
标签: Clang
pragmallvm-clang
使用-Werror将所有警告视为错误,我不想禁止使用不推荐的声明警告:
#pragma clang diagnostic push
#pragma clang diagnostic ignore "-Wdeprecated-declarations"
SKPayment *myPayment = [SKPayment paymentWithProductIdentifier:completeName];
[[SKPaymentQueue defaultQueue] addPaym
请有人解释一下-fPIC选项的作用。我似乎找不到它的参考资料,但我已经看到它在使用。我相信这与可执行文件将使用的内存分配/空间有关,但希望有更具体的东西
干杯,
Nap以下是您要查找的参考资料:
指定问题的副本。即使是针对不同的编译器,解释也是一样的,因为标志做了相同的事情。
我想通过两种方式获得带有clang的exe和llvm:
clang-O2 1.c-o 1.exe
叮当声-S-emit llvm 1.c
llc 1.ll-filetype=obj
链接1.obj-defaultlib:???(MSVCRT或libcmt)
但exe文件将不同,第一个exe将更快,如何做到平等?
或者如何查看像defaultlib这样的clang使用了什么
硬:windows 64。您可以在第一个命令行上添加-v标志,以查看链接器调用clang将用于构建程序。至于第一个可执行文件
我刚刚用compiler-rt构建并安装了LLVM Clang 3.5.0。Clang binary似乎可以工作,但无法构建简单的测试程序:
$ cat hello.c
#include <stdio.h>
int main(int argc, char **argv) {
printf("Hello World\n");
return 0;
}
可执行文件“”?有趣的
调试它进一步揭示了clang试图调用自己来构建.o对象文件,然后ld来链接它,但显然不知道它自
我只是在Windows上创建了叮当声。为了使它更完整,似乎还应该制作编译器lldb
如何使用mingw构建lldb?或者它应该是用clang构建的?在lldb的Windows端口上工作的人使用Visual Studio。在Windows上构建lldb的说明如下:
基本上遵循Linux的构建说明:
我建议你在windows上使用忍者而不是make(速度更快),但这取决于你
最好使用python的mingw版本。您可以在此处找到有关此的说明:
或者,您可以使用cmake进行python构建:
是否可以使用YoctoSDK中的工具链和sysroot与Clang/LLVM for ARM交叉编译
Yocto SDK中的环境设置脚本具有以下编译器选项:
export CC="arm-poky-linux-gnueabi-gcc -march=armv7-a -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=$SDKTARGETSYSROOT"
我想交叉编译这个简单的用户空间应用程序
第c页:
#include <stdi
标签: Clang
homebrewosx-mavericks
我需要使用llvm.org版本的clang,而不是苹果版本的clang,作为特定自制公式的编译器。我用安装了llvm37
brew tap homebrew/versions
brew install llvm37
因此,我在/usr/local/bin中使用了clang-3.7。但不能将自制\u CC设置为以下路径:
HOMEBREW_CC=clang-3.7 HOMEBREW_CXX=clang++-3.7 brew install --build-from-source <form
有没有办法运行clang并添加llc标志?我想使用“-print after all”、“-print after all”、“-debug only”。。。不必在两者之间使用.bc文件。可以使用-mllvm将其他参数传递给LLVM的选项解析器。对于您的场景,这看起来像这样:
clang [...] -mllvm -print-after-all
你怎么找到的?写在哪里?-mllvm选项是从clang-help获得的(非常长)列表的一部分。我同意这不是很明显。
我正在启动一个关于clang的项目。我可能会在铿锵的源代码中添加一些代码。我从git获得了源代码,但不知道从哪里开始。
有关于clang源代码的文档吗?
谢谢
++我试图找到一些方法在clang上添加额外的功能,并找到了LibTooling及其教程。这可能会有帮助 是的。与LLVM类似,clang文档也是自动生成的。例如,您可以在这里找到关于Clang-9的文档
正如Valeriy Savchenko在本帖评论中所述。还有一个可用的 那么,项目网站上没有足够的信息吗?@auburg来源很广,官方
1 2 3 4 5 6 ...
下一页 最后一页 共 10 页