public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael D Kinney" <michael.d.kinney@intel.com>
To: Rebecca Cran <rebecca@bsdio.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>,
	"Gao, Liming" <gaoliming@byosoft.com.cn>
Cc: "Kinney, Michael D" <michael.d.kinney@intel.com>
Subject: Re: Enum size checks in Base.h (UINT32 not ISO C compatible)
Date: Thu, 9 Feb 2023 02:28:02 +0000	[thread overview]
Message-ID: <CO1PR11MB492997A9A95FBF2FF538F81ED2D99@CO1PR11MB4929.namprd11.prod.outlook.com> (raw)
In-Reply-To: <36f37eb3-05de-64c3-833e-f625376b6f70@bsdio.com>

Hi Rebecca,

Great catch!!!  I think the static assert verifier is incorrect.

The UEFI Spec does clearly state in Section 2.3.1 that enum values
can be type INT32 or UINT32.  The use of 0xFFFFFFFF assumes use of
only UINT32.  I agree that the correct value to assign to the 32-bit
enum value for this size check should be 0x7FFFFFFFF.

Mike

> -----Original Message-----
> From: Rebecca Cran <rebecca@bsdio.com>
> Sent: Wednesday, February 8, 2023 6:20 PM
> To: devel@edk2.groups.io; Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>
> Subject: Enum size checks in Base.h (UINT32 not ISO C compatible)
> 
> In commit 6440385b17def888544c2454ffba58384b929a22
> (https://github.com/tianocore/edk2/commit/6440385b17def888544c2454ffba58384b929a22)
> enum size checks were added.
> 
> However, according to gcc, ISO C restricts the size of enum values to
> int; building with -std=c11 -pedantic results in the error:
> 
> MdePkg/Include/Base.h:812:28: error: ISO C restricts enumerator values
> to range of ‘int’ [-Werror=pedantic]
>    812 |   __VerifyInt32EnumValue = 0xffffffff
> 
> Replacing 0xffffffff with 0x7fffffff fixes the problem.
> 
> It looks like this might change in C23, but since the use of
> _Static_assert in Base.h we require at least C11 (and I suspect most
> compilers aren't C23 compliant) which states:
> 
> "The expression that defines the value of an enumeration constant shall
> be an integer constant expression that has a value representable as an int.
> [Section 6.7.2.2]"
> 
> The UEFI Specification appears to say we require an INT32 (i.e. a signed
> int) so is the existing code wrong?
> 
> --
> Rebecca Cran

  reply	other threads:[~2023-02-09  2:28 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-09  2:20 Enum size checks in Base.h (UINT32 not ISO C compatible) Rebecca Cran
2023-02-09  2:28 ` Michael D Kinney [this message]
2023-02-09  2:52   ` Rebecca Cran
2023-02-09 15:57   ` Rebecca Cran

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CO1PR11MB492997A9A95FBF2FF538F81ED2D99@CO1PR11MB4929.namprd11.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox