我__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手册对该问题的看法).
作为参考,下面的代码会产生此警告.
///////////////////////////////////////////////////////////////////////////////
// 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) 我有这个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文件,但结果总是一样的。
在应用修复程序之前,整个项目都可以用gcc和clang,编译得很好。
请注意,有一个类似的讨论在这里,但是给出的建议有在使用run-clang-tidy.py,这是我在做什么。因此,我不认为这是重复的。