Skip to content
Snippets Groups Projects
  • Matthias Gehre's avatar
    8d45096f
    Add [[clang::suppress(rule, ...)]] attribute · 8d45096f
    Matthias Gehre authored
    Summary:
    This patch implements parsing of [[clang::suppress(rule, ...)]]
    and [[gsl::suppress(rule, ...)]] attributes.
    
    C++ Core Guidelines depend heavily on tool support for
    rule enforcement. They also propose a way to suppress
    warnings [1] which is by annotating any ancestor in AST
    with the C++11 attribute [[gsl::suppress(rule1,...)]].
    To have a mechanism to suppress non-C++ Core
    Guidelines specific, an additional spelling of [[clang::suppress]]
    is defined.
    
    For example, to suppress the warning cppcoreguidelines-slicing,
    one could do
    ```
    [[clang::suppress("cppcoreguidelines-slicing")]]
    void f() { ... code that does slicing ... }
    ```
    or
    ```
    void g() {
      Derived b;
      [[clang::suppress("cppcoreguidelines-slicing")]]
      Base a{b};
      [[clang::suppress("cppcoreguidelines-slicing")]] {
        doSomething();
        Base a2{b};
      }
    }
    ```
    
    This parsing can then be used by clang-tidy, which includes multiple
    C++ Core Guidelines rules, to suppress warnings (see
    https://reviews.llvm.org/D24888).
    For the exact naming of the rule in the attribute, there
    are different possibilities, which will be defined in the
    corresponding clang-tidy patch.
    
    Currently, clang-tidy supports suppressing of warnings through "//
    NOLINT" comments. There are some advantages that the attribute has:
    - Suppressing specific warnings instead of all warnings
    - Suppressing warnings in a block (namespace, function, compound
      statement)
    - Code formatting may split a statement into multiple lines,
      thus a "// NOLINT" comment may be on the wrong line
    
    I'm looking forward to your comments!
    
    [1] https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#inforce-enforcement
    
    Reviewers: alexfh, aaron.ballman, rsmith
    
    Subscribers: cfe-commits
    
    Differential Revision: https://reviews.llvm.org/D24886
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@298880 91177308-0d34-0410-b5e6-96231b3b80d8
    8d45096f
    History
    Add [[clang::suppress(rule, ...)]] attribute
    Matthias Gehre authored
    Summary:
    This patch implements parsing of [[clang::suppress(rule, ...)]]
    and [[gsl::suppress(rule, ...)]] attributes.
    
    C++ Core Guidelines depend heavily on tool support for
    rule enforcement. They also propose a way to suppress
    warnings [1] which is by annotating any ancestor in AST
    with the C++11 attribute [[gsl::suppress(rule1,...)]].
    To have a mechanism to suppress non-C++ Core
    Guidelines specific, an additional spelling of [[clang::suppress]]
    is defined.
    
    For example, to suppress the warning cppcoreguidelines-slicing,
    one could do
    ```
    [[clang::suppress("cppcoreguidelines-slicing")]]
    void f() { ... code that does slicing ... }
    ```
    or
    ```
    void g() {
      Derived b;
      [[clang::suppress("cppcoreguidelines-slicing")]]
      Base a{b};
      [[clang::suppress("cppcoreguidelines-slicing")]] {
        doSomething();
        Base a2{b};
      }
    }
    ```
    
    This parsing can then be used by clang-tidy, which includes multiple
    C++ Core Guidelines rules, to suppress warnings (see
    https://reviews.llvm.org/D24888).
    For the exact naming of the rule in the attribute, there
    are different possibilities, which will be defined in the
    corresponding clang-tidy patch.
    
    Currently, clang-tidy supports suppressing of warnings through "//
    NOLINT" comments. There are some advantages that the attribute has:
    - Suppressing specific warnings instead of all warnings
    - Suppressing warnings in a block (namespace, function, compound
      statement)
    - Code formatting may split a statement into multiple lines,
      thus a "// NOLINT" comment may be on the wrong line
    
    I'm looking forward to your comments!
    
    [1] https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#inforce-enforcement
    
    Reviewers: alexfh, aaron.ballman, rsmith
    
    Subscribers: cfe-commits
    
    Differential Revision: https://reviews.llvm.org/D24886
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@298880 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.