【问题标题】:Handling large volume of boost unit test related warnings with clang-tidy使用 clang-tidy 处理大量与 boost 单元测试相关的警告
【发布时间】:2017-05-09 13:00:56
【问题描述】:

我正在建立一个项目。我使用 boost 单元测试进行了骨架测试。不幸的是,宏扩展会产生大量警告。有没有办法禁用这些,而不必指定单独的行号?

即使我有 // NOLINT,也会发生这种情况。

一个例子:

/home/peter/checkouts/canopen-gateway/./unittests/projs/server/exe/testunit-tcp-socket.cpp:12:1: warning: construction of 'end_suite12_registrar12' with static storage duration may throw an exception that cannot be caught [cert-err58-cpp]
BOOST_AUTO_TEST_SUITE_END()  // NOLINT
^
/usr/include/boost/test/unit_test_suite.hpp:62:73: note: expanded from macro 'BOOST_AUTO_TEST_SUITE_END'
#define BOOST_AUTO_TEST_SUITE_END()                                     \
                                                                        ^
/usr/include/boost/test/unit_test_suite.hpp:209:62: note: expanded from macro '\BOOST_AUTO_TU_REGISTRAR'
static boost::unit_test::ut_detail::auto_test_unit_registrar BOOST_JOIN( BOOST_JOIN( test_name, _registrar ), __LINE__ )
                                                             ^
/usr/include/boost/config/suffix.hpp:544:28: note: expanded from macro 'BOOST_JOIN'
#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y )
                           ^
/usr/include/boost/config/suffix.hpp:545:31: note: expanded from macro 'BOOST_DO_JOIN'
#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y)
                              ^
/usr/include/boost/config/suffix.hpp:546:32: note: expanded from macro 'BOOST_DO_JOIN2'
#define BOOST_DO_JOIN2( X, Y ) X##Y
                               ^
note: expanded from here
/usr/include/boost/test/unit_test_suite_impl.hpp:284:17: note: possibly throwing constructor declared here
    explicit    auto_test_unit_registrar( int );

【问题讨论】:

    标签: boost clang clang-static-analyzer boost-unit-test-framework clang-tidy


    【解决方案1】:

    您可能没有粘贴整个错误消息,但在某处应该有一行显示

    警告:递归宏的扩展被禁用 [-Wdisabled-macro-expansion]

    您可以通过将 -Wno-disabled-macro-expansion 传递给 clang 命令行来禁用此功能。

    【讨论】:

    • 不幸的是,我没有足够的时间来追求这个,因为问题不再发生。我破解了一个修复程序来阻止clang-tidy找到boost库,这样我就得到了更短的错误列表,抱怨缺少标题。无论如何,我确实尝试了您的命令行选项并得到:clang-tidy:未知命令行参数'-Wno-disabled-macro-expansion'。尝试:'clang-tidy -help' 但是,我使用的是旧的 ubuntu 支持的 clang 版本,因此您的选择可能是一个新功能。如果我将来使用您的建议使这项工作正常进行,那么我会标记它!
    【解决方案2】:

    尝试这样包装有问题的代码:

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdisabled-macro-expansion"
    
    // your code here
    
    #pragma clang diagnostic pop
    

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2018-04-10
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多