clang-query 的编译安装与使用示例

1,clang query 概述

作用:

检查一个程序源码的抽象语法树,测试 AST 匹配器;

帮助检查哪些 AST 节点与指定的 AST 匹配器相匹配;

2,clang-query 安装

准备:

bash 复制代码
git clone --recursive https://github.com/llvm/llvm-project.git
cd llvm-project/
git checkout  llvmorg-3.5.0
cp -r ./clang ./llvm/tools/
cp -r clang-tools-extra ./llvm/tools/clang/tools/extra
mkdir build_d ../local_d
cd build_d #其绝对路径为:/home/hipper/llvm_3_4_0_ex/browse/local_d,如下配置所用

配置:

bash 复制代码
cmake -G "Unix Makefiles"            \
-DCLANG_ENABLE_STATIC_ANALYZER=1     \
-DLLVM_ENABLE_ASSERTIONS=On          \
-DCMAKE_BUILD_TYPE=Debug             \
-DCMAKE_INSTALL_PREFIX=/home/hipper/llvm_3_4_0_ex/browse/local_d   \
-DLLVM_ENABLE_LIBCXX=1               \
-DLLVM_ENABLE_PROJECTS="all"         \
 ../llvm

编译安装:

bash 复制代码
make -j34
make install
cp bin/clang-query /home/hipper/llvm_3_4_0_ex/browse/local_d/bin/

3,测试运行

待测试程序源代码:

hello.c

cpp 复制代码
#if 0
#include <stdio.h>
#endif

#ifdef CAPITALIZE
#define WORLD "WORLD"
#else
#define WORLD "world"
#endif

extern int write(int, const char*, unsigned long);

int main(){
    write(1, "Hello, ", 7);
    write(1, WORLD, 5);
    write(1, "!\n", 2);
    return 0;

}

测试:

bash 复制代码
$ clang-query hello.c --

效果:

识别出函数调用表达式,并打印出来了

相关推荐
芦半山4 天前
解读HWASan日志
android·linux·llvm
一丝晨光11 天前
GCC和clang的爱恨情仇
macos·objective-c·xcode·apple·clang·gcc·llvm
编程重生之路1 个月前
今年2024的1024文章
ai·ai编程·编译器·cursor·1024程序员节
Thanks_ks1 个月前
【第五章·选择控制结构】第一节:生活中与计算机中的问题求解方法
算法·编译器·机器语言·分治策略·c 语言程序设计·计算机程序·程序设计语言
Eloudy1 个月前
函数地址对齐 __attribute__((aligned(64))) 编译器选项 -falign-functions=4
算法·编译器
Trouvaille ~2 个月前
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
c++·c++20·编译原理·编译器·类和对象·rvo·nrvo
EleganceJiaBao3 个月前
【Story】编译器的基础概念与类型分类
java·c语言·c++·python·gnu·编译器·gcc
怜渠客3 个月前
VS2022快速搭建OLLVM
c++·ide·编译器
张一西4 个月前
ARM学习(31)编译器对overlay方式的支持
arm开发·编译器·overlay·动态加载·bank·armcc·armclang
harykali4 个月前
静态分析学习笔记02:程序中间表示(IR)
编译器