pascal@ccvi.ccv.fr (Pascal Meheut) (11/16/89)
I think you may be interested in the following little program. main(argc, argv) int argc; char **argv; { for(argc--, argv++; argc; argc--, argv++) { switch(argv[0][1]) { case 'v': break; case 's': break; case 'f': case 'O': case 'g': break; default: printf("ignoring option %s\n", argv[0]); } } exit(0); } Compiled on a SUN sparc station 1, with gcc -o -O foo foo.c, and called with 'foo -s' it prints nothing which is correct. But with gcc -O -fforce-mem -o foo foo.c, it prints "ignoring option -s" I use gcc-1.35 and maybe the bug is fixed in gcc-1.36, but I have not enough time to install it. The problem do not appear with gcc-1.35 used on a SUN 3/50 or gcc-1.34.91 used on a SUN-386. I had found this bug in compiling X window (X11R3) on the sparc station. The problem was with the program 'makedepend'. I apologize for my bad english and hope you'll fix that bug quickly. (Perhaps It's done, but I don't know what is the last version of gcc) Pascal Meheut.
rfg@ICS.UCI.EDU (12/08/89)
If you are using ansi prototype style for your function definitions (manditory in C++) then it is possible that you may eventually come across a prototyped function definition in which one or more of the formal parameter names have been left out. For example: void quiet_File_error_handler(char*) { errno = 0; } The example above comes from libg++ (1.36.1). This is legal ansi (and C++) but if you are using GCC 1.36 or G++ 1.36.1 with COFF and using -g, you will get cc1 (or cc1plus) segfaulting on the example shown above. The fix is simple, and is provided below. (Your line numbers may vary.) Enjoy, // rfg *** sdbout.c- Tue Nov 28 23:37:01 1989 --- sdbout.c Thu Dec 7 13:18:07 1989 *************** *** 1040,1044 **** } ! name = IDENTIFIER_POINTER (DECL_NAME (parms)); if (name == (char *)0 || *name == '\0') name = gen_fake_label (); --- 1040,1044 ---- } ! name = DECL_NAME (parms) ? IDENTIFIER_POINTER (DECL_NAME (parms)) : 0; if (name == (char *)0 || *name == '\0') name = gen_fake_label ();