c90-printf-2.c, [...]: Determine the type for intmax_t in the compiler using __typeof__ and the type...
* gcc.dg/c90-printf-2.c, gcc.dg/c90-scanf-2.c: Determine the type for intmax_t in the compiler using __typeof__ and the type rules for conditional expressions. From-SVN: r36873
This commit is contained in:
parent
1fd2f51018
commit
d79d42daae
3 changed files with 40 additions and 16 deletions
|
@ -1,3 +1,9 @@
|
|||
2000-10-15 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* gcc.dg/c90-printf-2.c, gcc.dg/c90-scanf-2.c: Determine the type
|
||||
for intmax_t in the compiler using __typeof__ and the type rules
|
||||
for conditional expressions.
|
||||
|
||||
2000-10-13 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gcc.dg/20001012-1.c: New test.
|
||||
|
|
|
@ -13,14 +13,23 @@ __extension__ typedef long long int llong;
|
|||
/* This next definition is a kludge. When GCC has a <stdint.h> it
|
||||
should be used.
|
||||
*/
|
||||
#include <limits.h>
|
||||
#if INT_MAX == __LONG_LONG_MAX__
|
||||
typedef int intmax_t;
|
||||
#elif LONG_MAX == __LONG_LONG_MAX__
|
||||
typedef long intmax_t;
|
||||
#else
|
||||
__extension__ typedef long long intmax_t;
|
||||
#endif
|
||||
/* (T *) if E is zero, (void *) otherwise. */
|
||||
#define type_if_not(T, E) __typeof__(0 ? (T *)0 : (void *)(E))
|
||||
|
||||
/* (T *) if E is nonzero, (void *) otherwise. */
|
||||
#define type_if(T, E) type_if_not(T, !(E))
|
||||
|
||||
/* Combine pointer types, all but one (void *). */
|
||||
#define type_comb2(T1, T2) __typeof__(0 ? (T1)0 : (T2)0)
|
||||
#define type_comb3(T1, T2, T3) type_comb2(T1, type_comb2(T2, T3))
|
||||
|
||||
#define maybe_int_ptr type_if(int, sizeof(int) == sizeof(llong))
|
||||
#define maybe_long_ptr type_if(long, sizeof(long) == sizeof(llong) && sizeof(long) > sizeof(int))
|
||||
#define maybe_long_long_ptr type_if(llong, sizeof(llong) > sizeof(long))
|
||||
|
||||
#define intmax_type_ptr type_comb3(maybe_int_ptr, maybe_long_ptr, maybe_long_long_ptr)
|
||||
|
||||
typedef __typeof__(*((intmax_type_ptr)0)) intmax_t;
|
||||
|
||||
extern int printf (const char *, ...);
|
||||
|
||||
|
|
|
@ -13,14 +13,23 @@ __extension__ typedef long long int llong;
|
|||
/* This next definition is a kludge. When GCC has a <stdint.h> it
|
||||
should be used.
|
||||
*/
|
||||
#include <limits.h>
|
||||
#if INT_MAX == __LONG_LONG_MAX__
|
||||
typedef int intmax_t;
|
||||
#elif LONG_MAX == __LONG_LONG_MAX__
|
||||
typedef long intmax_t;
|
||||
#else
|
||||
__extension__ typedef long long intmax_t;
|
||||
#endif
|
||||
/* (T *) if E is zero, (void *) otherwise. */
|
||||
#define type_if_not(T, E) __typeof__(0 ? (T *)0 : (void *)(E))
|
||||
|
||||
/* (T *) if E is nonzero, (void *) otherwise. */
|
||||
#define type_if(T, E) type_if_not(T, !(E))
|
||||
|
||||
/* Combine pointer types, all but one (void *). */
|
||||
#define type_comb2(T1, T2) __typeof__(0 ? (T1)0 : (T2)0)
|
||||
#define type_comb3(T1, T2, T3) type_comb2(T1, type_comb2(T2, T3))
|
||||
|
||||
#define maybe_int_ptr type_if(int, sizeof(int) == sizeof(llong))
|
||||
#define maybe_long_ptr type_if(long, sizeof(long) == sizeof(llong) && sizeof(long) > sizeof(int))
|
||||
#define maybe_long_long_ptr type_if(llong, sizeof(llong) > sizeof(long))
|
||||
|
||||
#define intmax_type_ptr type_comb3(maybe_int_ptr, maybe_long_ptr, maybe_long_long_ptr)
|
||||
|
||||
typedef __typeof__(*((intmax_type_ptr)0)) intmax_t;
|
||||
|
||||
extern int scanf (const char *, ...);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue