public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Rebecca Cran" <rebecca@bsdio.com>
To: "Kinney, Michael D" <michael.d.kinney@intel.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>,
	"Gao, Liming" <gaoliming@byosoft.com.cn>
Subject: Re: Enum size checks in Base.h (UINT32 not ISO C compatible)
Date: Thu, 9 Feb 2023 08:57:03 -0700	[thread overview]
Message-ID: <3fb1769f-8666-ec1b-50c3-725bbd73b68a@bsdio.com> (raw)
In-Reply-To: <CO1PR11MB492997A9A95FBF2FF538F81ED2D99@CO1PR11MB4929.namprd11.prod.outlook.com>

I've sent a patch (https://edk2.groups.io/g/devel/message/99903).

On 2/8/23 19:28, Kinney, Michael D wrote:
> 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


      parent reply	other threads:[~2023-02-09 15:57 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
2023-02-09  2:52   ` Rebecca Cran
2023-02-09 15:57   ` Rebecca Cran [this message]

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=3fb1769f-8666-ec1b-50c3-725bbd73b68a@bsdio.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