From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2140) id 645303858D33; Sun, 19 Nov 2023 06:31:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 645303858D33 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1700375471; bh=oV4FMzH5arjIOLHzfw6NLVkBJfET2mhQdO8ogLZ/ia4=; h=From:To:Subject:Date:From; b=lFkBkLq40La0T3bsNV6JOe29Ncxy71+Pnx6PpI10c7DxFp5MC7WohuMRJ5qAwFQSn Yn10fH0nBP2pCPW696x3g10FsD/41c6k47JFLNGsK3Byi/bPyGeOlRwQJtELQvEKne i+gAmj0mQ2K7n2/LLIe6AsfFzaufUZezH47au8bk= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Alexandre Oliva To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/aoliva/heads/testme)] c++: mark short-enums as packed X-Act-Checkin: gcc X-Git-Author: Alexandre Oliva X-Git-Refname: refs/users/aoliva/heads/testme X-Git-Oldrev: 0659807f36ab1bbe9998364f0e0eddffc81abacc X-Git-Newrev: 48dece46f1b5ea2fa7b3bf8c8165047484073a7c Message-Id: <20231119063111.645303858D33@sourceware.org> Date: Sun, 19 Nov 2023 06:31:11 +0000 (GMT) List-Id: https://gcc.gnu.org/g:48dece46f1b5ea2fa7b3bf8c8165047484073a7c commit 48dece46f1b5ea2fa7b3bf8c8165047484073a7c Author: Alexandre Oliva Date: Sun Nov 19 01:22:31 2023 -0300 c++: mark short-enums as packed Unlike C, C++ doesn't mark enums shortened by -fshort-enums as packed. This makes for undesirable warning differences between C and C++, e.g. c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early*.c triggers a warning about a type cast from a pointer to enum that, when packed, might not be sufficiently aligned. This change is not enough for that warning to trigger. The tree expression generated by the C++ front-end is also a little too complicated for us get to the base pointer. A separate patch takes care of that. for gcc/cp/ChangeLog * decl.cc (finish_enum_value_list): Set TYPE_PACKED if use_short_enum, and propagate it to variants. Diff: --- gcc/cp/decl.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 038c5ab71f2..f6d5645d508 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -16881,6 +16881,12 @@ finish_enum_value_list (tree enumtype) /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */ if (flag_strict_enums) set_min_and_max_values_for_integral_type (enumtype, precision, sgn); + + if (use_short_enum) + { + TYPE_PACKED (enumtype) = use_short_enum; + fixup_attribute_variants (enumtype); + } } else underlying_type = ENUM_UNDERLYING_TYPE (enumtype);