forked from OSchip/llvm-project
Moving the documentation for the clang::fallthrough attribute into AttrDocs.
llvm-svn: 201715
This commit is contained in:
parent
c7962868a2
commit
896bace47f
|
@ -1570,51 +1570,6 @@ Non-standard C++11 Attributes
|
|||
Clang's non-standard C++11 attributes live in the ``clang`` attribute
|
||||
namespace.
|
||||
|
||||
The ``clang::fallthrough`` attribute
|
||||
------------------------------------
|
||||
|
||||
The ``clang::fallthrough`` attribute is used along with the
|
||||
``-Wimplicit-fallthrough`` argument to annotate intentional fall-through
|
||||
between switch labels. It can only be applied to a null statement placed at a
|
||||
point of execution between any statement and the next switch label. It is
|
||||
common to mark these places with a specific comment, but this attribute is
|
||||
meant to replace comments with a more strict annotation, which can be checked
|
||||
by the compiler. This attribute doesn't change semantics of the code and can
|
||||
be used wherever an intended fall-through occurs. It is designed to mimic
|
||||
control-flow statements like ``break;``, so it can be placed in most places
|
||||
where ``break;`` can, but only if there are no statements on the execution path
|
||||
between it and the next switch label.
|
||||
|
||||
Here is an example:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
// compile with -Wimplicit-fallthrough
|
||||
switch (n) {
|
||||
case 22:
|
||||
case 33: // no warning: no statements between case labels
|
||||
f();
|
||||
case 44: // warning: unannotated fall-through
|
||||
g();
|
||||
[[clang::fallthrough]];
|
||||
case 55: // no warning
|
||||
if (x) {
|
||||
h();
|
||||
break;
|
||||
}
|
||||
else {
|
||||
i();
|
||||
[[clang::fallthrough]];
|
||||
}
|
||||
case 66: // no warning
|
||||
p();
|
||||
[[clang::fallthrough]]; // warning: fallthrough annotation does not
|
||||
// directly precede case label
|
||||
q();
|
||||
case 77: // warning: unannotated fall-through
|
||||
r();
|
||||
}
|
||||
|
||||
``gnu::`` attributes
|
||||
--------------------
|
||||
|
||||
|
|
|
@ -642,7 +642,7 @@ def ExtVectorType : Attr {
|
|||
def FallThrough : Attr {
|
||||
let Spellings = [CXX11<"clang", "fallthrough">];
|
||||
// let Subjects = [NullStmt];
|
||||
let Documentation = [Undocumented];
|
||||
let Documentation = [FallthroughDocs];
|
||||
}
|
||||
|
||||
def FastCall : InheritableAttr {
|
||||
|
|
|
@ -410,3 +410,50 @@ When one method overrides another, the overriding method can be more widely avai
|
|||
@end
|
||||
}];
|
||||
}
|
||||
|
||||
def FallthroughDocs : Documentation {
|
||||
let Category = DocCatStmt;
|
||||
let Content = [{
|
||||
The ``clang::fallthrough`` attribute is used along with the
|
||||
``-Wimplicit-fallthrough`` argument to annotate intentional fall-through
|
||||
between switch labels. It can only be applied to a null statement placed at a
|
||||
point of execution between any statement and the next switch label. It is
|
||||
common to mark these places with a specific comment, but this attribute is
|
||||
meant to replace comments with a more strict annotation, which can be checked
|
||||
by the compiler. This attribute doesn't change semantics of the code and can
|
||||
be used wherever an intended fall-through occurs. It is designed to mimic
|
||||
control-flow statements like ``break;``, so it can be placed in most places
|
||||
where ``break;`` can, but only if there are no statements on the execution path
|
||||
between it and the next switch label.
|
||||
|
||||
Here is an example:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
// compile with -Wimplicit-fallthrough
|
||||
switch (n) {
|
||||
case 22:
|
||||
case 33: // no warning: no statements between case labels
|
||||
f();
|
||||
case 44: // warning: unannotated fall-through
|
||||
g();
|
||||
[[clang::fallthrough]];
|
||||
case 55: // no warning
|
||||
if (x) {
|
||||
h();
|
||||
break;
|
||||
}
|
||||
else {
|
||||
i();
|
||||
[[clang::fallthrough]];
|
||||
}
|
||||
case 66: // no warning
|
||||
p();
|
||||
[[clang::fallthrough]]; // warning: fallthrough annotation does not
|
||||
// directly precede case label
|
||||
q();
|
||||
case 77: // warning: unannotated fall-through
|
||||
r();
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue