草庐IT

clang_complete

全部标签

c++ - 在 Clang AST 中查找声明的父级

我正在使用clang进行一些分析,我需要在AST中找到声明的父级。例如,在下面的代码中,我有intx并且我想获取它的父级,这应该是函数声明:intmain(intx){返回0}我知道这个链接中提到的http://comments.gmane.org/gmane.comp.compilers.clang.devel/2152有一个ParentMap类来跟踪父节点。但是,这仅表示Stmt*->Stmt*的映射,我需要找到声明的父级。有谁知道我该怎么做? 最佳答案 您可以使用AstContext::getParents()来查找ast节点

c++ - 如何在 ubuntu 上使用可移植 Clang 设置 CLion?

我想在ubuntu中使用CLion测试Clang。默认情况下,Clion会检测我的gcc安装,但我想使用clang而不是gcc。此外,我不想通过apt-get安装clang。我已经从llvm网站下载了llvm,clang(3.6.2)二进制文件。我想使用那个可移植的clang二进制文件。这是我的系统设置:Ubuntu-14.04海湾合作委员会-4.8.4llvmclang-3.6.2(可移植)CLion-1.0.4那么这里如何使用llvm-clang设置CLion? 最佳答案 我从CLion博客得到了答案,它有效,现在就开始了。要提

c++ - 使用枚举基编写枚举时出现不明确的重载,但仅使用 clang

我想使用operator#includeenummyenum:uint16_t{X=0,};intmain(){std::coutgcc4.8和visualstudio2015没有这个问题。clang++-3.6错误#clang++-3.6-std=c++11-O0ostream.cpp-otest.exeostream.cpp:18:29:error:useofoverloadedoperator'>'and'myenum')std::cout总的来说,在严格遵守方面,我倾向于相信clang,所以也许使用确实是模棱两可的。枚举当然可以转换为其他类型的整数。我希望编译器更喜欢与枚举的基

c++ - 表达式模板不适用于 clang 下的原始类型重载

我有一个CRTP基类如下:templateclassBase{public://hereisIthinkwheretheproblemisinlineconstDerived&self()const{return*static_cast(this);}};那么派生类定义为templateclassDerived:publicBase,sizeof...(Rest)>{public:Derived()=default;//ThisconstructorbindsanyarbitraryexpressiontoDerivedtemplateinlineDerived(constBase&s

c++ - 为什么 clang++ 链接到 gcc?

我在FreeBSD上用clang++编译了一个简单的“Hello,world”风格的程序:#include#includeusingnamespacestd;intmain(intargc,char*argv[]){cout我用clang++和它的libc++编译:$clang++-stdlib=libc++-vohhello.cppFreeBSDclangversion3.8.0(tags/RELEASE_380/final262564)(basedonLLVM3.8.0)Target:x86_64-unknown-freebsd11.0Threadmodel:posixInstal

c++ - 如何使用 clang libc++ 进行静态链接

我刚刚用c++2a写了一个coroutine的测试代码。我使用clang5.0构建代码:clang++testcoroutine.cpp-std=c++2a-I../asio_alone-fcoroutines-ts-stdlib=libc++代码运行良好。现在我想静态链接libc++。这样我就可以在其他PC上运行a.out,我用谷歌搜索但只找到了-static-libstdc++。我不能使用-static-libstdc++因为libstdc++不支持coroutine。如果我使用-static-libstdc++:clang++testcoroutine.cpp-std=c++2a

c++ - 奇怪的 C++ namespace 解析怪癖和 g++ 与 clang++

这个问题在这里已经有了答案:Injectedclassnamecompilerdiscrepancy(3个答案)关闭4年前。这始于观察。我更改了一些看起来有点像这样的代码(编辑:我在这里取出了指定的初始化器,它们也不在原始代码中):structS{enumE{E1,E2}member;}//file1.ccSv1={S::E1};//file2.ccSv2={S::S::E2};请注意file2.cc过度限定了E2。然而,这在g++和clang++中都有效。(编辑2:这个特定VM上的g++是g++-5.4.1,但原始代码已经通过早期和后来的g++版本,加上多个clang版本。)事实上,

c++ - 使用 enable_if 的模板特化在 Clang 中失败,适用于 GCC

我正在尝试删除基于模板类型的成员函数。问题是在未删除的情况下,使以后的模板特化与我的函数的类型签名匹配。我尝试了以下代码,它使用GCC(9.0.1)编译,但在Clang(9.0.0)中出错。我认为它也无法在MSVC++中构建代码。#include#includetemplatestructmy_type{templatestd::enable_if_t::value,my_type>my_fun(constmy_type&v){std::couttemplatestd::enable_if_t::value,my_type>my_type::my_fun(constmy_type&v)

c++ - 当代码不严格符合标准时,如何强制 clang 抛出错误?

我正在编写一个C++11库,我希望它能与支持C++11的每个编译器一起使用。我不想不小心编写不标准的代码(例如使用VLA或block等语言扩展)。如何强制clang禁用所有语言扩展,以便我只能编写一致的代码? 最佳答案 尝试oneofthese:-pedantic:Warnonlanguageextensions.-pedantic-errors:Erroronlanguageextensions. 关于c++-当代码不严格符合标准时,如何强制clang抛出错误?,我们在StackOve

c++ - Clang 3.1 + libc++ 编译错误

我已经在Ubuntu12.04上使用GCC-4.6成功地构建并安装了(在前缀~/alt下)LLVM-Clang主干(2012年4月23日),然后使用这个Clang-build成功地安装了libc++.当我想使用它时,我必须提供-lc++和-libstdc++如下/home/per/alt/bin/clang-xc++-I/home/per/alt/include/v1-L/home/per/alt/lib-std=gnu++0x-g-Wall~/f.cpp-lm-lc++-lstdc++-lpthread-of编译f.cpp包含#includeusingstd::cout;usings