.. title:: clang-tidy - llvmlibc-restrict-system-libc-headers

llvmlibc-restrict-system-libc-headers
=====================================

Finds includes of system libc headers not provided by the compiler within
llvm-libc implementations.

.. code-block:: c++

   #include <stdio.h>            // Not allowed because it is part of system libc.
   #include <stddef.h>           // Allowed because it is provided by the compiler.
   #include "internal/stdio.h"   // Allowed because it is NOT part of system libc.


This check is necessary because accidentally including system libc headers can
lead to subtle and hard to detect bugs. For example consider a system libc
whose ``dirent`` struct has slightly different field ordering than llvm-libc.
While this will compile successfully, this can cause issues during runtime
because they are ABI incompatible.

Options
-------

.. option:: Includes

   A string containing a comma separated glob list of allowed include
   filenames. Similar to the -checks glob list for running clang-tidy itself,
   the two wildcard characters are `*` and `-`, to include and exclude globs,
   respectively. The default is `-*`, which disallows all includes.

   This can be used to allow known safe includes such as Linux development
   headers. See :doc:`portability-restrict-system-includes
   <portability-restrict-system-includes>` for more
   details.
