From: rich@Rice.edu (& Murphey)
Subject: Re: [386bsd] gcc 2.3.2 compile problems
Reply-To: Rich@rice.edu
Organization: Department of Electrical and Computer Engineering, Rice
	University
	<BLYMN.92Dec28182637@siren.awadi.com.au>
Date: Thu, 7 Jan 1993 03:50:50 GMT

>>>>> In article <BLYMN.92Dec28182637@siren.awadi.com.au>, blymn@awadi.com.au (Brett Lymn) writes:
Brett> NNTP-Posting-Host: siren.awadi.com.au

>>>>> On 27 Dec 92 16:13:19, blymn@awadi.com.au (Brett Lymn) said:
Brett> NNTP-Posting-Host: siren.awadi.com.au

>>>>> On 20 Dec 92 00:43:03 GMT, dhess@Xenon.Stanford.EDU (Drew William Hess) said:

D> I'm having problems getting gcc 2.3.2 to compile under 386bsd.  It's choking
D> on enquire.c, line 2303, and complaining about a floating point constant
D> being out of range.  Can someone please post or email me a fix?  Thanks.

Brett> I would not worry about it too much, if you have a look at the
Brett> comments in the .h file enquire generates you will see that the errors
Brett> that it has detected are rather infesteminal (ie the order of 1e-308)
Brett> so I suspect the rounding is wrong rather than anything else more
Brett> serious.

Brett> Apart from that gcc 2.3.2 works fine, I have compiled X with it with
Brett> only one problem, in /usr/include stdlib.h there is the following
Brett> ifdef:

Brett> Thanks to L. Jonas Olsson for suggesting:

Brett> #if defined(alloca) && (alloca == __builtin_alloca)
Brett> #if __GNUC__ < 2 /* do not define for gcc 2.3.2 */
Brett> void    *alloca __P((int));     /* built-in for gcc */
Brett> #endif
Brett> #else
Brett> void    *alloca __P((size_t));
Brett> #endif /* __GNUC__ */

Brett> Which will ifdef out the alloca definition for gcc 2.x but not the gcc
Brett> 1.39 (needed for the kernel rebuilds by the unadventurous ;-)

Brett> --
Brett> Brett Lymn

Bruce Evans and I discussed the alloca patch at length and after going
back and forth on various forms such as that above settled on the
following:

diff -c stdlib.h.dist stdlib.h
*** stdlib.h.dist	Mon Jul 13 08:24:09 1992
--- stdlib.h	Thu Dec 31 14:05:51 1992
***************
*** 102,108 ****
  #endif /* not ANSI */
  
  #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
! void	*alloca __P((size_t));	/* built-in for gcc */
  extern	 char *optarg;			/* getopt(3) external variables */
  extern	 int optind;
  extern	 int opterr;
--- 102,110 ----
  #endif /* not ANSI */
  
  #if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
! #ifndef alloca
! void	*alloca __P((size_t));
! #endif
  extern	 char *optarg;			/* getopt(3) external variables */
  extern	 int optind;
  extern	 int opterr;


This works around the inconsistency between alloca declarations in
stdlib.h and that internal to gcc 1.39.  It's also what has been
proposed for inclusion in the next XFree86 release.

The declaration needs to be avoided only when using gcc 1.39 and one
has '#define alloca __builtin_alloca'.  This is because the gcc 1.39's
internal declaration is 'void __builtin_alloca(int)'.

gcc 2.x's declaration is 'void __builtin_alloca(size_t)', so the
declaration is OK whether you have #defined alloca or not.  Both
versions of gcc provide the declaration internally.  Rich
Newsgroups: comp.unix.bsd