flag_alias_check = 1;
main (argc, argv, envp)     int argc;     char **argv;     char **envp;{  register int i;  char *filename = 0;  int flag_print_mem = 0;  int version_flag = 0;  char *p;  /* save in case md file wants to emit args as a comment.  */  save_argc = argc;  save_argv = argv;  p = argv[0] + strlen (argv[0]);  while (p != argv[0] && p[-1] != '/'#ifdef DIR_SEPARATOR	 && p[-1] != DIR_SEPARATOR#endif	 )    --p;  progname = p;#ifdef RLIMIT_STACK  /* Get rid of any avoidable limit on stack size.  */  {    struct rlimit rlim;    /* Set the stack limit huge so that alloca does not fail. */    getrlimit (RLIMIT_STACK, &rlim);    rlim.rlim_cur = rlim.rlim_max;    setrlimit (RLIMIT_STACK, &rlim);  }#endif /* RLIMIT_STACK */  signal (SIGFPE, float_signal);#ifdef SIGPIPE  signal (SIGPIPE, pipe_closed);#endif  decl_printable_name = decl_name;  lang_expand_expr = (struct rtx_def *(*)()) do_abort;  interim_eh_hook = interim_eh;  /* Initialize whether `char' is signed.  */  flag_signed_char = DEFAULT_SIGNED_CHAR;#ifdef DEFAULT_SHORT_ENUMS  /* Initialize how much space enums occupy, by default.  */  flag_short_enums = DEFAULT_SHORT_ENUMS;#endif  /* Scan to see what optimization level has been specified.  That will     determine the default value of many flags.  */  for (i = 1; i < argc; i++)    {      if (!strcmp (argv[i], "-O"))	{	  optimize = 1;	}      else if (argv[i][0] == '-' && argv[i][1] == 'O')	{	  /* Handle -O2, -O3, -O69, ...  */	  char *p = &argv[i][2];	  int c;	  while (c = *p++)	    if (! (c >= '0' && c <= '9'))	      break;	  if (c == 0)	    optimize = atoi (&argv[i][2]);	}    }  obey_regdecls = (optimize == 0);  if (optimize == 0)    {      flag_no_inline = 1;      warn_inline = 0;    }  if (optimize >= 1)    {      flag_defer_pop = 1;      flag_thread_jumps = 1;#ifdef DELAY_SLOTS      flag_delayed_branch = 1;#endif#ifdef CAN_DEBUG_WITHOUT_FP      flag_omit_frame_pointer = 1;#endif    }  if (optimize >= 2)    {      flag_cse_follow_jumps = 1;      flag_cse_skip_blocks = 1;      flag_expensive_optimizations = 1;      flag_strength_reduce = 1;      flag_rerun_cse_after_loop = 1;      flag_caller_saves = 1;      flag_force_mem = 1;#ifdef INSN_SCHEDULING      flag_schedule_insns = 1;      flag_schedule_insns_after_reload = 1;#endif    }  if (optimize >= 3)    {      flag_inline_functions = 1;    }#ifdef OPTIMIZATION_OPTIONS  /* Allow default optimizations to be specified on a per-machine basis.  */  OPTIMIZATION_OPTIONS (optimize);#endif  /* Initialize register usage now so switches may override.  */  init_reg_sets ();  target_flags = 0;  set_target_switch ("");  for (i = 1; i < argc; i++)    {      int j;      /* If this is a language-specific option,	 decode it in a language-specific way.  */      for (j = 0; lang_options[j] != 0; j++)	if (!strncmp (argv[i], lang_options[j],		      strlen (lang_options[j])))	  break;      if (lang_options[j] != 0)	/* If the option is valid for *some* language,	   treat it as valid even if this language doesn't understand it.  */	lang_decode_option (argv[i]);      else if (argv[i][0] == '-' && argv[i][1] != 0)	{	  register char *str = argv[i] + 1;	  if (str[0] == 'Y')	    str++;	  if (str[0] == 'm')	    set_target_switch (&str[1]);	  else if (!strcmp (str, "dumpbase"))	    {	      dump_base_name = argv[++i];	    }	  else if (str[0] == 'd')	    {	      register char *p = &str[1];	      while (*p)		switch (*p++)		  { 		  case 'a': 		    combine_dump = 1; 		    dbr_sched_dump = 1; 		    flow_dump = 1; 		    global_reg_dump = 1; 		    jump_opt_dump = 1; 		    jump2_opt_dump = 1; 		    local_reg_dump = 1; 		    loop_dump = 1; 		    rtl_dump = 1; 		    cse_dump = 1, cse2_dump = 1; 		    sched_dump = 1; 		    sched2_dump = 1;		    stack_reg_dump = 1;		    break;		  case 'k':		    stack_reg_dump = 1;		    break;		  case 'c':		    combine_dump = 1;		    break;		  case 'd':		    dbr_sched_dump = 1;		    break;		  case 'f':		    flow_dump = 1;		    break;		  case 'g':		    global_reg_dump = 1;		    break;		  case 'j':		    jump_opt_dump = 1;		    break;		  case 'J':		    jump2_opt_dump = 1;		    break;		  case 'l':		    local_reg_dump = 1;		    break;		  case 'L':		    loop_dump = 1;		    break;		  case 'm':		    flag_print_mem = 1;		    break;		  case 'p':		    flag_print_asm_name = 1;		    break;		  case 'r':		    rtl_dump = 1;		    break;		  case 's':		    cse_dump = 1;		    break;		  case 't':		    cse2_dump = 1;		    break;		  case 'S':		    sched_dump = 1;		    break;		  case 'R':		    sched2_dump = 1;		    break;		  case 'y':		    set_yydebug (1);		    break;		  case 'x':		    rtl_dump_and_exit = 1;		    break;		  }	    }	  else if (str[0] == 'f')	    {	      register char *p = &str[1];	      int found = 0;	      /* Some kind of -f option.		 P's value is the option sans `-f'.		 Search for it in the table of options.  */	      for (j = 0;		   !found && j < sizeof (f_options) / sizeof (f_options[0]);		   j++)		{		  if (!strcmp (p, f_options[j].string))		    {		      *f_options[j].variable = f_options[j].on_value;		      /* A goto here would be cleaner,			 but breaks the vax pcc.  */		      found = 1;		    }		  if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'		      && ! strcmp (p+3, f_options[j].string))		    {		      *f_options[j].variable = ! f_options[j].on_value;		      found = 1;		    }		}	      if (found)		;	      else if (!strncmp (p, "fixed-", 6))		fix_register (&p[6], 1, 1);	      else if (!strncmp (p, "call-used-", 10))		fix_register (&p[10], 0, 1);	      else if (!strncmp (p, "call-saved-", 11))		fix_register (&p[11], 0, 0);	      else		error ("Invalid option `%s'", argv[i]);	    }	  else if (str[0] == 'O')	    {	      register char *p = str+1;	      while (*p && *p >= '0' && *p <= '9')		p++;	      if (*p == '\0')		;	      else		error ("Invalid option `%s'", argv[i]);	    }	  else if (!strcmp (str, "pedantic"))	    pedantic = 1;	  else if (!strcmp (str, "pedantic-errors"))	    flag_pedantic_errors = pedantic = 1;	  else if (!strcmp (str, "quiet"))	    quiet_flag = 1;	  else if (!strcmp (str, "version"))	    version_flag = 1;	  else if (!strcmp (str, "w"))	    inhibit_warnings = 1;	  else if (!strcmp (str, "W"))	    {	      extra_warnings = 1;	      /* We save the value of warn_uninitialized, since if they put		 -Wuninitialized on the command line, we need to generate a		 warning about not using it without also specifying -O.  */	      if (warn_uninitialized != 1)		warn_uninitialized = 2;	    }	  else if (str[0] == 'W')	    {	      register char *p = &str[1];	      int found = 0;	      /* Some kind of -W option.		 P's value is the option sans `-W'.		 Search for it in the table of options.  */	      for (j = 0;		   !found && j < sizeof (W_options) / sizeof (W_options[0]);		   j++)		{		  if (!strcmp (p, W_options[j].string))		    {		      *W_options[j].variable = W_options[j].on_value;		      /* A goto here would be cleaner,			 but breaks the vax pcc.  */		      found = 1;		    }		  if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'		      && ! strcmp (p+3, W_options[j].string))		    {		      *W_options[j].variable = ! W_options[j].on_value;		      found = 1;		    }		}	      if (found)		;	      else if (!strncmp (p, "id-clash-", 9))		{		  char *endp = p + 9;		  while (*endp)		    {		      if (*endp >= '0' && *endp <= '9')			endp++;		      else			{			  error ("Invalid option `%s'", argv[i]);			  goto id_clash_lose;			}		    }		  warn_id_clash = 1;		  id_clash_len = atoi (str + 10);		id_clash_lose: ;		}	      else if (!strncmp (p, "larger-than-", 12))		{		  char *endp = p + 12;		  while (*endp)		    {		      if (*endp >= '0' && *endp <= '9')			endp++;		      else			{			  error ("Invalid option `%s'", argv[i]);			  goto larger_than_lose;			}		    }		  warn_larger_than = 1;		  larger_than_size = atoi (str + 13);		larger_than_lose: ;		}	      else		error ("Invalid option `%s'", argv[i]);	    }	  else if (!strcmp (str, "p"))	    {	      if (!output_bytecode)		profile_flag = 1;	      else		error ("profiling not supported in bytecode compilation");	    }	  else if (!strcmp (str, "a"))	    {#if !defined (BLOCK_PROFILER) || !defined (FUNCTION_BLOCK_PROFILER)	      warning ("`-a' option (basic block profile) not supported");#else	      profile_block_flag = 1;#endif	    }	  else if (str[0] == 'g')	    {	      char *p = str + 1;	      char *q;	      unsigned len;	      unsigned level;	      while (*p && (*p < '0' || *p > '9'))		p++;	      len = p - str;	      q = p;	      while (*q && (*q >= '0' && *q <= '9'))		q++;	      if (*p)		level = atoi (p);	      else		level = 2;	/* default debugging info level */	      if (*q || level > 3)		{		  warning ("invalid debug level specification in option: `-%s'",			   str);		  warning ("no debugging information will be generated");		  level = 0;		}	      /* If more than one debugging type is supported,		 you must define PREFERRED_DEBUGGING_TYPE		 to choose a format in a system-dependent way.  */	      /* This is one long line cause VAXC can't handle a \-newline.  */#if 1 < (defined (DBX_DEBUGGING_INFO) + defined (SDB_DEBUGGING_INFO) + defined (DWARF_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO))#ifdef PREFERRED_DEBUGGING_TYPE	      if (!strncmp (str, "ggdb", len))		write_symbols = PREFERRED_DEBUGGING_TYPE;#else /* no PREFERRED_DEBUGGING_TYPE */You Lose!  You must define PREFERRED_DEBUGGING_TYPE!#endif /* no PREFERRED_DEBUGGING_TYPE */#endif /* More than one debugger format enabled.  */#ifdef DBX_DEBUGGING_INFO	      if (write_symbols != NO_DEBUG)		;	      else if (!strncmp (str, "ggdb", len))		write_symbols = DBX_DEBUG;	      else if (!strncmp (str, "gstabs", len))		write_symbols = DBX_DEBUG;	      else if (!strncmp (str, "gstabs+", len))		write_symbols = DBX_DEBUG;	      /* Always enable extensions for -ggdb or -gstabs+, 		 always disable for -gstabs.		 For plain -g, use system-specific default.  */	      if (write_symbols == DBX_DEBUG && !strncmp (str, "ggdb", len)		  && len >= 2)		use_gnu_debug_info_extensions = 1;	      else if (write_symbols == DBX_DEBUG && !strncmp (str, "gstabs+", len)		       && len >= 7)		use_gnu_debug_info_extensions = 1;	      else if (write_symbols == DBX_DEBUG		       && !strncmp (str, "gstabs", len) && len >= 2)		use_gnu_debug_info_extensions = 0;	      else		use_gnu_debug_info_extensions = DEFAULT_GDB_EXTENSIONS;#endif /* DBX_DEBUGGING_INFO */#ifdef DWARF_DEBUGGING_INFO	      if (write_symbols != NO_DEBUG)		;	      else if (!strncmp (str, "g", len))		write_symbols = DWARF_DEBUG;	      else if (!strncmp (str, "ggdb", len))		write_symbols = DWARF_DEBUG;	      else if (!strncmp (str, "gdwarf", len))		write_symbols = DWARF_DEBUG;	      /* Always enable extensions for -ggdb or -gdwarf+, 		 always disable for -gdwarf.		 For plain -g, use system-specific default.  */	      if (write_symbols == DWARF_DEBUG && !strncmp (str, "ggdb", len)		  && len >= 2)		use_gnu_debug_info_extensions = 1;	      else if (write_symbols == DWARF_DEBUG && !strcmp (str, "gdwarf+"))		use_gnu_debug_info_extensions = 1;	      else if (write_symbols == DWARF_DEBUG		       && !strncmp (str, "gdwarf", len) && len >= 2)		use_gnu_debug_info_extensions = 0;	      else		use_gnu_debug_info_extensions = DEFAULT_GDB_EXTENSIONS;#endif#ifdef SDB_DEBUGGING_INFO	      if (write_symbols != NO_DEBUG)		;	      else if (!strncmp (str, "g", len))		write_symbols = SDB_DEBUG;	      else if (!strncmp (str, "gdb", len))		write_symbols = SDB_DEBUG;	      else if (!strncmp (str, "gcoff", len))		write_symbols = SDB_DEBUG;#endif /* SDB_DEBUGGING_INFO */#ifdef XCOFF_DEBUGGING_INFO	      if (write_symbols != NO_DEBUG)		;	      else if (!strncmp (str, "g", len))		write_symbols = XCOFF_DEBUG;	      else if (!strncmp (str, "ggdb", len))		write_symbols = XCOFF_DEBUG;	      else if (!strncmp (str, "gxcoff", len))		write_symbols = XCOFF_DEBUG;	      /* Always enable extensions for -ggdb or -gxcoff+,		 always disable for -gxcoff.		 For plain -g, use system-specific default.  */	      if (write_symbols == XCOFF_DEBUG && !strncmp (str, "ggdb", len)		  && len >= 2)		use_gnu_debug_info_extensions = 1;	      else if (write_symbols == XCOFF_DEBUG && !strcmp (str, "gxcoff+"))		use_gnu_debug_info_extensions = 1;	      else if (write_symbols == XCOFF_DEBUG		       && !strncmp (str, "gxcoff", len) && len >= 2)		use_gnu_debug_info_extensions = 0;	      else		use_gnu_debug_info_extensions = DEFAULT_GDB_EXTENSIONS;#endif	      	      if (write_symbols == NO_DEBUG)		warning ("`-%s' not supported by this configuration of GCC",			 str);	      else if (level == 0)		write_symbols = NO_DEBUG;	      else		debug_info_level = (enum debug_info_level) level;	    }	  else if (!strcmp (str, "o"))	    {	      asm_file_name = argv[++i];	    }	  else if (str[0] == 'G')	    {	      g_switch_set = TRUE;	      g_switch_value = atoi ((str[1] != '\0') ? str+1 : argv[++i]);	    }	  else if (!strncmp (str, "aux-info", 8))	    {	      flag_gen_aux_info = 1;	      aux_info_file_name = (str[8] != '\0' ? str+8 : argv[++i]);	    }	  else	    error ("Invalid option `%s'", argv[i]);	}      else if (argv[i][0] == '+')	error ("Invalid option `%s'", argv[i]);      else	filename = argv[i];    }  /* Initialize for bytecode output.  A good idea to do this as soon as     possible after the "-f" options have been parsed. */  if (output_bytecode)    {#ifndef TARGET_SUPPORTS_BYTECODE      /* Just die with a fatal error if not supported */      fatal ("-fbytecode not supporter for this target");#else      bc_initialize ();#endif    }  if (optimize == 0)    {      /* Inlining does not work if not optimizing,	 so force it not to be done.  */      flag_no_inline = 1;      warn_inline = 0;      /* The c_decode_option and lang_decode_option functions set	 this to `2' if -Wall is used, so we can avoid giving out	 lots of errors for people who don't realize what -Wall does.  */      if (warn_uninitialized == 1)	warning ("-Wuninitialized is not supported without -O");    }#if defined(DWARF_DEBUGGING_INFO)  if (write_symbols == DWARF_DEBUG      && strcmp (language_string, "GNU C++") == 0)    {      warning ("-g option not supported for C++ on systems using the DWARF debugging format");      write_symbols = NO_DEBUG;    }#endif /* defined(DWARF_DEBUGGING_INFO) */#ifdef OVERRIDE_OPTIONS  /* Some machines may reject certain combinations of options.  */  OVERRIDE_OPTIONS;#endif  /* Unrolling all loops implies that standard loop unrolling must also     be done.  */  if (flag_unroll_all_loops)    flag_unroll_loops = 1;  /* Loop unrolling requires that strength_reduction be on also.  Silently     turn on strength reduction here if it isn't already on.  Also, the loop     unrolling code assumes that cse will be run after loop, so that must     be turned on also.  */  if (flag_unroll_loops)    {      flag_strength_reduce = 1;      flag_rerun_cse_after_loop = 1;    }  /* Warn about options that are not supported on this machine.  */#ifndef INSN_SCHEDULING  if (flag_schedule_insns || flag_schedule_insns_after_reload)    warning ("instruction scheduling not supported on this target machine");#endif#ifndef DELAY_SLOTS  if (flag_delayed_branch)    warning ("this target machine does not have delayed branches");#endif  /* If we are in verbose mode, write out the version and maybe all the     option flags in use.  */  if (version_flag)    {      fprintf (stderr, "%s version %s", language_string, version_string);#ifdef TARGET_VERSION      TARGET_VERSION;#endif#ifdef __GNUC__#ifndef __VERSION__#define __VERSION__ "[unknown]"#endif      fprintf (stderr, " compiled by GNU C version %s.\n", __VERSION__);#else      fprintf (stderr, " compiled by CC.\n");#endif      if (! quiet_flag)	print_switch_values ();    }  compile_file (filename);#if !defined(OS2) && !defined(VMS) && !defined(_WIN32)  if (flag_print_mem)    {      char *lim = (char *) sbrk (0);      fprintf (stderr, "Data size %d.\n",	       lim - (char *) &environ);      fflush (stderr);#ifdef USG      system ("ps -l 1>&2");#else /* not USG */      system ("ps v");#endif /* not USG */    }#endif /* not OS2 and not VMS and not _WIN32 */  if (errorcount)    exit (FATAL_EXIT_CODE);  if (sorrycount)    exit (FATAL_EXIT_CODE);  exit (SUCCESS_EXIT_CODE);  return 0;}