草庐IT

clang_analyzer

全部标签

c++ - 为什么使用 clang -std=gnu++11 时此 C++ 代码会编译?

使用clang-std=gnu++11-ctest.cpp编译:voidtest(){[[randomtexthere]]if(0){}}但这会产生错误main.cpp:3:1:error:expectedstatement:voidtest(){[[randomtexthere]]}如果我使用clang-std=gnu++11-S-emit-llvmmain.cpp编译并查看LLVM代码,它看起来像[[...]]行无效:definevoid@_Z5testv()nounwinduwtablessp{retvoid}有什么想法吗?错误或某些C++11语法或GNU扩展语法?我正在使用Xc

c++ - 如何使用 clang 在 Mac OS X 上获得新的 C++ 线程支持?

我只想使用Appleclang版本4.1(tags/Apple/clang-421.11.66)在MacOSX10.8上编译以下程序:#includeusingnamespacestd;intmain(){cout但是我得到:../src/FirstCAgain.cpp:13:10:fatalerror:'thread'filenotfound#include我启用了c++11支持并且我正在使用EclipseC/C++开发工具。问题是:如何在MacOSX上获得新的C++线程支持? 最佳答案 您需要使用新的libc++,这不是默认设置

c++ - 使用 Clang 构建 V8 并发出 LLVM IR

我正在尝试使用Clang构建V8Javascript引擎并输出.ll文件。我正在尝试合并信息here和here去做这个。但是,当我尝试make时,它失败了,显示“Noruletomaketarget”。我搞不清楚了。我试过只编译v8.cc,但完全失败了。我想这是因为我试图通过将它作为编译器放入来强制-emit-llvm,但我不确定。$cdv8$exportCXX="clang++-S-emit-llvm"$exportCC="clang-S-emit-llvm"$exportCPP="clang-E-S-emit-llvm"$exportLINK="clang++-S-emit-llv

c++ - Clang 真的有这么聪明吗?

如果我使用-O3-fno-vectorize使用Clang3.3编译以下代码,即使删除注释行,我也会得到相同的汇编输出。代码类型将所有可能的32位整数双关语为float,并对[0,1]范围内的整数进行计数。Clang的优化器是否真的足够聪明,能够意识到0xFFFFFFFF在双关语为float时不在[0,1]范围内,因此完全忽略对fn的第二次调用?当第二个调用被移除时,GCC产生不同的代码。#include#include#includetemplateinlineTOpunning_cast(constFROM&input){TOout;std::memcpy(&out,&input,

c++ - 使用 Clang 的 libtooling 匹配#includes(或#defines)的正确方法是什么?

我正在编写一个libtooling重构工具。我有一个类,比方说Foo,定义在名为foo.h的header中。我想看看foo.h是否包含在文件中。目前,为了检查bar.cc是否包含foo.h,我只是使用recordDecl(hasName("Foo"))进行匹配。这是有效的,因为classFoo{...};将在预处理后存在于bar.cc的AST中,如果bar.cc包含foo.h.但是,如果bar.cc包含cat.h,而cat.h包含foo.h,则此方法无效。我希望bar.cc明确包含foo.h。此外,我希望能够匹配#define宏。我编写工具的方式使这两个目标变得不可能,因为我匹配的AS

c++ - 函数模板 : clang rejects, gcc 接受的从属名称查找

考虑以下片段:structX{};namespacefoo{templatevoidbar(){T{}();}clang拒绝此代码,gcc接受它。这是gcc错误还是clang错误? 最佳答案 我相信这是一个gcc错误,归档为70099.来自[temp.dep.res]:Inresolvingdependentnames,namesfromthefollowingsourcesareconsidered:(1.1)—Declarationsthatarevisibleatthepointofdefinitionofthetemplat

c++ - 在 Qt Creator 中使用 'Analyze Memory' 工具

我正在使用QtCreator开发C++应用程序,我正在尝试追踪一些内存泄漏。我关注了theseinstructions*,并在我的Ubuntu机器上安装了Valgrind。我从AnalyzeMemory部分开始我的应用程序,在单击停止按钮后,我被告知ToolAnalyzeMemory已完成,发现928个问题。但是,分析部分没有显示任何结果,该部分仍为空白。我做错了什么吗?在哪里可以找到内存分析的结果?*令人困惑的是,说明要求“发布”构建配置,但选择此选项会导致Qt中出现警告,指出内存分析工具需要调试配置。两种方法我都试过了。 最佳答案

c++ - Clang、std::shared_ptr 和 std::less/operator<

有如下代码#includeintmain(){std::shared_ptrptr0(newint);std::shared_ptrptr1(newint);boolresult=ptr0在用clang(version3.1,LLVM3.1,DebianGNU/LinuxSid)编译时产生以下错误/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/shared_ptr.h:364:14:error:nomatchingfunctionforcalltoobjectoftype'std::le

c++ - 无法抑制 Mac OS X 上的特定 clang 警告

我已经设置了-Wno-unused-parameter(和其他一些)编译器标志,它确实被传递给了编译器,但我仍然收到这个警告:clang++-c-pipe-Wno-self-assign-Wno-unused-parameter-Wno-unused-variable-g-gdwarf-2-archx86_64-fPIC-Wall-WF/Library/Frameworks-o../build/cobject.osrc/cobject.cpp^src/cobject.cpp:102:68:warning:unusedparameter'client'[-Wunused-paramete

c++ - 在 Clang 中禁用 "cast from pointer to smaller type uint32_t"错误

我正在从事一个学校项目,该项目涉及在实验硬件上移植一大段C++代码。不幸的是,该硬件是64位的,并且代码包含许多指针算术实例,这些实例期望指针是32位的,即它通常是reinterpret_cast(ptr)。.一个一个地浏览它们会非常乏味,而且由于无论如何这是一个实验项目,我很乐意接受一个“hackish”的解决方法。因此,我修改了malloc的实现,以确保它永远不会分配超过4GB限制的内存。因此,从技术上讲,这些类型转换应该是有效的。问题是,我该如何向Clang解释这一点?我得到的错误是:error:castfrompointertosmallertype'uint32_t'(aka