diff options
author | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1998-03-03 21:37:38 +0000 |
---|---|---|
committer | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1998-03-03 21:37:38 +0000 |
commit | c826e751760901de543f4640467e3a08df7f49bf (patch) | |
tree | 6a2323a78664ba45b78df1709ff3cc077db63ccd /gnu/usr.bin/gcc/enquire.c | |
parent | a4511fe6a5dc69a771b5ffdf64ba574c959cf37d (diff) |
GCC 2.8.0 merge
Diffstat (limited to 'gnu/usr.bin/gcc/enquire.c')
-rw-r--r-- | gnu/usr.bin/gcc/enquire.c | 115 |
1 files changed, 70 insertions, 45 deletions
diff --git a/gnu/usr.bin/gcc/enquire.c b/gnu/usr.bin/gcc/enquire.c index 763b1a44c9d..178d029d192 100644 --- a/gnu/usr.bin/gcc/enquire.c +++ b/gnu/usr.bin/gcc/enquire.c @@ -1,5 +1,5 @@ /* Everything you wanted to know about your machine and C compiler, - but didn't know who to ask. */ + but didn't know who to ask. */ #ifndef VERSION #define VERSION "4.3" @@ -307,7 +307,7 @@ #endif /* NO_FILE */ #endif /* FILENAME */ -/* If PASS isn't defined, then this is the first pass over this file. */ +/* If PASS isn't defined, then this is the first pass over this file. */ #ifndef PASS #ifndef SEP #define PASS 1 @@ -387,6 +387,11 @@ #endif /* STDC */ /* include files */ +/* Stdio.h might include limits.h, and limits.h might include float.h, and + float.h is probably the float.h put together by the gcc makefile to + cause errors. We use our special define to assure float.h that we don't + really need it. */ +#define __GCC_FLOAT_NOT_NEEDED #include <stdio.h> #ifdef STDC @@ -416,6 +421,13 @@ #ifdef VERIFY #include "limits.h" +#endif + +#ifndef SYS_FLOAT_H_WRAP +#define SYS_FLOAT_H_WRAP 0 +#endif + +#if SYS_FLOAT_H_WRAP || defined VERIFY #include "float.h" #endif @@ -472,7 +484,8 @@ Procedure endian ARGS((int bits_per_byte)); int exponent ARGS((Long_double x, double *fract, int *exp)); int floor_log ARGS((int base, Long_double x)); Procedure f_define ARGS((char *desc, char *extra, char *sort, char *name, - int prec, Long_double val, char *mark)); + int prec, Long_double val, Long_double req, + char *mark)); Procedure i_define ARGS((char *desc, char *extra, char *sort, char *name, long val, long lim, long req, char *mark)); Procedure u_define ARGS((char *desc, char *extra, char *sort, char *name, @@ -615,7 +628,7 @@ Procedure croak(place) int place; { farewell(bugs+1); /* An exit isn't essential here, but avoids loops */ } -/* This is here in case alloca.c is used, which calls this. */ +/* This is here in case alloca.c is used, which calls this. */ char *xmalloc(size) unsigned size; { char *value = (char *)malloc(size); if (value == 0) { @@ -699,6 +712,8 @@ int main(argc, argv) int argc; char *argv[]; { if (F) { printf ("#ifndef _FLOAT_H___\n"); printf ("#define _FLOAT_H___\n"); + if (SYS_FLOAT_H_WRAP) + printf ("#include_next <float.h>\n"); } #ifdef ID printf("%sProduced on %s by enquire version %s, CWI, Amsterdam%s\n", @@ -767,7 +782,7 @@ int main(argc, argv) int argc; char *argv[]; { size/=2; } - Vprintf("%sMemory mallocatable ~= %ld Kbytes%s\n", + Vprintf("%sMemory allocable ~= %ld Kbytes%s\n", co, (total+511)/512, oc); } #endif @@ -793,6 +808,8 @@ Procedure describe(description, extra) char *description, *extra; { Procedure i_define(desc, extra, sort, name, val, lim, req, mark) char *desc, *extra, *sort, *name; long val, lim, req; char *mark; { + if (SYS_FLOAT_H_WRAP && F && val == req) + return; /* Produce a #define for a signed int type */ describe(desc, extra); printf("#undef %s%s\n", sort, name); @@ -801,21 +818,19 @@ Procedure i_define(desc, extra, sort, name, val, lim, req, mark) } else if (val + lim < 0) { /* We may not produce a constant like -1024 if the max allowable value is 1023. It has then to be output as - -1023-1. lim is the max allowable value. */ + -1023-1. lim is the max allowable value. */ printf("#define %s%s (%ld%s%ld%s)\n", sort, name, -lim, mark, val+lim, mark); } else { printf("#define %s%s (%ld%s)\n", sort, name, val, mark); } - /* If VERIFY is not set, val and req are just the same value; - if it is set, val is the value as calculated, and req is - the #defined constant - */ +#ifdef VERIFY if (val != req) { printf("%s*** Verify failed for above #define!\n", co); printf(" Compiler has %ld for value%s\n\n", req, oc); bugs++; } +#endif Vprintf("\n"); } @@ -825,17 +840,21 @@ Procedure u_define(desc, extra, sort, name, val, req, mark) describe(desc, extra); printf("#undef %s%s\n", sort, name); printf("#define %s%s %lu%s%s\n", sort, name, val, U, mark); +#ifdef VERIFY if (val != req) { printf("%s*** Verify failed for above #define!\n", co); printf(" Compiler has %lu for value%s\n\n", req, oc); bugs++; } +#endif Vprintf("\n"); } -Procedure f_define(desc, extra, sort, name, precision, val, mark) +Procedure f_define(desc, extra, sort, name, precision, val, req, mark) char *desc, *extra, *sort, *name; int precision; - Long_double val; char *mark; { + Long_double val, req; char *mark; { + if (SYS_FLOAT_H_WRAP && F && val == req) + return; /* Produce a #define for a float/double/long double */ describe(desc, extra); printf ("#undef %s%s\n", sort, name); @@ -927,7 +946,7 @@ char *fake_f_rep(type, val) char *type; Long_double val; { union { unsigned int i[4]; Long_double ld;} u; u.i[0] = u.i[1] = u.i[2] = u.i[3] = 0; u.ld = val; - sprintf(buf, "(__extension__ ((union __convert_long_double) {0x%x, 0x%x, 0x%x, 0x%x}).__convert_long_double_d)", + sprintf(buf, "(__extension__ ((union __convert_long_double) {__convert_long_double_i: {0x%x, 0x%x, 0x%x, 0x%x}}).__convert_long_double_d)", u.i[0], u.i[1], u.i[2], u.i[3]); return buf; } @@ -1085,7 +1104,7 @@ int promotions() { eek_a_bug("promotions don't work properly in conditional expressions\n"); } - showtype("unsigned short promotes to", Promoted((unsigned short)0)); + showtype("unsigned short promotes to", Promoted((unsigned short) 0)); showtype("long+unsigned gives", sl+ui); return 0; } @@ -1103,7 +1122,7 @@ Procedure check_defines() { usign= Signed; #else /* Implementations promote unsigned short differently */ - usign= is_signed((unsigned short)0); + usign= is_signed((unsigned short) 0); #endif if (L) { @@ -1549,7 +1568,7 @@ if (V) printf ("%s%s %s %s%s\n", co, "Type size_t is", /* Alignment constants ********************************************/ #define alignment(TYPE) \ - ((long)((char *)&((struct{char c; TYPE d;}*)0)->d - (char *)0)) + ((long)((char *)&((struct{char c; TYPE d;}*)0)->d - (char *) 0)) Vprintf("\n%sALIGNMENTS%s\n", co, oc); @@ -1585,18 +1604,20 @@ if (V) printf ("%s%s %s %s%s\n", co, "Type size_t is", Vprintf("\n%sPROPERTIES OF POINTERS%s\n", co, oc); - if ((long) (char *) &variable == (long) (int *) &variable) + if ((long) (char *) &variable == (long) (int *) &variable) { Vprintf("%sChar and int pointer formats seem identical%s\n", co, oc); - else + } else { Vprintf("%sChar and int pointer formats are different%s\n", co, oc); - if ((long) (char *) &variable == (long) (function *) &variable) + } + if ((long) (char *) &variable == (long) (function *) &variable) { Vprintf("%sChar and function pointer formats seem identical%s\n", co, oc); - else + } else { Vprintf("%sChar and function pointer formats are different%s\n", co, oc); + } if (V) { if ("abcd"=="abcd") @@ -1740,7 +1761,6 @@ extern char *f_rep(); #define UPROP usprop #define Uname "USHRT" -#ifdef VERIFY #ifdef SHRT_MAX #define I_MAX SHRT_MAX #endif @@ -1784,7 +1804,6 @@ extern char *f_rep(); #ifdef FLT_MAX_10_EXP #define F_MAX_10_EXP FLT_MAX_10_EXP #endif -#endif /* VERIFY */ #endif /* PASS1 */ @@ -1826,7 +1845,6 @@ extern char *f_rep(); #define UPROP uiprop #define Uname "UINT" -#ifdef VERIFY #ifdef INT_MAX #define I_MAX INT_MAX #endif @@ -1864,7 +1882,6 @@ extern char *f_rep(); #ifdef DBL_MAX_10_EXP #define F_MAX_10_EXP DBL_MAX_10_EXP #endif -#endif /* VERIFY */ #endif /* PASS2 */ @@ -1912,7 +1929,6 @@ extern char *f_rep(); #define UPROP ulprop #define Uname "ULONG" -#ifdef VERIFY #ifdef LONG_MAX #define I_MAX LONG_MAX #endif @@ -1950,52 +1966,53 @@ extern char *f_rep(); #ifdef LDBL_MAX_10_EXP #define F_MAX_10_EXP LDBL_MAX_10_EXP #endif -#endif /* VERIFY */ #endif /* PASS3 */ +#define UNDEFINED (-2) + #ifndef I_MAX -#define I_MAX int_max +#define I_MAX ((unsigned long) UNDEFINED) #endif #ifndef I_MIN -#define I_MIN int_min +#define I_MIN ((unsigned long) UNDEFINED) #endif #ifndef U_MAX -#define U_MAX u_max +#define U_MAX ((unsigned long) UNDEFINED) #endif #ifndef F_RADIX -#define F_RADIX f_radix +#define F_RADIX UNDEFINED #endif #ifndef F_MANT_DIG -#define F_MANT_DIG f_mant_dig +#define F_MANT_DIG UNDEFINED #endif #ifndef F_DIG -#define F_DIG f_dig +#define F_DIG UNDEFINED #endif #ifndef F_ROUNDS -#define F_ROUNDS f_rounds +#define F_ROUNDS UNDEFINED #endif #ifndef F_EPSILON -#define F_EPSILON f_epsilon +#define F_EPSILON ((Number) UNDEFINED) #endif #ifndef F_MIN_EXP -#define F_MIN_EXP f_min_exp +#define F_MIN_EXP UNDEFINED #endif #ifndef F_MIN -#define F_MIN f_min +#define F_MIN ((Number) UNDEFINED) #endif #ifndef F_MIN_10_EXP -#define F_MIN_10_EXP f_min_10_exp +#define F_MIN_10_EXP UNDEFINED #endif #ifndef F_MAX_EXP -#define F_MAX_EXP f_max_exp +#define F_MAX_EXP UNDEFINED #endif #ifndef F_MAX -#define F_MAX f_max +#define F_MAX ((Number) UNDEFINED) #endif #ifndef F_MAX_10_EXP -#define F_MAX_10_EXP f_max_10_exp +#define F_MAX_10_EXP UNDEFINED #endif #ifndef VERIFY @@ -2400,7 +2417,9 @@ int FPROP(bits_per_byte) int bits_per_byte; { } if (PASS == 1) { /* only for FLT */ flt_rounds= f_rounds; - if (F) + /* Prefer system float.h definition of F_ROUNDS, + since it's more likely to be right than our "1". */ + if (F && (!SYS_FLOAT_H_WRAP || F_ROUNDS == UNDEFINED)) i_define(D_FLT_ROUNDS, "", "FLT", "_ROUNDS", (long) f_rounds, 1L, (long) F_ROUNDS, ""); } else if (f_rounds != flt_rounds) { @@ -2487,7 +2506,9 @@ int FPROP(bits_per_byte) int bits_per_byte; { /* Possible loss of precision warnings here from non-stdc compilers */ if (F) f_define(D_EPSILON, thing, - Fname, "_EPSILON", digs, (Long_double) f_epsilon, MARK); + Fname, "_EPSILON", digs, + (Long_double) f_epsilon, + (Long_double) F_EPSILON, MARK); if (V || F) F_check(digs, (Long_double) f_epsilon); Unexpected(21); if (F) Validate(digs, (Long_double) f_epsilon, (Long_double) F_EPSILON, @@ -2565,7 +2586,9 @@ int FPROP(bits_per_byte) int bits_per_byte; { /* Possible loss of precision warnings here from non-stdc compilers */ if (setjmp(lab) == 0) { if (F) f_define(D_MIN, thing, - Fname, "_MIN", digs, (Long_double) f_min, MARK); + Fname, "_MIN", digs, + (Long_double) f_min, + (Long_double) F_MIN, MARK); if (V || F) F_check(digs, (Long_double) f_min); } else { eek_a_bug("xxx_MIN caused a trap"); @@ -2659,7 +2682,9 @@ int FPROP(bits_per_byte) int bits_per_byte; { if (setjmp(lab)==0) { /* Possible loss of precision warnings here from non-stdc compilers */ if (F) f_define(D_MAX, thing, - Fname, "_MAX", digs, (Long_double) f_max, MARK); + Fname, "_MAX", digs, + (Long_double) f_max, + (Long_double) F_MAX, MARK); if (V || F) F_check(digs, (Long_double) f_max); } else { eek_a_bug("xxx_MAX caused a trap"); @@ -2686,7 +2711,7 @@ int FPROP(bits_per_byte) int bits_per_byte; { mantbits=floor_log(2, (Long_double)f_radix)*f_mant_dig; if (mantbits == 64 && iexp == 15 - && f_max_exp+f_min_exp > 0 /* ??? f_min_exp may be wrong. */ + && f_max_exp+f_min_exp > 0 /* ??? f_min_exp may be wrong. */ && mantbits+iexp+17 == (int)sizeof(Number)*bits_per_byte) { Vprintf("%sArithmetic probably doesn't use a hidden bit%s\n", co, oc); Vprintf("%sIt's probably 80387 or 68881 extended real%s\n", co, oc); |