[comp.unix.aux] G++ 1.37.1 patches for A/UX

coolidge@casca.cs.uiuc.edu (John Coolidge) (03/20/90)

Here are the much hoped for patches for G++ 1.37.1 under A/UX. These
are _not_ perfect --- at least two of the libg++ tests fail miserably,
and another returns data that's a little bit off --- but they do compile
all of libg++ and most of the tests run just fine. I`ll post the libg++
patches I'm using later today (mostly header file tweaking).

These patches require that you use the patches for tm-aux.h that I posted
earlier today. I strongly recommend using the tm-aux.h patches I posted
last week too (they fix a bug with -g output). There isn't a README for
the A/UX version yet, so here's a short guide to compiling g++:
	1) Get gcc-1.37.1 and apply the A/UX patches from apple.com and
		my patches.
	2) Make gcc-1.37.1
	3) Install gcc-1.37.1. Run fixincludes.
	4) Get g++-1.37.1 and apply these patches.
	5) Run 'make maketest DIR=<gcc-1.37.1 dir> TDIR=<gcc-1.37.1 dir>'
	6) Run 'config.g++ aux'
	7) Make

dwb@archer.apple.com (David W. Berry) writes:
>	No, g++ does not work with A/UX.  The major problem that I
>know of is g++'s complete and total lack of support for coff.  I keep
>wanting to do a port (I did the gcc port) but don't have time.

Actually, COFF wasn't much of a problem --- collect.c seems to do a
pretty good job. The big problem was dealing with the brain-damaged
assembler that comes with A/UX. G++ really, really wants a wierd symbol
to use to join things together, and 'as' simply doesn't give me
anything to use. '%' is almost good enough, except 1) it's used for
registers, and sometimes 'as' gets confused, and 2) it has a special
meaning in printfs. Thus, I wound up using 'A' and patching things
so that it wouldn't be completely horrible. But right now using anything
of the format A_<anything> as a type name will cause strange error
messages. I hope A/UX 2.0's 'as' has at least one oddball symbol to
use for things like this (I know, dream on...).

This patch incorporates two patches that came over gnu.g++.bug: one
which fixes USG_STDIO, and one that fixes cplus-dem.c. The USG_STDIO
patch (cplus-lex.c) is required, which the cplus-dem.c is of unknown
value (it doesn't seem to break anything, though). The rest is just
work-arounds for the 'as' problem and some minor tweaking.

Send bug reports (and, hopefully, fixes!) to me (coolidge@cs.uiuc.edu),
and I'll collect them all and put together an improved patch file.

--John

--------------------------------------------------------------------------
diff -r -c g++-1.37.1/Makefile g++-1.37.1.aux/Makefile
*** g++-1.37.1/Makefile	Mon Feb 26 08:37:46 1990
--- g++-1.37.1.aux/Makefile	Wed Mar 14 14:46:00 1990
***************
*** 37,43 ****
  # use `-dy'.
  
  # On COFF systems, use one of the definitions below. (see collect.c)
! # COFFLAGS = -DUSE_COLLECT -DCOFF
  # COFFLAGS = -DUSE_COLLECT -DEXTENDED_COFF
  
  # On some BSD systems (like Vax, unlike Sun), there is no file
--- 37,43 ----
  # use `-dy'.
  
  # On COFF systems, use one of the definitions below. (see collect.c)
! COFFLAGS = -DUSE_COLLECT -DCOFF
  # COFFLAGS = -DUSE_COLLECT -DEXTENDED_COFF
  
  # On some BSD systems (like Vax, unlike Sun), there is no file
***************
*** 46,52 ****
  # HAVE_UNISTD_H = -DNO_UNISTD_H
  
  # CFLAGS = -g -DSOS -DESKIT -O
! CFLAGS = -g -DGATHER_STATISTICS -O $(COFFLAGS) -B../gcc-test/
  CC = gcc
  BISON = bison
  BISONFLAGS = -v -d
--- 46,52 ----
  # HAVE_UNISTD_H = -DNO_UNISTD_H
  
  # CFLAGS = -g -DSOS -DESKIT -O
! CFLAGS = -g -DGATHER_STATISTICS -O $(COFFLAGS) -DAUX_ASM -DmacII -DAUX
  CC = gcc
  BISON = bison
  BISONFLAGS = -v -d
***************
*** 71,77 ****
  # uncomment the following line.  But turncoats who claim officially
  # to support System V, but really try to be Berkeley (and thus
  # break with USG defined), may need to define this.
! # USG_STDIO = -DUSG_STDIO
  
  prefix=/usr/local
  
--- 71,77 ----
  # uncomment the following line.  But turncoats who claim officially
  # to support System V, but really try to be Berkeley (and thus
  # break with USG defined), may need to define this.
! USG_STDIO = -DUSG_STDIO
  
  prefix=/usr/local
  
***************
*** 124,135 ****
  # But don't do that if compiling using GCC.
  
  # If your system has alloca() in /lib/libPW.a, un-comment the following line:
! # CLIB= -lPW
  
  # If your system's malloc() routine fails for any reason (as it does on
  # certain versions of Genix), try getting the files
  # malloc.c and getpagesize.h from GNU Emacs and un-comment the following line:
! MALLOC = malloc.o
  
  # If you are running GCC on an Apollo (SR10.x),
  # go into a Berkeley environment and use this:
--- 124,135 ----
  # But don't do that if compiling using GCC.
  
  # If your system has alloca() in /lib/libPW.a, un-comment the following line:
! CLIB= -lmalloc -lPW
  
  # If your system's malloc() routine fails for any reason (as it does on
  # certain versions of Genix), try getting the files
  # malloc.c and getpagesize.h from GNU Emacs and un-comment the following line:
! # MALLOC = malloc.o
  
  # If you are running GCC on an Apollo (SR10.x),
  # go into a Berkeley environment and use this:
***************
*** 204,212 ****
  
  # gnulib is not a target because a proper installation of GNU CC
  # will place it where g++ can find it.  Same with cpp
! all: crt1+.o g++ cc1plus ld++ g++filt # collect crt0+.o
  # On COFF systems, use the target below.
! # all: g++ cc1plus collect # crt0+.o crt1+.o
  
  doc: $(srcdir)/cpp.info $(srcdir)/g++.info
  
--- 204,212 ----
  
  # gnulib is not a target because a proper installation of GNU CC
  # will place it where g++ can find it.  Same with cpp
! # all: crt1+.o g++ cc1plus ld++ g++filt # collect crt0+.o
  # On COFF systems, use the target below.
! all: g++ cc1plus collect # crt0+.o crt1+.o
  
  doc: $(srcdir)/cpp.info $(srcdir)/g++.info
  
***************
*** 286,292 ****
  	else \
  		COLLECT_OPTIONS=''; \
  	fi; \
! 	$(CC) -o collect $(PROFILE) $$COLLECT_OPTIONS $(CFLAGS) $(INCLUDES) $< -lg -lc $$COLLECT_LIBS
  
  collect2: collect2.c config.h
  	$(CC) -o collect2 collect2.c $(PROFILE) $$COLLECT_OPTIONS $(CFLAGS) $(INCLUDES) -lc
--- 286,292 ----
  	else \
  		COLLECT_OPTIONS=''; \
  	fi; \
! 	$(CC) -o collect $(PROFILE) $(COLLECT_OPTIONS) $(CFLAGS) $(INCLUDES) collect.c -lld
  
  collect2: collect2.c config.h
  	$(CC) -o collect2 collect2.c $(PROFILE) $$COLLECT_OPTIONS $(CFLAGS) $(INCLUDES) -lc
diff -r -c g++-1.37.1/collect.c g++-1.37.1.aux/collect.c
*** g++-1.37.1/collect.c	Wed Nov 22 22:29:14 1989
--- g++-1.37.1.aux/collect.c	Fri Mar 16 14:36:38 1990
***************
*** 71,76 ****
--- 71,81 ----
  #define NO_UNDERSCORES 1
  #endif
  
+ #ifdef AUX
+ #define ASM_INT_OP	"long "
+ #define NO_UNDERSCORES 1
+ #endif
+ 
  #ifndef ASM_OUTPUT_INT_CONST
  #define ASM_OUTPUT_INT_CONST(FILE,VALUE)	\
    fprintf(FILE,"\t%s %d\n", ASM_INT_OP, VALUE)
***************
*** 115,121 ****
  #    ifndef NO_DOLLAR_IN_LABEL
  #      define CTOR_DTOR_MARKER_NAME "_GLOBAL_$"
  #    else
! #      define CTOR_DTOR_MARKER_NAME "_GLOBAL_."
  #    endif
  #    define CTOR_DTOR_MARKER_LENGTH 9
  #    define CTOR_DTOR_MARKER_OFFSET 0
--- 120,130 ----
  #    ifndef NO_DOLLAR_IN_LABEL
  #      define CTOR_DTOR_MARKER_NAME "_GLOBAL_$"
  #    else
! #      ifndef NO_DOT_IN_LABEL
! #        define CTOR_DTOR_MARKER_NAME "_GLOBAL_."
! #      else
! #        define CTOR_DTOR_MARKER_NAME "_GLOBAL_A"
! #      endif
  #    endif
  #    define CTOR_DTOR_MARKER_LENGTH 9
  #    define CTOR_DTOR_MARKER_OFFSET 0
***************
*** 125,131 ****
  #    ifndef NO_DOLLAR_IN_LABEL
  #      define CTOR_DTOR_MARKER_NAME "__GLOBAL_$"
  #    else
! #      define CTOR_DTOR_MARKER_NAME "__GLOBAL_."
  #    endif
  #    define CTOR_DTOR_MARKER_LENGTH 10
  #    define CTOR_DTOR_MARKER_OFFSET 1
--- 134,144 ----
  #    ifndef NO_DOLLAR_IN_LABEL
  #      define CTOR_DTOR_MARKER_NAME "__GLOBAL_$"
  #    else
! #      ifndef NO_DOT_IN_LABEL
! #        define CTOR_DTOR_MARKER_NAME "__GLOBAL_."
! #      else
! #        define CTOR_DTOR_MARKER_NAME "__GLOBAL_A"
! #      endif
  #    endif
  #    define CTOR_DTOR_MARKER_LENGTH 10
  #    define CTOR_DTOR_MARKER_OFFSET 1
***************
*** 396,401 ****
--- 409,418 ----
    do {
      if ((ldptr = ldopen(filename, ldptr)) != NULL ) {
        
+ #ifdef macII
+ #define ISCOFF(X) (X == M68TVMAGIC || X == M68MAGIC || \
+ 	X == MC68TVMAGIC || X == MC68MAGIC || X == M68NSMAGIC)
+ #endif
        if (!ISCOFF( HEADER(ldptr).f_magic ) ) {
  	return BAD_MAGIC;
        }
***************
*** 585,591 ****
--- 602,612 ----
          char *p = strtab+strindex;
  #endif /* hp9000s300 */

+ #ifndef CTOR_DTOR_MARKER_NAME
          if (! strncmp ("__GLOBAL_$", p, 10))
+ #else
+           if (! strncmp (CTOR_DTOR_MARKER_NAME, p, CTOR_DTOR_MARKER_LENGTH))
+ #endif
            add_ctor_dtor_elem(p);
        }
      }
diff -r -c g++-1.37.1/cplus-dem.c g++-1.37.1.aux/cplus-dem.c
*** g++-1.37.1/cplus-dem.c	Fri Feb 16 22:40:07 1990
--- g++-1.37.1.aux/cplus-dem.c	Wed Mar 14 14:51:50 1990
***************
*** 43,57 ****
     realloc except that they generate a fatal error if there is no
     available memory. */
  
! /* #define nounderscore 1 /* define this is names don't start with _ */
  
  #include <stdio.h>
- #include <string.h>
  #include <ctype.h>
  
  #ifdef USG
  #include <memory.h>
  #else
  #define memcpy(s1, s2, n) bcopy ((s2), (s1), (n)) 
  #define memcmp(s1, s2, n) bcmp ((s2), (s1), (n))
  #define strchr index 
--- 43,58 ----
     realloc except that they generate a fatal error if there is no
     available memory. */
  
! #define nounderscore 1 /* define this is names don't start with _ */
  
  #include <stdio.h>
  #include <ctype.h>
  
  #ifdef USG
  #include <memory.h>
+ #include <string.h>
  #else
+ #include <strings.h>
  #define memcpy(s1, s2, n) bcopy ((s2), (s1), (n)) 
  #define memcmp(s1, s2, n) bcmp ((s2), (s1), (n))
  #define strchr index 
***************
*** 148,153 ****
--- 149,155 ----
  static int do_arg (const char **type, string *result);
  static int do_args (const char **type, string *decl);
  static void munge_function_name (string *name);
+ static void remember_type (const char *type, int len);
  #else
  static void string_need ();
  static void string_delete ();
***************
*** 166,171 ****
--- 168,174 ----
  static int do_arg ();
  static int do_args ();
  static void munge_function_name ();
+ static void remember_type ();
  #endif
  
  char *
***************
*** 178,184 ****
    int constructor = 0;
    int const_flag = 0;
    int i;
!   const char *p, *premangle;
  
    if (type == NULL || *type == '\0')
      return NULL;
--- 181,190 ----
    int constructor = 0;
    int const_flag = 0;
    int i;
!   const char *p;
! #ifndef LONGERNAMES
!   const char *premangle;
! #endif
  
    if (type == NULL || *type == '\0')
      return NULL;
***************
*** 242,248 ****
--- 248,256 ----
      }
    p += 2;
  
+ #ifndef LONGERNAMES
    premangle = p;
+ #endif
    switch (*p)
      {
      case 'C':
***************
*** 289,298 ****
  	  string_prepend (&decl, "::");
  	  string_prependn (&decl, p, n);
  	}
- #ifndef LONGERNAMES
-       p = premangle;
- #else
        p += n;
  #endif
        success = do_args (&p, &decl);
        if (const_flag)
--- 297,305 ----
  	  string_prepend (&decl, "::");
  	  string_prependn (&decl, p, n);
  	}
        p += n;
+ #ifndef LONGERNAMES
+       remember_type (premangle, p - premangle);
  #endif
        success = do_args (&p, &decl);
        if (const_flag)
***************
*** 662,676 ****
       const char **type;
       string *result;
  {
!   char *tem;
!   int len;
!   const char *start;
!   const char *end;
  
-   start = *type;
    if (!do_type (type, result))
      return 0;
!   end = *type;
    if (ntypes >= typevec_size)
      {
        if (typevec_size == 0)
--- 669,689 ----
       const char **type;
       string *result;
  {
!   const char *start = *type;
  
    if (!do_type (type, result))
      return 0;
!   remember_type (start, *type - start);
!   return 1;
! }
! 
! static void
! remember_type (start, len)
!      const char *start;
!      int len;
! {
!   char *tem;
! 
    if (ntypes >= typevec_size)
      {
        if (typevec_size == 0)
***************
*** 684,695 ****
  	  typevec = (char **) xrealloc ((char *)typevec, sizeof (char*)*typevec_size);
  	}
      }
-   len = end - start;
    tem = (char *) xmalloc (len + 1);
    memcpy (tem, start, len);
    tem[len] = '\0';
    typevec[ntypes++] = tem;
-   return 1;
  }
  
  /* `decl' must be already initialised, usually non-empty;
--- 697,706 ----
***************
*** 702,714 ****
  {
    string arg;
    int need_comma = 0;
-   int dont_want_first;
- 
- #ifndef LONGERNAMES
-   dont_want_first = 1;
- #else
-   dont_want_first = 0;
- #endif
  
    string_append (decl, "(");
  
--- 713,718 ----
***************
*** 739,752 ****
  	    string_append (decl, ", ");
  	  if (!do_arg (type, &arg))
  	    return 0;
! 	  if (dont_want_first)
! 	    dont_want_first = 0;
! 	  else
! 	    {
! 	      string_appends (decl, &arg);
! 	      need_comma = 1;
! 	    }
  	  string_delete (&arg);
  	}
      }
  
--- 743,751 ----
  	    string_append (decl, ", ");
  	  if (!do_arg (type, &arg))
  	    return 0;
! 	  string_appends (decl, &arg);
  	  string_delete (&arg);
+ 	  need_comma = 1;
  	}
      }
  
diff -r -c g++-1.37.1/cplus-lex.c g++-1.37.1.aux/cplus-lex.c
*** g++-1.37.1/cplus-lex.c	Thu Feb 22 07:51:38 1990
--- g++-1.37.1.aux/cplus-lex.c	Mon Mar 12 15:18:29 1990
***************
*** 1125,1154 ****
        t = pending_inlines;
        pending_inlines = pending_inlines->next;
        finput = finput2;
! #if defined(i386) && !defined(sequent) && !defined(sun386)
!       finput2->_ptr = finput2->_base = t->buf;
!       _bufend(finput2) = t->buf + t->len;
!       finput2->_flag = _IOFBF | _IOREAD;
!       finput2->_cnt = t->len - 1;
! #else
! #ifndef hp9000s300
! #ifdef USG_STDIO
        setvbuf(finput2,t->buf,_IOFBF,t->len);
        finput2->_cnt = t->len-1;
  #else
! #ifdef VMS
!       setvbuf(finput2,t->buf,_IOFBF,t->len);
!       (*finput2)->_cnt = t->len-1;
  #else
        setbuffer (finput2, t->buf, t->len);
        finput2->_cnt = finput2->_bufsiz - 1;
- #endif				/* VMS */
- #endif				/* USG_STDIO */
- #else
-       setvbuf(finput2,t->buf,_IOFBF,t->len);
-       finput2->_cnt = t->len-1;
  #endif
  #endif
        lineno = t->lineno;
        input_filename = t->filename;
        yychar = PRE_PARSED_FUNCTION_DECL;
--- 1125,1153 ----
        t = pending_inlines;
        pending_inlines = pending_inlines->next;
        finput = finput2;
! 
! #if defined(hp9000s300)
!       /* The hp9000 has a working setvbuf() routine.  */
        setvbuf(finput2,t->buf,_IOFBF,t->len);
        finput2->_cnt = t->len-1;
  #else
! #if defined(USG) || defined(DGUX) || defined(macII)
!       /* The standard SystemV code has a broken version of the setvbuf()
!          routine.  IF you try to setvbuf to a buffer which is shorter
!          than 8 bytes, then the standard USG setvbuf() will ignore the
!          request and malloc its own buffer.  This totally screws up things
!          for g++, so don't use setvbuf() on USG systems.  */
!       finput2->_ptr = finput2->_base = (unsigned char *) t->buf;
!       _bufend(finput2) = (unsigned char *) t->buf + t->len;
!       finput2->_flag = _IOFBF | _IOREAD;
!       finput2->_cnt = t->len - 1;
  #else
+       /* Typical BSD systems can use setbuffer.  */
        setbuffer (finput2, t->buf, t->len);
        finput2->_cnt = finput2->_bufsiz - 1;
  #endif
  #endif
+ 
        lineno = t->lineno;
        input_filename = t->filename;
        yychar = PRE_PARSED_FUNCTION_DECL;
***************
*** 2283,2310 ****
  	      /* The buffer we used will be freed at the
  		 end of this function.  */
  	      pending_inlines = pending_inlines->next;
! #if defined(i386) && !defined(sequent) && !defined(sun386)
! 	      finput2->_ptr = finput2->_base = t->buf;
! 	      _bufend(finput2) = t->buf + t->len;
! 	      finput2->_flag = _IOFBF | _IOREAD;
! 	      finput2->_cnt = t->len - 1;
! #else
! #ifndef hp9000s300
! #ifdef USG_STDIO
!       	      setvbuf(finput2,t->buf,_IOFBF,t->len);
!        	      finput2->_cnt = t->len-1;
! #else
! #ifdef VMS
!       	      setvbuf(finput2,t->buf,_IOFBF,t->len);
!        	      (*finput2)->_cnt = t->len-1;
  #else
!   	      setbuffer (finput2, t->buf, t->len);
!   	      finput2->_cnt = finput2->_bufsiz - 1;
! #endif				/* VMS */
! #endif				/* USG_STDIO */
  #else
!       	      setvbuf(finput2,t->buf,_IOFBF,t->len);
!        	      finput2->_cnt = t->len-1;
  #endif
  #endif
  	    }
--- 2282,2303 ----
  	      /* The buffer we used will be freed at the
  		 end of this function.  */
  	      pending_inlines = pending_inlines->next;
! #if defined(hp9000s300)
!               /* The hp900s300 has a working setvbuf() routine.  */
!                     setvbuf(finput2,t->buf,_IOFBF,t->len);
!                     finput2->_cnt = t->len-1;
  #else
! #if defined(USG) || defined (DGUX) || defined(macII)
!               /* The standard USG setvbuf() routine screws up if the buffer
!                  you give it is smaller that 8 bytes, so don't use it.  */
!             finput2->_ptr = finput2->_base = (unsigned char *) t->buf;
!             _bufend(finput2) = (unsigned char *) t->buf + t->len;
!             finput2->_flag = _IOFBF | _IOREAD;
!             finput2->_cnt = t->len - 1;
  #else
!               /* The typical BSD system can use setbuffer */
!             setbuffer (finput2, t->buf, t->len);
!             finput2->_cnt = finput2->_bufsiz - 1;
  #endif
  #endif
  	    }
diff -r -c g++-1.37.1/cplus-tree.h g++-1.37.1.aux/cplus-tree.h
*** g++-1.37.1/cplus-tree.h	Mon Feb 26 07:55:38 1990
--- g++-1.37.1.aux/cplus-tree.h	Fri Mar 16 10:47:17 1990
***************
*** 1147,1153 ****
  
  /* Define NO_DOLLAR_IN_LABEL in your favorite tm file if your assembler
     doesn't allow '$' in symbol names.  */
! #ifndef NO_DOLLAR_IN_LABEL
  
  #define JOINER '$'
  
--- 1147,1153 ----
  
  /* Define NO_DOLLAR_IN_LABEL in your favorite tm file if your assembler
     doesn't allow '$' in symbol names.  */
! #if !defined(NO_DOLLAR_IN_LABEL)
  
  #define JOINER '$'
  
***************
*** 1179,1186 ****
  #define FILE_FUNCTION_FORMAT "_GLOBAL_$D$%s"
  #define ANON_AGGRNAME_FORMAT "$_%d"
  
! #else	/* NO_DOLLAR_IN_LABEL */
 
  #define JOINER '.'
  
  #define THIS_NAME ".this"
--- 1179,1188 ----
  #define FILE_FUNCTION_FORMAT "_GLOBAL_$D$%s"
  #define ANON_AGGRNAME_FORMAT "$_%d"
  
! #endif
  
+ #if defined(NO_DOLLAR_IN_LABEL) && !defined(NO_DOT_IN_LABEL)
+ 
  #define JOINER '.'
  
  #define THIS_NAME ".this"
***************
*** 1212,1218 ****
  
  #define ANON_AGGRNAME_FORMAT "._%d"
  
! #endif	/* NO_DOLLAR_IN_LABEL */
  
  #define DESTRUCTOR_NAME_FORMAT "~%s"
  #define WRAPPER_NAME_FORMAT "()%s"
--- 1214,1258 ----
  
  #define ANON_AGGRNAME_FORMAT "._%d"
  
! #endif
! 
! #if defined(NO_DOT_IN_LABEL)
! 
! /* If we don't have $ or ., we probably have a very limited assembler.
!    Thus, use A as the joiner (I _hope_ every assembler will have it) and
!    use '_' to make AGGR hard to accidentally create */
! 
! #define JOINER 'A'
! 
! #define THIS_NAME "Athis"
! #define VPTR_NAME "Avptr"
! #define THROW_NAME "Aeh_throw"
! #define DESTRUCTOR_DECL_FORMAT "_A_%s"
! #define WRAPPER_DECL_FORMAT "__WA%s"
! #define WRAPPER_PRED_DECL_FORMAT "__PA%s"
! #define ANTI_WRAPPER_DECL_FORMAT "__wA%s"
! #define IN_CHARGE_NAME "__inAcharge__"
! #define AUTO_VTABLE_NAME "__vtblAme__"
! #define AUTO_TEMP_NAME "_Atmp_"
! #define AUTO_TEMP_FORMAT "_Atmp_%d"
! #define OPERATOR_ASSIGN_FORMAT "opAassign_%s"
! #define OPERATOR_MODIFY_FORMAT "opAmodify"
! #define OPERATOR_METHOD_FORMAT "opAmethod_call"
! #define OPERATOR_NEW_FORMAT "opAnew"
! #define OPERATOR_DELETE_FORMAT "opAdelete"
! #define OPERATOR_FORMAT "opA%s"
! #define VTBL_PTR_TYPE "Avtbl_ptr_type"
! #define VTABLE_NAME_FORMAT "_vtA%s"
! #define VFIELD_NAME "_vptrA"
! #define VFIELD_NAME_FORMAT "_vptrA%s"
! #define VBASE_NAME "_vbA"
! #define VBASE_NAME_FORMAT "_vbA%s"
! #define STATIC_NAME_FORMAT "_%sA%s"
! #define OPERATOR_TYPENAME_FORMAT "typeA"
! #define FILE_FUNCTION_FORMAT "_GLOBAL_ADA%s"
! #define ANON_AGGRNAME_FORMAT "A_%d"
! 
! #endif	/* NO_DOT_IN_LABEL */
  
  #define DESTRUCTOR_NAME_FORMAT "~%s"
  #define WRAPPER_NAME_FORMAT "()%s"
***************
*** 1232,1239 ****
  			      && IDENTIFIER_POINTER (ID_NODE)[1] == 't')
  #define VPTR_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == JOINER \
  			      && IDENTIFIER_POINTER (ID_NODE)[1] == 'v')
- #define DESTRUCTOR_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == JOINER)
  
  #define WRAPPER_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == '_' \
  				 && IDENTIFIER_POINTER (ID_NODE)[2] == 'W' \
  				 && IDENTIFIER_POINTER (ID_NODE)[3] == JOINER)
--- 1272,1279 ----
  			      && IDENTIFIER_POINTER (ID_NODE)[1] == 't')
  #define VPTR_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == JOINER \
  			      && IDENTIFIER_POINTER (ID_NODE)[1] == 'v')
  
+ #define DESTRUCTOR_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == JOINER)
  #define WRAPPER_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == '_' \
  				 && IDENTIFIER_POINTER (ID_NODE)[2] == 'W' \
  				 && IDENTIFIER_POINTER (ID_NODE)[3] == JOINER)
***************
*** 1258,1264 ****
  #define VBASE_NAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[3] == JOINER \
    && IDENTIFIER_POINTER (ID_NODE)[2] == 'b'\
    && IDENTIFIER_POINTER (ID_NODE)[1] == 'v')
- 
  #define OPERATOR_TYPENAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[4] == JOINER \
    && IDENTIFIER_POINTER (ID_NODE)[3] \
    && IDENTIFIER_POINTER (ID_NODE)[2] \
--- 1298,1303 ----
***************
*** 1270,1276 ****
--- 1309,1321 ----
  /* For anonymous aggregate types, we need some sort of name to
     hold on to.  In practice, this should not appear, but it should
     not be harmful if it does.  */
+ #if defined(NO_DOLLAR_IN_LABEL) && defined(NO_DOT_IN_LABEL)
+ #define ANON_AGGRNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[1] == '_'\
+   && IDENTIFIER_POINTER (ID_NODE)[0] == JOINER)
+ #else
+ #include "not.here"
  #define ANON_AGGRNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == JOINER)
+ #endif
  
  #define ANON_PARMNAME_FORMAT "_%d"
  #define ANON_PARMNAME_P(ID_NODE) (IDENTIFIER_POINTER (ID_NODE)[0] == '_' \
diff -r -c g++-1.37.1/toplev.c g++-1.37.1.aux/toplev.c
*** g++-1.37.1/toplev.c	Thu Feb  8 17:32:34 1990
--- g++-1.37.1.aux/toplev.c	Mon Mar 12 15:14:08 1990
***************
*** 32,37 ****
--- 32,41 ----
  #include <sys/stat.h>
  #include <sys/file.h>
  
+ #ifdef macII
+ #define NO_UNISTD_H
+ #endif
+ 
  #ifdef NO_UNISTD_H
  #define SEEK_SET L_SET
  #define SEEK_CUR L_INCR
***************
*** 41,47 ****
--- 45,55 ----
  #endif
  
  #ifdef USG
+ #ifdef macII
+ #include <fcntl.h>
+ #else
  #include <sys/fcntl.h>
+ #endif
  #undef FLOAT
  #include <sys/param.h>
  /* This is for hpux.  It is a real screw.  They should change hpux.  */
*** g++-1.37.1/config.g++	Sat Nov  4 23:26:35 1989
--- g++-1.37.1.aux/config.g++	Mon Mar 19 14:34:47 1990
***************
*** 193,198 ****
--- 193,202 ----
  		aux_output=out-hp9k8.c
  		machine_type=hp9k8
  		;;
+         aux)                            # Mac II running A/UX
+                 cpu_type=m68k
+                 configuration_file=xm-aux.h
+                 ;;
  	isi68)
  		cpu_type=m68k
  		;;

--------------------------------------------------------------------------
John L. Coolidge     Internet:coolidge@cs.uiuc.edu   UUCP:uiucdcs!coolidge
Of course I don't speak for the U of I (or anyone else except myself)
Copyright 1990 John L. Coolidge. Copying allowed if (and only if) attributed.
You may redistribute this article if and only if your recipients may as well.