=====================================
Extra Clang Tools 5.0.0 Release Notes
=====================================

.. contents::
   :local:
   :depth: 3

Written by the `LLVM Team <http://llvm.org/>`_

Introduction
============

This document contains the release notes for the Extra Clang Tools, part of the
Clang release 5.0.0. Here we describe the status of the Extra Clang Tools in
some detail, including major improvements from the previous release and new
feature work. All LLVM releases may be downloaded from the `LLVM releases web
site <http://llvm.org/releases/>`_.

For more information about Clang or LLVM, including information about
the latest release, please see the `Clang Web Site <http://clang.llvm.org>`_ or
the `LLVM Web Site <http://llvm.org>`_.

What's New in Extra Clang Tools 5.0.0?
======================================

Improvements to clang-tidy
--------------------------

- New `android-cloexec-creat
  <http://clang.llvm.org/extra/clang-tidy/checks/android-cloexec-creat.html>`_ check

  Detect usage of ``creat()``.

- New `android-cloexec-open
  <http://clang.llvm.org/extra/clang-tidy/checks/android-cloexec-open.html>`_ check

  Checks if the required file flag ``O_CLOEXEC`` exists in ``open()``,
  ``open64()`` and ``openat()``.

- New `android-cloexec-fopen
  <http://clang.llvm.org/extra/clang-tidy/checks/android-cloexec-fopen.html>`_ check

  Checks if the required mode ``e`` exists in the mode argument of ``fopen()``.

- New `android-cloexec-socket
  <http://clang.llvm.org/extra/clang-tidy/checks/android-cloexec-socket.html>`_ check

  Checks if the required file flag ``SOCK_CLOEXEC`` is present in the argument of
  ``socket()``.

- New `bugprone-suspicious-memset-usage
  <http://clang.llvm.org/extra/clang-tidy/checks/bugprone-suspicious-memset-usage.html>`_ check

  Finds ``memset()`` calls with potential mistakes in their arguments.
  Replaces and extends the ``google-runtime-memset`` check.

- New `bugprone-undefined-memory-manipulation
  <http://clang.llvm.org/extra/clang-tidy/checks/bugprone-undefined-memory-manipulation.html>`_ check

  Finds calls of memory manipulation functions ``memset()``, ``memcpy()`` and
  ``memmove()`` on not TriviallyCopyable objects resulting in undefined behavior.

- New `cert-dcl21-cpp
  <http://clang.llvm.org/extra/clang-tidy/checks/cert-dcl21-cpp.html>`_ check

  Checks if the overloaded postfix ``operator++/--`` returns a constant object.

- New `cert-dcl58-cpp
  <http://clang.llvm.org/extra/clang-tidy/checks/cert-dcl58-cpp.html>`_ check

  Finds modification of the ``std`` or ``posix`` namespace.

- Improved `cppcoreguidelines-no-malloc
  <http://clang.llvm.org/extra/clang-tidy/checks/cppcoreguidelines-no-malloc.html>`_ check

  Allow custom memory management functions to be considered as well.

- New `misc-forwarding-reference-overload
  <http://clang.llvm.org/extra/clang-tidy/checks/misc-forwarding-reference-overload.html>`_ check

  Finds perfect forwarding constructors that can unintentionally hide copy or move constructors.

- New `misc-lambda-function-name <http://clang.llvm.org/extra/clang-tidy/checks/misc-lambda-function-name.html>`_ check

  Finds uses of ``__func__`` or ``__FUNCTION__`` inside lambdas.

- New `modernize-replace-random-shuffle
  <http://clang.llvm.org/extra/clang-tidy/checks/modernize-replace-random-shuffle.html>`_ check

  Finds and fixes usage of ``std::random_shuffle`` as the function has been removed from C++17.

- New `modernize-return-braced-init-list
  <http://clang.llvm.org/extra/clang-tidy/checks/modernize-return-braced-init-list.html>`_ check

  Finds and replaces explicit calls to the constructor in a return statement by
  a braced initializer list so that the return type is not needlessly repeated.

- New `modernize-unary-static-assert-check
  <http://clang.llvm.org/extra/clang-tidy/checks/modernize-unary-static-assert.html>`_ check

  The check diagnoses any ``static_assert`` declaration with an empty string literal
  and provides a fix-it to replace the declaration with a single-argument ``static_assert`` declaration.

- Improved `modernize-use-emplace
  <http://clang.llvm.org/extra/clang-tidy/checks/modernize-use-emplace.html>`_ check

  Removes unnecessary ``std::make_pair`` and ``std::make_tuple`` calls in
  push_back calls and turns them into emplace_back. The check now also is able
  to remove user-defined make functions from ``push_back`` calls on containers
  of custom tuple-like types by providing `TupleTypes` and `TupleMakeFunctions`.

- New `modernize-use-noexcept
  <http://clang.llvm.org/extra/clang-tidy/checks/modernize-use-noexcept.html>`_ check

  Replaces dynamic exception specifications with ``noexcept`` or a user defined macro.

- New `performance-inefficient-vector-operation
  <http://clang.llvm.org/extra/clang-tidy/checks/performance-inefficient-vector-operation.html>`_ check

  Finds possible inefficient vector operations in for loops that may cause
  unnecessary memory reallocations.

- Added `NestingThreshold` to `readability-function-size
  <http://clang.llvm.org/extra/clang-tidy/checks/readability-function-size.html>`_ check

  Finds compound statements which create next nesting level after `NestingThreshold` and emits a warning.

- Added `ParameterThreshold` to `readability-function-size
  <http://clang.llvm.org/extra/clang-tidy/checks/readability-function-size.html>`_ check

  Finds functions that have more than `ParameterThreshold` parameters and emits a warning.

- New `readability-misleading-indentation
  <http://clang.llvm.org/extra/clang-tidy/checks/readability-misleading-indentation.html>`_ check

  Finds misleading indentation where braces should be introduced or the code should be reformatted.

- Support clang-formatting of the code around applied fixes (``-format-style``
  command-line option).

- New `bugprone` module

  Adds checks that target bugprone code constructs.

- New `hicpp` module

  Adds checks that implement the `High Integrity C++ Coding Standard <http://www.codingstandard.com/section/index/>`_ and other safety
  standards. Many checks are aliased to other modules.
