C and C++


LANG.STRUCT.ALIGNAS.TMAS : Too Many Alignment Specifiers

Summary

A declaration of an object (variable or field) has more than one alignas specification. This includes the case where there are multiple specifications with the same alignment value.

This class is a strict subset of Use of Alignas.

See also Inconsistent Alignment Specifications.

Properties

Class Name Too Many Alignment Specifiers
Significance style
Mnemonic LANG.STRUCT.ALIGNAS.TMAS
Categories
MisraC2023 MisraC2023:1.4 Emergent language features shall not be used
  MisraC2023:8.17 At most one explicit alignment specifier should appear in an object declaration
Misra2012 Misra2012:1.4 Emergent language features shall not be used
  Misra2012:8.17 At most one explicit alignment specifier should appear in an object declaration
CERT-C 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="Too Many Alignment Specifiers"
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

/* LANG.STRUCT.ALIGNAS.TMAS.c */

#include "LANG.STRUCT.ALIGNAS.TMAS.h"

alignas(8) int hc;                              /* ok: one alignment specifier
                                                 * - specifier in .c file is in a different declaration
                                                 * ('Use of Alignas' warning issued when enabled)
                                                 */
int hc_none;                                    /* ok: no alignment specifiers */
/* LANG.STRUCT.ALIGNAS.TMAS.h */

#include <stdalign.h>

extern alignas(8) int hc_same;                  /* ok: one alignment specifier
                                                 * - specifier in .c file is in a different declaration
                                                 * ('Use of Alignas' warning issued when enabled)
                                                 */
extern int hc_none;                             /* ok: no alignment specifiers */

extern alignas(4) int h_single;                 /* ok: only one alignment specifier
                                                 * ('Use of Alignas' warning issued when enabled)
                                                 */
extern alignas(4) alignas(4) int h_same; /* 'Too Many Alignment Specifiers' warning issued here
                                          * ('Use of Alignas' warnings also issued when enabled)
                                          */
extern alignas(4) alignas(8) int h_diff; /* 'Too Many Alignment Specifiers' warning issued here
                                          * ('Inconsistent Alignment Specifications' and 'Use of Alignas'
                                          * warnings also issued when enabled)
                                          */

Relevant Configuration File Parameters

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