musl/include/stdint.h, branch master musl - an implementation of the standard library for Linux-based systems fix signedness of UINT32_MAX and UINT64_MAX at the preprocessor level 2014年12月21日T07:30:29+00:00 Rich Felker dalias@aerifal.cx 2014年12月21日T07:30:29+00:00 dac4fc49ae3ccb40bae4ef00fb2d93027f4ee9e1 per the rules for hexadecimal integer constants, the previous definitions were correctly treated as having unsigned type except possibly when used in preprocessor conditionals, where all artithmetic takes place as intmax_t or uintmax_t. the explicit 'u' suffix ensures that they are treated as unsigned in all contexts.
per the rules for hexadecimal integer constants, the previous
definitions were correctly treated as having unsigned type except
possibly when used in preprocessor conditionals, where all artithmetic
takes place as intmax_t or uintmax_t. the explicit 'u' suffix ensures
that they are treated as unsigned in all contexts.
fix signedness of WINT_MIN expression 2014年12月17日T21:52:37+00:00 Rich Felker dalias@aerifal.cx 2014年12月17日T21:52:37+00:00 aee9b1526247f74e9b755b50e102b3b4ce2aac1d since wint_t is unsigned, WINT_MIN needs to expand to an unsigned zero.
since wint_t is unsigned, WINT_MIN needs to expand to an unsigned zero.
change wint_t to unsigned 2013年07月22日T17:05:41+00:00 Rich Felker dalias@aerifal.cx 2013年07月22日T17:05:41+00:00 c4dd0c98bae8e3583f68ba5b30db491055ab2322 aside from the obvious C++ ABI purpose for this change, it also brings musl into alignment with the compiler's idea of the definition of wint_t (use in -Wformat), and makes the situation less awkward on ARM, where wchar_t is unsigned. internal code using wint_t and WEOF was checked against this change, and while a few cases of storing WEOF into wchar_t were found, they all seem to operate properly with the natural conversion from unsigned to signed.
aside from the obvious C++ ABI purpose for this change, it also brings
musl into alignment with the compiler's idea of the definition of
wint_t (use in -Wformat), and makes the situation less awkward on ARM,
where wchar_t is unsigned.
internal code using wint_t and WEOF was checked against this change,
and while a few cases of storing WEOF into wchar_t were found, they
all seem to operate properly with the natural conversion from unsigned
to signed.
refactor headers, especially alltypes.h, and improve C++ ABI compat 2013年07月22日T15:22:36+00:00 Rich Felker dalias@aerifal.cx 2013年07月22日T15:22:36+00:00 9448b0513e2eec020fbca9c10412b83df5027a16 the arch-specific bits/alltypes.h.sh has been replaced with a generic alltypes.h.in and minimal arch-specific bits/alltypes.h.in. this commit is intended to have no functional changes except: - exposing additional symbols that POSIX allows but does not require - changing the C++ name mangling for some types - fixing the signedness of blksize_t on powerpc (POSIX requires signed) - fixing the limit macros for sig_atomic_t on x86_64 - making dev_t an unsigned type (ABI matching goal, and more logical) in addition, some types that were wrongly defined with long on 32-bit archs were changed to int, and vice versa; this change is non-functional except for the possibility of making pointer types mismatch, and only affects programs that were using them incorrectly, and only at build-time, not runtime. the following changes were made in the interest of moving non-arch-specific types out of the alltypes system and into the headers they're associated with, and also will tend to improve application compatibility: - netdb.h now includes netinet/in.h (for socklen_t and uint32_t) - netinet/in.h now includes sys/socket.h and inttypes.h - sys/resource.h now includes sys/time.h (for struct timeval) - sys/wait.h now includes signal.h (for siginfo_t) - langinfo.h now includes nl_types.h (for nl_item) for the types in stdint.h: - types which are of no interest to other headers were moved out of the alltypes system. - fast types for 8- and 64-bit are hard-coded (at least for now); only the 16- and 32-bit ones have reason to vary by arch. and the following types have been changed for C++ ABI purposes; - mbstate_t now has a struct tag, __mbstate_t - FILE's struct tag has been changed to _IO_FILE - DIR's struct tag has been changed to __dirstream - locale_t's struct tag has been changed to __locale_struct - pthread_t is defined as unsigned long in C++ mode only - fpos_t now has a struct tag, _G_fpos64_t - fsid_t's struct tag has been changed to __fsid_t - idtype_t has been made an enum type (also required by POSIX) - nl_catd has been changed from long to void * - siginfo_t's struct tag has been removed - sigset_t's has been given a struct tag, __sigset_t - stack_t has been given a struct tag, sigaltstack - suseconds_t has been changed to long on 32-bit archs - [u]intptr_t have been changed from long to int rank on 32-bit archs - dev_t has been made unsigned summary of tests that have been performed against these changes: - nsz's libc-test (diff -u before and after) - C++ ABI check symbol dump (diff -u before, after, glibc) - grepped for __NEED, made sure types needed are still in alltypes - built gcc 3.4.6
the arch-specific bits/alltypes.h.sh has been replaced with a generic
alltypes.h.in and minimal arch-specific bits/alltypes.h.in.
this commit is intended to have no functional changes except:
- exposing additional symbols that POSIX allows but does not require
- changing the C++ name mangling for some types
- fixing the signedness of blksize_t on powerpc (POSIX requires signed)
- fixing the limit macros for sig_atomic_t on x86_64
- making dev_t an unsigned type (ABI matching goal, and more logical)
in addition, some types that were wrongly defined with long on 32-bit
archs were changed to int, and vice versa; this change is
non-functional except for the possibility of making pointer types
mismatch, and only affects programs that were using them incorrectly,
and only at build-time, not runtime.
the following changes were made in the interest of moving
non-arch-specific types out of the alltypes system and into the
headers they're associated with, and also will tend to improve
application compatibility:
- netdb.h now includes netinet/in.h (for socklen_t and uint32_t)
- netinet/in.h now includes sys/socket.h and inttypes.h
- sys/resource.h now includes sys/time.h (for struct timeval)
- sys/wait.h now includes signal.h (for siginfo_t)
- langinfo.h now includes nl_types.h (for nl_item)
for the types in stdint.h:
- types which are of no interest to other headers were moved out of
 the alltypes system.
- fast types for 8- and 64-bit are hard-coded (at least for now); only
 the 16- and 32-bit ones have reason to vary by arch.
and the following types have been changed for C++ ABI purposes;
- mbstate_t now has a struct tag, __mbstate_t
- FILE's struct tag has been changed to _IO_FILE
- DIR's struct tag has been changed to __dirstream
- locale_t's struct tag has been changed to __locale_struct
- pthread_t is defined as unsigned long in C++ mode only
- fpos_t now has a struct tag, _G_fpos64_t
- fsid_t's struct tag has been changed to __fsid_t
- idtype_t has been made an enum type (also required by POSIX)
- nl_catd has been changed from long to void *
- siginfo_t's struct tag has been removed
- sigset_t's has been given a struct tag, __sigset_t
- stack_t has been given a struct tag, sigaltstack
- suseconds_t has been changed to long on 32-bit archs
- [u]intptr_t have been changed from long to int rank on 32-bit archs
- dev_t has been made unsigned
summary of tests that have been performed against these changes:
- nsz's libc-test (diff -u before and after)
- C++ ABI check symbol dump (diff -u before, after, glibc)
- grepped for __NEED, made sure types needed are still in alltypes
- built gcc 3.4.6
remove __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS checks in stdint.h 2013年04月23日T00:47:34+00:00 Rich Felker dalias@aerifal.cx 2013年04月23日T00:47:34+00:00 43653c1250ad5eb5385d7e08292ad047420f8d25 C++11, the first C++ with stdint.h, requires the previously protected macros to be exposed unconditionally by stdint.h. apparently these checks were an early attempt by the C committee to guess what the C++ committee would want, and they guessed wrong.
C++11, the first C++ with stdint.h, requires the previously protected
macros to be exposed unconditionally by stdint.h. apparently these
checks were an early attempt by the C committee to guess what the C++
committee would want, and they guessed wrong.
fix type issues in stdint.h so underlying types of 64-bit types match ABI 2013年04月05日T00:09:50+00:00 Rich Felker dalias@aerifal.cx 2013年04月05日T00:09:50+00:00 f77bab5933071c46edc3da22b8c344533dd5fca3
eliminate bits/wchar.h 2013年04月04日T23:57:23+00:00 Rich Felker dalias@aerifal.cx 2013年04月04日T23:57:23+00:00 c7af2710007865861e789b29e803f0f55deba93f the preprocessor can reliably determine the signedness of wchar_t. L'0円' is used for 0 in the expressions so that, if the underlying type of wchar_t is long rather than int, the promoted type of the expression will match the type of wchar_t.
the preprocessor can reliably determine the signedness of wchar_t.
L'0円' is used for 0 in the expressions so that, if the underlying type
of wchar_t is long rather than int, the promoted type of the
expression will match the type of wchar_t.
fix signedness errors in stdint.h constant macros 2012年06月08日T15:11:44+00:00 Rich Felker dalias@aerifal.cx 2012年06月08日T15:11:44+00:00 3d649468c7315d43aa99a44e882118d6872cb6ec the types of these expressions must match the integer promotions. unsigned 8- and 16-bit values promote to signed int, not unsigned int.
the types of these expressions must match the integer promotions.
unsigned 8- and 16-bit values promote to signed int, not unsigned int.
revert hacks for types of stdint.h integer constant macros 2012年02月07日T17:08:27+00:00 Rich Felker dalias@aerifal.cx 2012年02月07日T17:08:27+00:00 a591e0383a0a31ac94541846796b93fedc63a0c4 per 7.18.4: 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. the key phrase is "converted according to the integer promotions". thus there is no intent or allowance that the expression have smaller-than-int types.
per 7.18.4: 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.
the key phrase is "converted according to the integer promotions".
thus there is no intent or allowance that the expression have
smaller-than-int types.
make [U]INTn_C() macros have the right type... 2011年10月04日T15:50:35+00:00 Rich Felker dalias@aerifal.cx 2011年10月04日T15:50:35+00:00 73f5ff4e8646a5fddbeae5070a53f05870e51dd1 ...and still be valid in #if directives.
...and still be valid in #if directives.

AltStyle によって変換されたページ (->オリジナル) /