From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2140) id 84C773858289; Sun, 19 Nov 2023 08:11:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 84C773858289 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1700381478; bh=dIX+c3Ec6lQPOzUHE/VYerMB2yghOlMdn5YSov6DNqo=; h=From:To:Subject:Date:From; b=JaVBvIHm7Amm9Qq8uXBxusL1xjsR4r5/UWuKLCYHzFwmeI514GN4a+gr8cmi06gJb ElJciTaLgSYRiji+BJg4Lac89E3V0qCPyI44rYtDohSpfKikNMTJKbEwv4O9Kq/ocL sSIUm5whT8+Sjmffc8DbF+tSu8yVFR+KzJk1t0qA= 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: ff0f1d111893309521e776866497bf8a4de67dfe X-Git-Newrev: 985ec4de20aa6b254d0b938a4d682236068027c0 Message-Id: <20231119081118.84C773858289@sourceware.org> Date: Sun, 19 Nov 2023 08:11:18 +0000 (GMT) List-Id: https://gcc.gnu.org/g:985ec4de20aa6b254d0b938a4d682236068027c0 commit 985ec4de20aa6b254d0b938a4d682236068027c0 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);