This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc 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]

Re: [PATCH 5/6] Make error_t an enumeration on all supported OSes.


On Wed, 14 Jun 2017, Florian Weimer wrote:

> Zack Weinberg <zackw@panix.com> 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 
int.

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]