This is the mail archive of the
mailing list for the glibc project.
Re: [PATCH 5/6] Make error_t an enumeration on all supported OSes.
On Wed, 14 Jun 2017, Florian Weimer wrote:
> Zack Weinberg <firstname.lastname@example.org> writes:
> > We could conceivably change __errno_location to return an error_t,
> > which would mean 'p errno' in GDB would print symbolic values without
> > needing to cast it, but I hesitate to make the apparent type of errno
> > not be 'int'.
> That sounds a bit hackish because I'm not sure int * and error_t * are
> types with that level of compatibility.
Type compatibility is not transitive, and errno is required to have type
int. Thus, if enum foo is an enum whose type is compatible with int
(following the implementation-defined rules for what integer type an enum
is compatible with), then _Generic (errno, enum foo: 0) is a valid C11
expression, which would not be valid if errno had an enum type other than
enum foo (two enum types compatible with the same integer type are not
compatible with each other).
> We might also run into problems if the kernel ever adds error constants
> with values which change the representation of error_t.
If error_t is defined as an enum, I'd expect it to include INT_MIN and
INT_MAX explicitly to ensure (in practice) that the underlying type is
Joseph S. Myers