如何隐藏 NVCC 的 "function was declared but never referenced" 警告?
How to hide NVCC's "function was declared but never referenced" warnings?
编译使用 Google 测试的 CUDA 程序时,nvcc
会发出误报警告:
function <name> was declared but never referenced
一个 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
这已通过 google 测试的主分支和 CUDA 9.1 确认(我相信它开始出现在 CUDA 9.0 中,并且该错误不存在于 CUDA 8.0 中)。如果测试在全局命名空间中,则不会出现此问题。
有没有办法禁用这些警告?我知道我可以使用 -w
来禁用 所有 警告,但我想保留其他类型的警告。
你可以尝试暴力破解的方式:
#pragma push
#pragma diag_suppress 177 // suppress "function was declared but never referenced warning"
.. your function ..
#pragma pop
编译使用 Google 测试的 CUDA 程序时,nvcc
会发出误报警告:
function <name> was declared but never referenced
一个 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
这已通过 google 测试的主分支和 CUDA 9.1 确认(我相信它开始出现在 CUDA 9.0 中,并且该错误不存在于 CUDA 8.0 中)。如果测试在全局命名空间中,则不会出现此问题。
有没有办法禁用这些警告?我知道我可以使用 -w
来禁用 所有 警告,但我想保留其他类型的警告。
你可以尝试暴力破解的方式:
#pragma push
#pragma diag_suppress 177 // suppress "function was declared but never referenced warning"
.. your function ..
#pragma pop