This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Guys,
On Sep 20 00:25, Christopher Faylor wrote:
> On Tue, Sep 20, 2005 at 04:47:27AM +0200, Ralf Corsepius wrote:
> >On Mon, 2005-09-19 at 22:11 -0400, Christopher Faylor wrote:
> >>I really don't see any need to use the RTEMS stuff especially given the
> >>"it's not broke" principle.
> >
> >Well, the RTEMS stdint.h/inttypes.h aren't specific to RTEMS.
>
> Again, since there is nothing wrong with the present cygwin
> implementation, there is no reason to change what we have.
First, Jeff, would you mind to wait a few hours before changing stuff
which affects all targets like that? The whole process of checkin plus
discussion took place in one single night from my timezone's point of view.
I was going to be a bit more relaxed about this issue than Chris, so
I created a thorough testcase to check how this affects Cygwin. The
attached, very simple testcase builds and runs fine using Cygwin's
stdint.h/inttypes.h. FWIW, the same testcase runs fine on Linux with
glibc.
However, it doesn't even build when using RTMES stdint.h/inttypes.h,
so I don't think the RTEMS stdint.h was ready for prime time:
- All *fast* typedefs are missing (int_fast8_t, etc.) and all
*FAST* definitions (INT_FAST8_MIN, etc.) are missing.
This is marked as "todo" in the header comment.
- A couple of disturbing warnings about INT32_MIN, INT64_MIN, INT64_MAX
and the corresponding unsigned defnitions:
INT32_MIN: warning: this decimal constant is unsigned only in ISO C90
INT64_MIN: integer constant is so large that it is unsigned
this decimal constant is unsigned only in ISO C90
INT64_MAX: integer constant is too large for "long" type
UINT32_MAX: warning: this decimal constant is unsigned only in ISO C90
UINT64_MAX: warning: integer constant is so large that it is unsigned
warning: this decimal constant is unsigned only in ISO C90
warning: integer constant is too large for "long" type
When uncommenting every other problem in the file, there's also a bug
in evaluating the INT32*_MIN values:
INT32_MIN, INTLEAST32_MIN are printed as the positive value
2147483648, not -2147483648.
- All *LEAST* definitions are incorrect because RTEMS' stdint.h defines
them omitting an underscore after the type:
RTEMS: INTLEAST8_MIN
SUSv3: INT_LEAST8_MIN
- All INTPTR* definitions are missing (INTPTR_MIN, INTPTR_MAX, UINTPTR_MAX).
- All INTMAX* definitions are missing (INTMAX_MIN, INTMAX_MAX, UINTMAX_MAX).
- The condition, when to include limits.h and when not to include it,
seems not to be foolproof. I get these error message as well, unless
I manually include limits.h prior to including inttypes.h:
stdint-test.c:296: error: `LONG_MAX' undeclared here (not in a function)
stdint-test.c:299: error: `INT_MAX' undeclared here (not in a function)
- Definitions of PTRDIFF_MIN and PTRDIFF_MAX are missing.
- Definitions for WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX are missing.
The missing WINT macros are marked as "todo" in the header comment.
I didn't check if all PRI* and SCN* definitions have the right value, though.
Corinna
--
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat, Inc.
Attachment:
stdint-test.c
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |