Author: Richard Smith Date: 2020-10-16T12:00:13-07:00 New Revision: dd4e8a54b2ba9cec78441ba537b94f4eaa5acd84
URL: https://github.com/llvm/llvm-project/commit/dd4e8a54b2ba9cec78441ba537b94f4eaa5acd84 DIFF: https://github.com/llvm/llvm-project/commit/dd4e8a54b2ba9cec78441ba537b94f4eaa5acd84.diff LOG: [docs] Fix some out-of-date / inaccurate text and missing formatting in the User's Manual. Added: Modified: clang/docs/UsersManual.rst Removed: ################################################################################ diff --git a/clang/docs/UsersManual.rst b/clang/docs/UsersManual.rst index f313ce72d8ed..473fbb6d8d04 100644 --- a/clang/docs/UsersManual.rst +++ b/clang/docs/UsersManual.rst @@ -2479,8 +2479,8 @@ Differences between various standard modes ------------------------------------------ clang supports the -std option, which changes what language mode clang uses. -The supported modes for C are c89, gnu89, c99, gnu99, c11, gnu11, c17, gnu17, -c2x, gnu2x, and various aliases for those modes. If no -std option is +The supported modes for C are c89, gnu89, c94, c99, gnu99, c11, gnu11, c17, +gnu17, c2x, gnu2x, and various aliases for those modes. If no -std option is specified, clang defaults to gnu17 mode. Many C99 and C11 features are supported in earlier modes as a conforming extension, with a warning. Use ``-pedantic-errors`` to request an error if a feature from a later standard @@ -2489,34 +2489,40 @@ revision is used in an earlier mode. Differences between all ``c*`` and ``gnu*`` modes: - ``c*`` modes define "``__STRICT_ANSI__``". -- Target-specific defines not prefixed by underscores, like "linux", +- Target-specific defines not prefixed by underscores, like ``linux``, are defined in ``gnu*`` modes. -- Trigraphs default to being off in ``gnu*`` modes; they can be enabled by - the -trigraphs option. -- The parser recognizes "asm" and "typeof" as keywords in ``gnu*`` modes; - the variants "``__asm__``" and "``__typeof__``" are recognized in all +- Trigraphs default to being off in ``gnu*`` modes; they can be enabled + by the ``-trigraphs`` option. +- The parser recognizes ``asm`` and ``typeof`` as keywords in ``gnu*`` modes; + the variants ``__asm__`` and ``__typeof__`` are recognized in all modes. +- The parser recognizes ``inline`` as a keyword in ``gnu*`` mode, in + addition to recognizing it in the ``*99`` and later modes for which it is + part of the ISO C standard. The variant ``__inline__`` is recognized in all modes. - The Apple "blocks" extension is recognized by default in ``gnu*`` modes - on some platforms; it can be enabled in any mode with the "-fblocks" + on some platforms; it can be enabled in any mode with the ``-fblocks`` option. - Arrays that are VLA's according to the standard, but which can be constant folded by the frontend are treated as fixed size arrays. This occurs for things like "int X[(1, 2)];", which is technically a VLA. ``c*`` modes are strictly compliant and treat these as VLAs. -Differences between ``*89`` and ``*99`` modes: +Differences between ``*89`` and ``*94`` modes: -- The ``*99`` modes default to implementing "inline" as specified in C99, - while the ``*89`` modes implement the GNU version. This can be - overridden for individual functions with the ``__gnu_inline__`` - attribute. - Digraphs are not recognized in c89 mode. -- The scope of names defined inside a "for", "if", "switch", "while", - or "do" statement is diff erent. (example: "``if ((struct x {int - x;}*)0) {}``".) + +Differences between ``*94`` and ``*99`` modes: + +- The ``*99`` modes default to implementing ``inline`` / ``__inline__`` + as specified in C99, while the ``*89`` modes implement the GNU version. + This can be overridden for individual functions with the ``__gnu_inline__`` + attribute. +- The scope of names defined inside a ``for``, ``if``, ``switch``, ``while``, + or ``do`` statement is diff erent. (example: ``if ((struct x {int x;}*)0) + {}``.) - ``__STDC_VERSION__`` is not defined in ``*89`` modes. -- "inline" is not recognized as a keyword in c89 mode. -- "restrict" is not recognized as a keyword in ``*89`` modes. +- ``inline`` is not recognized as a keyword in ``c89`` mode. +- ``restrict`` is not recognized as a keyword in ``*89`` modes. - Commas are allowed in integer constant expressions in ``*99`` modes. - Arrays which are not lvalues are not implicitly promoted to pointers in ``*89`` modes. @@ -2538,9 +2544,7 @@ clang tries to be compatible with gcc as much as possible, but some gcc extensions are not implemented yet: - clang does not support decimal floating point types (``_Decimal32`` and - friends) or fixed-point types (``_Fract`` and friends); nobody has - expressed interest in these features yet, so it's hard to say when - they will be implemented. + friends) yet. - clang does not support nested functions; this is a complex feature which is infrequently used, so it is unlikely to be implemented anytime soon. In C++11 it can be emulated by assigning lambda @@ -2634,8 +2638,11 @@ C++ Language Features ===================== clang fully implements all of standard C++98 except for exported -templates (which were removed in C++11), and all of standard C++11 -and the current draft standard for C++1y. +templates (which were removed in C++11), all of standard C++11, +C++14, and C++17, and most of C++20. + +See the `C++ support in Clang <https://clang.llvm.org/cxx_status.html>` page +for detailed information on C++ feature support across Clang versions. Controlling implementation limits --------------------------------- _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits