summaryrefslogtreecommitdiff
path: root/docs/CodingStandards.rst
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2012-09-21 17:47:36 +0000
committerDavid Blaikie <dblaikie@gmail.com>2012-09-21 17:47:36 +0000
commit67bf429a6ac94761d7799484b9290945bc5d5def (patch)
tree15dcff6b95be1d21128882b6ad55278274b007bc /docs/CodingStandards.rst
parent28aff84ceb2fcf0e4b05ed95b81e46fcd4cd373f (diff)
downloadllvm-67bf429a6ac94761d7799484b9290945bc5d5def.tar.gz
llvm-67bf429a6ac94761d7799484b9290945bc5d5def.tar.bz2
llvm-67bf429a6ac94761d7799484b9290945bc5d5def.tar.xz
Document "do not use defaults in covered switch-over-enum" coding standard.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164389 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/CodingStandards.rst')
-rw-r--r--docs/CodingStandards.rst18
1 files changed, 18 insertions, 0 deletions
diff --git a/docs/CodingStandards.rst b/docs/CodingStandards.rst
index 4f955e3012..ecd5626eb0 100644
--- a/docs/CodingStandards.rst
+++ b/docs/CodingStandards.rst
@@ -818,6 +818,24 @@ least one out-of-line virtual method in the class. Without this, the compiler
will copy the vtable and RTTI into every ``.o`` file that ``#include``\s the
header, bloating ``.o`` file sizes and increasing link times.
+Don't use default labels in fully covered switches over enumerations
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+``-Wswitch`` warns if a switch, without a default label, over an enumeration
+does not cover every enumeration value. If you write a default label on a fully
+covered switch over an enumeration then the ``-Wswitch`` warning won't fire
+when new elements are added to that enumeration. To help avoid adding these
+kinds of defaults, Clang has the warning ``-Wcovered-switch-default`` which is
+off by default but turned on when building LLVM with a version of Clang that
+supports the warning.
+
+A knock-on effect of this stylistic requirement is that when building LLVM with
+GCC you may get warnings related "control may reach end of non-void function"
+if you return from each case of a covered switch-over-enum because GCC assumes
+that the enum expression may take any representable value, not just those in
+the enumeration. To suppress this warning, use ``llvm_unreachable`` after the
+switch.
+
Use ``LLVM_DELETED_FUNCTION`` to mark uncallable methods
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^