C and C++


LANG.STRUCT.ALIGNAS.EZA : Explicit Zero Alignment

Summary

An object (variable or field) declaration explicitly specifies the alignment is zero.

Specifically, a warning of this class will be triggered when the operand to _Alignas or alignas is a zero-valued integer constant expression. The C standard specifies that the specifier has no effect in this case, so it is redundant and can be removed from the code.

This class is a strict subset of Use of Alignas.

Properties

Class Name Explicit Zero Alignment
Significance redundancy
Mnemonic LANG.STRUCT.ALIGNAS.EZA
Categories
MisraC2023 MisraC2023:1.4 Emergent language features shall not be used
  MisraC2023:2.2 A project shall not contain dead code
  MisraC2023:8.16 The alignment specification of zero should not appear in an object declaration
Misra2012 Misra2012:1.4 Emergent language features shall not be used
  Misra2012:2.2 A project shall not contain dead code
  Misra2012:8.16 The alignment specification of zero should not appear in an object declaration
AUTOSARC++14 AUTOSARC++14:M0-1-9 There shall be no dead code.
MisraC++2008 MisraC++2008:0-1-9 There shall be no dead code.
CWE CWE:1164 Irrelevant Code
CERT-C CERT-C:MSC12-C Detect and remove code that has no effect or is never executed
  CERT-C:MSC23-C Beware of vendor-specific library and language differences
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Explicit Zero Alignment"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

#include <stdalign.h>

alignas(0) int explicit_zero;     /* 'Explicit Zero Alignment' warning issued here
                                   * ('Use of Alignas' warning also issued when enabled)
                                   */
alignas(4-4) int explicit_0exp;   /* 'Explicit Zero Alignment' warning issued here
                                   * ('Use of Alignas' warning also issued when enabled)
                                   */
alignas('\0') int explicit_0char; /* 'Explicit Zero Alignment' warning issued here
                                   * ('Use of Alignas' warning also issued when enabled)
                                   */
int implicit_zero;                         /* ok: no explicit alignment (default alignment is 0) */

alignas(4) int explicit_four;              /* ok: explicit non-zero alignment
                                            * ('Use of Alignas' warning issued when enabled)
                                            */
alignas(long int) int explicit_long_int;   /* ok: explicit non-zero alignment
                                            * ('Use of Alignas' warning issued when enabled)
                                            */

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.