Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 2 Dec 2014 13:03:55 -0500
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com
Subject: Re: [PATCH 3/4] use exact types for the [U]INTXX_C macros

On Tue, Nov 25, 2014 at 03:50:06PM +0100, Jens Gustedt wrote:
> The C standard requires the exact types [u]int_leastXX_t for these
> macros in 7.20.4.1

You've misread the standard, and I did too originally. This was fixed
in commit a591e0383a0a31ac94541846796b93fedc63a0c4. The relevant text
is (C99 7.18.4 or C11 7.20.4, paragraph 3):

"Each invocation of one of these macros shall expand to an integer
constant expression suitable for use in #if preprocessing directives.
The type of the expression shall have the same type as would an
expression of the corresponding type converted according to the
integer promotions. The value of the expression shall be that of the
argument."

In the text you're looking at:

"The macro INTN_C(value) shall expand to an integer constant
expression corresponding to the type int_leastN_t. The macro
UINTN_C(value) shall expand to an integer constant expression
corresponding to the type uint_leastN_t. For example, if
uint_least64_t is a name for the type unsigned long long int, then
UINT64_C(0x123) might expand to the integer constant 0x123ULL."

the "correspondence" referred to by "corresponding" should be
interpreted as the one via integer promotions in the above text I
cited.

IMO this part of the standard is horribly worded, and I would love to
get it improved, because this topic comes up again and again.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.