home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / lang / tcl / 1325 < prev    next >
Encoding:
Text File  |  1992-09-08  |  3.0 KB  |  75 lines

  1. Path: sparky!uunet!sun-barr!olivea!spool.mu.edu!agate!forney.berkeley.edu!jbuck
  2. From: jbuck@forney.berkeley.edu (Joe Buck)
  3. Newsgroups: comp.lang.tcl
  4. Subject: Re: Compiling tcl 6.3 with gcc 2.2.2
  5. Message-ID: <18je91INNkvc@agate.berkeley.edu>
  6. Date: 8 Sep 92 23:50:57 GMT
  7. References: <1992Aug29.112757.11363@athena.mit.edu> <17oqn8INNkhj@agate.berkeley.edu> <18gkkuINN73l@agate.berkeley.edu>
  8. Organization: U. C. Berkeley
  9. Lines: 63
  10. NNTP-Posting-Host: forney.berkeley.edu
  11.  
  12.  
  13. In article <1992Aug29.112757.11363@athena.mit.edu> joe@athena.mit.edu (Joseph C Wang) writes:
  14. >|> >I've also noticed bugs you mentioned (needing -fno-builtin and
  15. >|> >redefining open) on all the platforms I have gcc2.2 on (decmips, vax,
  16. >|> >and rt)
  17. >|> 
  18.  
  19. I wrote:
  20. >|> This is a Tcl bug, as ANSI C and Posix have agreed on what the prototype
  21. >|> for open and other functions is, and the Tcl prototypes don't agree with
  22. >|> the standard.  gcc's builtin definitions and those it builds with the
  23. >|> "fixincludes" script are correct; Tcl is wrong.
  24.  
  25. In article <18gkkuINN73l@agate.berkeley.edu> ouster@sprite.Berkeley.EDU (John Ousterhout) writes:
  26. >I don't understand this, since I believe that the prototypes for open
  27. >and other ANSI functions are identical to what's specified in my ANSI C
  28. >and POSIX manuals.  Can someone provide a bit more detail on exactly
  29. >what the error is?
  30.  
  31. In compat/string.h, strcmp and a few other functions are declared to
  32. return int.  ANSI says they return size_t.  But this header isn't
  33. ordinarily used unless the configuration step thinks the system one is
  34. invalid.  (Unfortunately, if you use gcc during configuration it will do
  35. just this, so you'll then need to use -fno-builtin).  This problem
  36. doesn't show up on Suns because Sun made size_t int, even though
  37. it is supposed to be an unsigned type (objects cannot have negative sizes).
  38.  
  39. The problem with "open" turns out not to be that the prototype was invalid,
  40. so I was in error.  The problem with "open" is that <sys/file.h> is
  41. included before the prototype for open in tclUnix.h.  gcc is unhappy if
  42. it first sees a prototype declaration that contains an ellipsis, and then
  43. sees a declaration for the same function with no prototype.  That is,
  44. it sees
  45.  
  46. extern int open();
  47. ...
  48. extern int open(const char* path,int flags,...);
  49.  
  50. It will accept these two lines if they appear in the reverse order, but
  51. not in this order.  If the full prototype does not have "...", gcc will
  52. take any mixture of the non-prototype declaration and the prototype
  53. version.
  54.  
  55. The gcc people claim that accepting both declaration forms for the
  56. same function in the same compilation is actually an extension, so I
  57. can't claim that rejecting this one is a bug.  Just the same, since the
  58. input
  59.  
  60. extern int open(const char *path, int flags, ...);
  61. ...
  62. extern int open();
  63. ...
  64. extern int open(const char *path, int flags, ...);
  65.  
  66. also produces the error, it appears that at least in this case the
  67. gcc trick to allow prototype- and non-prototype-declarations to be
  68. mixed doesn't work as one would expect.
  69.  
  70.  
  71.  
  72.  
  73. --
  74. Joe Buck    jbuck@ohm.berkeley.edu
  75.