小编Tho*_*son的帖子

GCC警告的含义:忽略模板参数的属性(-Wignored-attributes)

__m256用作模板类的参数(参见下面的代码).在Ubuntu 16.10(Yakkety Yak)上使用g ++ 6.2进行编译时,它会警告我在模板参数上忽略了属性:

警告:忽略模板参数'__m256上的属性{aka __vector(8)float}'[-Wignored-attributes] typedef vec_array <__ m256> vec256

这种__m256类型似乎有一些关于对齐的属性(也许还有其他一些?).(其产生警告和)下面示出该原语容器类的唯一目的是处理在堆上这些特殊英特尔变量(存储器对准__m256,__m128等等).

当我在整个程序中使用此容器类时,它似乎工作正常.但是,我的问题是当GCC忽略这些属性时会产生什么影响(我已经阅读了GCC手册对该问题的看法).

  1. 有没有一种摆脱这些警告的好方法?
  2. 我不得不为此担心吗?
  3. 如果我忽略这个警告会发生什么最坏的情况?

作为参考,下面的代码会产生此警告.

///////////////////////////////////////////////////////////////////////////////
// System includes:

#include <x86intrin.h>
#include <cstdint>

static const size_t AVX_alignment = 32;

template<typename VecT>
class vec_array
{
protected:
   VecT*  m_pdata;
   size_t m_num_vector_elements;

public:
   vec_array();
   vec_array(size_t num_vector_elements);

   virtual ~vec_array();

   void allocate(size_t num_vector_elements);
   void free();

};

template<typename VecT>
vec_array<VecT>::vec_array() : m_pdata(nullptr), m_num_vector_elements(0)
{}

template<typename VecT>
vec_array<VecT>::vec_array(size_t num_vector_elements) : m_pdata(nullptr),
m_num_vector_elements(num_vector_elements)
{
   allocate(num_vector_elements); …
Run Code Online (Sandbox Code Playgroud)

c++ gcc

15
推荐指数
1
解决办法
2838
查看次数

clang-tidy 在修复时插入多个“覆盖”说明符

我有这个cmake项目,我想使用clang-tidy. 为了不让同时发生太多事情,我只激活了该modernize-use-override选项。但是,当我应用此方法时:

$> run-clang-tidy  -header-filter='.*'  -checks='-*, modernize-use-override' -fix
Run Code Online (Sandbox Code Playgroud)

到项目中,clang-tidy插入override说明符的多个实例,例如:

void update_sizes() override override override etc.
Run Code Online (Sandbox Code Playgroud)

我尝试遵循此处给出的建议并用于cmake创建 json 编译命令数据库:

$>cmake ../../ -DCMAKE_BUILD_TYPE=debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
Run Code Online (Sandbox Code Playgroud)

我通过将编译器设置为系统范围的默认值(使用)来确保cmake它实际上是在选择clang编译器update-alternative。在这种情况下,cmake生成调用 clang 编译器的 make 文件。

我正在使用 Ubuntu 18.10 和 clang 7。

我也尝试过使用clang-6和设置cmake来生成ninja构建脚本而不是make文件,但结果总是一样的。

在应用修复程序之前,整个项目都可以用gccclang,编译得很好。

请注意,有一个类似的讨论在这里,但是给出的建议有在使用run-clang-tidy.py,这是我在做什么。因此,我不认为这是重复的。

c++ cmake clang clang-tidy

5
推荐指数
1
解决办法
580
查看次数

标签 统计

c++ ×2

clang ×1

clang-tidy ×1

cmake ×1

gcc ×1