diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7be360ddcb3..54dc7154700 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Tue Oct 19 14:01:34 1999 Nick Clifton + + * toplev.c (main): Do not generate an error message if an + unrecognised command line switch is recognisable by another + language. If extra_warnings are enabled, then generate a + warning message instead. + Tue Oct 19 11:41:12 1999 Mumit Khan * c-pragma.h (PRAGMA_INSERT_ATTRIBUTES): Delete macro. diff --git a/gcc/toplev.c b/gcc/toplev.c index 753d65d65cf..95bda3d7c3b 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -5414,7 +5414,40 @@ main (argc, argv) ? lang_processed : indep_processed); else { - warning ("ignoring option `%s'", argv[i]); + const char * option = NULL; + const char * lang = NULL; + unsigned int j; + + /* It is possible that the command line switch is not valid for the + current language, but it is valid for another language. In order + to be compatible with previous versions of the compiler (which + did not issue an error message in this case) we check for this + possibilty here. If we do find a match, then if extra_warnings + is set we generate a warning message, otherwise we will just + ignore the option. */ + for (j = 0; j < NUM_ELEM (documented_lang_options); j++) + { + option = documented_lang_options[j].option; + + if (option == NULL) + lang = documented_lang_options[j].description; + else if (! strncmp (argv[i], option, strlen (option))) + break; + } + + if (option) + { + if (extra_warnings) + { + warning ("Ignoring command line option '%s'", argv[i]); + if (lang) + warning ("\ +(It is valid for %s but not the selected langauge)", lang); + } + } + else + error ("Unrecognised option `%s'", argv[i]); + i++; } }