angel@FLIPPER.MIAMI.EDU (angel li) (02/01/90)
Enclosed are the patches for g++ 1.36.4 on VMS. I have also upgraded the gcc-cc1plus.exe on mango.miami.edu for those that don't wish to build the compiler themselves. If you previously FTP'ed g++ from mango, do so again. At least you'll get the corrected ctype.h for VMS. makefile.vms and make-cc1plus.com have also been upgraded to reflect new source files in g++ 1.36.4. gas and gxx have not changed since last released. One needs to add the following line to tm-vms.h to build g++ from scratch: #define NO_DOLLAR_IN_LABEL This fixes the problem where the compiler complains about variables that start with a dollar sign (e.g. the $$PsectAttribute hack for stdin, stdout, stderr). One can not link objects compiled by a previous version of g++ with objects generated by the 1.36.4 version because the above patch changes an internal compiler naming scheme. This version of g++ is based on gcc 1.36.93 and was compiled with gcc 1.36.93. I am fairly happy with this version as it has compiled InterViews and built an almost usable idraw and sted on VMS. I'll be releasing InterViews diffs in the very near future. Angel Li University of Miami/RSMAS Remote Sensing Group Internet: angel@flipper.miami.edu UUCP: ncar!umigw!angel "Every time you think it weakens the nation." *** cplus-decl.c.orig Sun Jan 28 23:18:13 1990 --- cplus-decl.c Tue Jan 30 19:40:32 1990 *************** *** 7987,7993 **** --- 7987,7997 ---- && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)), "main")) { /* Make it so that `main' always returns 0 by default. */ + #ifdef VMS + c_expand_return (integer_one_node); + #else c_expand_return (integer_zero_node); + #endif } /* That's the end of the vtable decl's life. Need to mark it such *** cplus-lex.c.orig Sun Jan 28 09:35:17 1990 --- cplus-lex.c Tue Jan 30 19:40:35 1990 *************** *** 28,33 **** --- 28,36 ---- #include "config.h" #include "input.h" #include "tree.h" + #ifdef VMS + #define _IOFBF 2 /* Missing from GNU's stdio.h */ + #endif #include "cplus-tab.h" #include "cplus-parse.h" #include "cplus-tree.h" *************** *** 37,42 **** --- 40,51 ---- extern int errno; /* needed for VAX. */ extern jmp_buf toplevel; + #ifdef VMS + #define NULL_FILE "nla0:" + #else + #define NULL_FILE "/dev/null" + #endif + #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free *************** *** 847,853 **** reinit_lex_for_unexec () { finput1 = finput; ! finput2 = fopen ("/dev/null", "r"); } void --- 856,862 ---- reinit_lex_for_unexec () { finput1 = finput; ! finput2 = fopen (NULL_FILE, "r"); } void *************** *** 914,920 **** and will increment it to 1. */ lineno = 0; finput1 = finput; ! finput2 = fopen ("/dev/null", "r"); current_function_decl = NULL; maxtoken = 40; --- 923,929 ---- and will increment it to 1. */ lineno = 0; finput1 = finput; ! finput2 = fopen (NULL_FILE, "r"); current_function_decl = NULL; maxtoken = 40; *************** *** 1122,1129 **** --- 1131,1143 ---- 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); *************** *** 1775,1783 **** --- 1789,1801 ---- && getc(finput) == 'p' && ((c = getc (finput)) == ' ' || c == '\t' || c == '\n')) { + #ifdef VMS + ; /* Are you crazy? */ + #else ungetc(c, finput); dump_data(); longjmp (toplevel, 1); + #endif } else #endif *************** *** 2270,2277 **** --- 2288,2300 ---- 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); *************** *** 2430,2435 **** --- 2453,2459 ---- { tmp = get_identifier (token_buffer); + #ifndef VMS /* Make sure that user does not collide with our internal naming scheme. */ if (JOINER == '$' *************** *** 2446,2451 **** --- 2470,2476 ---- || ANON_PARMNAME_P (tmp))) warning ("identifier name `%s' conflicts with GNU C++ internal naming strategy", token_buffer); + #endif /* Come into here if we must reprocess an identifier. */ resume_identifier_processing: *** toplev.c.orig Sun Jan 28 07:21:32 1990 --- toplev.c Tue Jan 30 19:40:50 1990 *************** *** 1171,1181 **** --- 1171,1184 ---- prev_file = fopen (previous_asm_file_name, "r"); if (prev_file == 0) pfatal_with_name (previous_asm_file_name); + #ifndef VMS if (_bufsiz(asm_out_file) != _bufsiz(prev_file)) + #endif { while ((c = getc (prev_file)) != EOF) putc (c, asm_out_file); } + #ifndef VMS else { /* Copy quickly. */ *************** *** 1193,1198 **** --- 1196,1202 ---- } while (size == _bufsiz(asm_out_file)); } + #endif fclose (prev_file); }