如何隐藏NVCC的“功能已声明但从未引用”警告?

时间:2018-04-14 21:35:56

标签: cuda googletest nvcc

在编译使用Google Test的CUDA程序时,nvcc会发出误报警告:

  

功能< name>被宣布但从未被引用

MCVE:

// test.cu
#include <gtest/gtest.h>

namespace {

__global__ void a_kernel() {
    printf("Works");
}

TEST(ExampleTest, ExampleTestCase) {
    a_kernel<<<1, 1>>>();
}

}

编译它给出:

$ nvcc test.cu -lgtest -lgtest_main
test.cu(9): warning: function "<unnamed>::ExampleTest_ExampleTestCase_Test::ExampleTest_ExampleTestCase_Test()" was declared but never referenced

谷歌测试和CUDA 9.1的主分支证实了这一点(我相信它开始发生在CUDA 9.0中,并且CUDA 8.0中没有该错误)。如果测试位于全局命名空间中,则不会发生此问题。

有没有办法禁用这些警告?我知道我可以使用-w来停用所有警告,但我想保留其他类型的警告。

1 个答案:

答案 0 :(得分:2)

您可以尝试蛮力方式:

   #pragma push
   #pragma diag_suppress 177 // suppress "function was declared but never referenced warning"

   .. your function ..

   #pragma pop