Skip to content
Snippets Groups Projects
  1. Mar 30, 2017
  2. Mar 29, 2017
  3. Mar 28, 2017
  4. Mar 27, 2017
    • Matthias Gehre's avatar
      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
    • Adam Nemet's avatar
      Encapsulate FPOptions and use it consistently · eec6cbfc
      Adam Nemet authored
      Sema holds the current FPOptions which is adjusted by 'pragma STDC
      FP_CONTRACT'.  This then gets propagated into expression nodes as they are
      built.
      
      This encapsulates FPOptions so that this propagation happens opaquely rather
      than directly with the fp_contractable on/off bit.  This allows controlled
      transitioning of fp_contractable to a ternary value (off, on, fast).  It will
      also allow adding more fast-math flags later.
      
      This is toward moving fp-contraction=fast from an LLVM TargetOption to a
      FastMathFlag in order to fix PR25721.
      
      Differential Revision: https://reviews.llvm.org/D31166
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@298877 91177308-0d34-0410-b5e6-96231b3b80d8
      eec6cbfc
    • Daniel Jasper's avatar
      Look through CXXBindTemporaryExprs when checking CXXFunctionCastExprs · 75f794b3
      Daniel Jasper authored
      for unused values.
      
      This fixes a regression caused by r298676, where constructor calls to
      classes with non-trivial dtor were marked as unused if the first
      argument is an initializer list. This is inconsistent (as the test
      shows) and also warns on a reasonbly common code pattern where people
      just call constructors to create and immediately destroy an object.
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@298853 91177308-0d34-0410-b5e6-96231b3b80d8
      75f794b3
Loading