ACPICA: Introduce ACPI_FLEX_ARRAY
authorKees Cook <kees@outflux.net>
Wed, 5 Apr 2023 13:52:23 +0000 (15:52 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 6 Apr 2023 18:29:12 +0000 (20:29 +0200)
commit11132ad0176e9a6a847a9bfca77c39c2857cf85b
tree24f9cb335de4fe5bf19bbd1a4addc6a91d9b3c56
parent2a5ab99847bd41ad5f0461f519d0825f163874a6
ACPICA: Introduce ACPI_FLEX_ARRAY

ACPICA commit e73b227e8e475c20cc394f237ea35d592fdf9ec3

In order to enable using -fstrict-flex-arrays with GCC and Clang in the
Linux kernel, each trailing dynamically sized array must be defined as
proper C99 "flexible array members" (FAM). Unfortunately, ACPICA has a
bunch of technical debt, dating back to before even the GNU extension of
0-length arrays, meaning the code base has many 1-element and 0-length
arrays defined at the end of structures that should actually be FAMs.

One limitation of the C99 FAM specification is the accidental requirement
that they cannot be in unions or alone in structs. There is no real-world
reason for this, though, and, actually, the existing GNU extension
permits this for 0-length arrays (which get treated as FAMs).

Add the ACPI_FLEX_ARRAY() helper macro to work around this requirement
so that FAMs can be defined in unions or alone in structs. Since this
behavior still depends on GNU extensions, keep the macro specific to GCC
(and Clang) builds. In this way, MSVC will continue to use 0-length
arrays (since it does not support the union work-around). When MSVC
grows support for this in the future, the macro can be updated.

Link: https://github.com/acpica/acpica/commit/e73b227e
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
include/acpi/actypes.h
include/acpi/platform/acgcc.h