[NFC][CodingStandard] Require`[[maybe_unused]]` for unused variables in asserts (#142850)
Require using attribute `[[maybe_unused]` for assert-only variables that may be unused in non-assert enabled builds to suppress unused variable warnings. --------- Co-authored-by: James Henderson <James.Henderson@sony.com> Co-authored-by: Nikita Popov <github@npopov.com>
This commit is contained in:
@@ -591,6 +591,8 @@ rather than C-style casts. There are two exceptions to this:
|
|||||||
|
|
||||||
* When casting to ``void`` to suppress warnings about unused variables (as an
|
* When casting to ``void`` to suppress warnings about unused variables (as an
|
||||||
alternative to ``[[maybe_unused]]``). Prefer C-style casts in this instance.
|
alternative to ``[[maybe_unused]]``). Prefer C-style casts in this instance.
|
||||||
|
Note that if the variable is unused because it's used only in ``assert``, use
|
||||||
|
``[[maybe_unused]]`` instead of a C-style void cast.
|
||||||
|
|
||||||
* When casting between integral types (including enums that are not strongly-
|
* When casting between integral types (including enums that are not strongly-
|
||||||
typed), functional-style casts are permitted as an alternative to
|
typed), functional-style casts are permitted as an alternative to
|
||||||
@@ -1288,17 +1290,26 @@ These are two interesting different cases. In the first case, the call to
|
|||||||
``V.size()`` is only useful for the assert, and we don't want it executed when
|
``V.size()`` is only useful for the assert, and we don't want it executed when
|
||||||
assertions are disabled. Code like this should move the call into the assert
|
assertions are disabled. Code like this should move the call into the assert
|
||||||
itself. In the second case, the side effects of the call must happen whether
|
itself. In the second case, the side effects of the call must happen whether
|
||||||
the assert is enabled or not. In this case, the value should be cast to void to
|
the assert is enabled or not. In this case, the value should be defined using
|
||||||
disable the warning. To be specific, it is preferred to write the code like
|
the ``[[maybe_unused]]`` attribute to suppress the warning. To be specific, it is
|
||||||
this:
|
preferred to write the code like this:
|
||||||
|
|
||||||
.. code-block:: c++
|
.. code-block:: c++
|
||||||
|
|
||||||
assert(V.size() > 42 && "Vector smaller than it should be");
|
assert(V.size() > 42 && "Vector smaller than it should be");
|
||||||
|
|
||||||
bool NewToSet = Myset.insert(Value); (void)NewToSet;
|
[[maybe_unused]] bool NewToSet = Myset.insert(Value);
|
||||||
assert(NewToSet && "The value shouldn't be in the set yet");
|
assert(NewToSet && "The value shouldn't be in the set yet");
|
||||||
|
|
||||||
|
In C code where ``[[maybe_unused]]`` is not supported, use ``void`` cast to
|
||||||
|
suppress unused variable warning as follows:
|
||||||
|
|
||||||
|
.. code-block:: c
|
||||||
|
|
||||||
|
LLVMValueRef Value = LLVMMetadataAsValue(Context, NodeMD);
|
||||||
|
assert(LLVMIsAValueAsMetadata(Value) != NULL);
|
||||||
|
(void)Value;
|
||||||
|
|
||||||
Do Not Use ``using namespace std``
|
Do Not Use ``using namespace std``
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user