OSDN Git Service

Change TARGET_ALTIVEC to TARGET_ALTIVEC_ABI.
[pf3gnuchains/gcc-fork.git] / gcc / c-opts.c
index 3925c44..b15f31c 100644 (file)
@@ -52,8 +52,7 @@ static int saved_lineno;
 static cpp_options *cpp_opts;
 
 /* Input filename.  */
-static const char **in_fnames;
-static unsigned num_in_fnames;
+static const char *this_input_filename;
 
 /* Filename and stream for preprocessed output.  */
 static const char *out_fname;
@@ -109,7 +108,7 @@ static void sanitize_cpp_opts (void);
 static void add_prefixed_path (const char *, size_t);
 static void push_command_line_include (void);
 static void cb_file_change (cpp_reader *, const struct line_map *);
-static void finish_options (void);
+static void finish_options (const char *);
 
 #ifndef STDC_0_IN_SYSTEM_HEADERS
 #define STDC_0_IN_SYSTEM_HEADERS 0
@@ -218,8 +217,7 @@ c_common_init_options (unsigned int argc, const char **argv ATTRIBUTE_UNUSED)
   flag_exceptions = c_dialect_cxx ();
   warn_pointer_arith = c_dialect_cxx ();
 
-  deferred_opts = (struct deferred_opt *)
-    xmalloc (argc * sizeof (struct deferred_opt));
+  deferred_opts = xmalloc (argc * sizeof (struct deferred_opt));
 
   result = lang_flags[c_language];
 
@@ -237,7 +235,7 @@ c_common_init_options (unsigned int argc, const char **argv ATTRIBUTE_UNUSED)
   return result;
 }
 
-/* Handle switch SCODE with argument ARG.  ON is true, unless no-
+/* Handle switch SCODE with argument ARG.  VALUE is true, unless no-
    form of an -f or -W option was given.  Returns 0 if the switch was
    invalid, a negative number to prevent language-independent
    processing in toplev.c (a hack necessary for the short-term).  */
@@ -337,6 +335,10 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       flag_no_line_commands = 1;
       break;
 
+    case OPT_fworking_directory:
+      flag_working_directory = value;
+      break;
+
     case OPT_U:
       defer_opt (code, arg);
       break;
@@ -412,6 +414,10 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       warn_ctor_dtor_privacy = value;
       break;
 
+    case OPT_Wdeclaration_after_statement:
+      warn_declaration_after_statement = value;
+      break;
+
     case OPT_Wdeprecated:
       warn_deprecated = value;
       cpp_opts->warn_deprecated = value;
@@ -469,6 +475,10 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       warn_format_zero_length = value;
       break;
 
+    case OPT_Winit_self:
+      warn_init_self = value;
+      break;
+
     case OPT_Wimplicit:
       set_Wimplicit (value);
       break;
@@ -482,7 +492,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       break;
 
     case OPT_Wimport:
-      cpp_opts->warn_import = value;
+      /* Silently ignore for now.  */
       break;
 
     case OPT_Winvalid_offsetof:
@@ -540,6 +550,10 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       warn_nonnull = value;
       break;
 
+    case OPT_Wold_style_definition:
+      warn_old_style_definition = value;
+      break;
+
     case OPT_Wold_style_cast:
       warn_old_style_cast = value;
       break;
@@ -671,6 +685,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
     case OPT_fthis_is_variable:
     case OPT_fvtable_thunks:
     case OPT_fxref:
+    case OPT_fvtable_gc:
       warning ("switch \"%s\" is no longer supported", option->opt_text);
       break;
 
@@ -717,7 +732,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
 
     case OPT_ffreestanding:
       value = !value;
-      /* Fall through...  */
+      /* Fall through....  */
     case OPT_fhosted:
       flag_hosted = value;
       flag_no_builtin = !value;
@@ -832,10 +847,18 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       flag_next_runtime = value;
       break;
 
+    case OPT_fnil_receivers:
+      flag_nil_receivers = value;
+      break;
+
     case OPT_fnonansi_builtins:
       flag_no_nonansi_builtin = !value;
       break;
 
+    case OPT_fobjc_exceptions:
+      flag_objc_exceptions = value;
+      break;
+
     case OPT_foperator_names:
       cpp_opts->operator_names = value;
       break;
@@ -856,6 +879,10 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       cpp_opts->preprocessed = value;
       break;
 
+    case OPT_freplace_objc_classes:
+      flag_replace_objc_classes = value;
+      break;
+      
     case OPT_frepo:
       flag_use_repository = value;
       if (value)
@@ -892,10 +919,6 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       max_tinst_depth = value;
       break;
 
-    case OPT_fvtable_gc:
-      flag_vtable_gc = value;
-      break;
-
     case OPT_fuse_cxa_atexit:
       flag_use_cxa_atexit = value;
       break;
@@ -904,6 +927,10 @@ c_common_handle_option (size_t scode, const char *arg, int value)
       flag_weak = value;
       break;
 
+    case OPT_fzero_link:
+      flag_zero_link = value;
+      break;
+
     case OPT_gen_decls:
       flag_gen_declaration = 1;
       break;
@@ -966,7 +993,7 @@ c_common_handle_option (size_t scode, const char *arg, int value)
         is not overridden.  */
     case OPT_pedantic_errors:
       cpp_opts->pedantic_errors = 1;
-      /* fall through */
+      /* Fall through.  */
     case OPT_pedantic:
       cpp_opts->pedantic = 1;
       cpp_opts->warn_endif_labels = 1;
@@ -1031,18 +1058,9 @@ c_common_handle_option (size_t scode, const char *arg, int value)
   return result;
 }
 
-/* Handle FILENAME from the command line.  */
-void
-c_common_handle_filename (const char *filename)
-{
-  num_in_fnames++;
-  in_fnames = xrealloc (in_fnames, num_in_fnames * sizeof (in_fnames[0]));
-  in_fnames[num_in_fnames - 1] = filename;
-}
-
 /* Post-switch processing.  */
 bool
-c_common_post_options (const char **pfilename)
+c_common_post_options (const char **pfilename ATTRIBUTE_UNUSED)
 {
   /* Canonicalize the input and output filenames.  */
   if (in_fnames == NULL)
@@ -1132,9 +1150,7 @@ c_common_post_options (const char **pfilename)
     }
 
   cpp_get_callbacks (parse_in)->file_change = cb_file_change;
-
-  /* NOTE: we use in_fname here, not the one supplied.  */
-  *pfilename = cpp_read_main_file (parse_in, in_fnames[0]);
+  cpp_post_options (parse_in);
 
   saved_lineno = input_line;
   input_line = 0;
@@ -1167,7 +1183,7 @@ c_common_init (void)
 
   if (flag_preprocess_only)
     {
-      finish_options ();
+      finish_options (in_fnames[0]);
       preprocess_file (parse_in);
       return false;
     }
@@ -1202,10 +1218,9 @@ c_common_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
 
          /* Reset cpplib's macros and start a new file.  */
          cpp_undef_all (parse_in);
-         cpp_read_next_file (parse_in, in_fnames[file_index]);
        }
 
-      finish_options();
+      finish_options(in_fnames[file_index]);
       if (file_index == 0)
        pch_init();
       c_parse_file ();
@@ -1339,6 +1354,15 @@ sanitize_cpp_opts (void)
      and/or -Wtraditional, whatever the ordering.  */
   cpp_opts->warn_long_long
     = warn_long_long && ((!flag_isoc99 && pedantic) || warn_traditional);
+
+  /* If we're generating preprocessor output, emit current directory
+     if explicitly requested or if debugging information is enabled.
+     ??? Maybe we should only do it for debugging formats that
+     actually output the current directory?  */
+  if (flag_working_directory == -1)
+    flag_working_directory = (debug_info_level != DINFO_LEVEL_NONE);
+  cpp_opts->working_directory
+    = flag_preprocess_only && flag_working_directory;
 }
 
 /* Add include path with a prefix at the front of its name.  */
@@ -1361,15 +1385,17 @@ add_prefixed_path (const char *suffix, size_t chain)
   add_path (path, chain, 0);
 }
 
-/* Handle -D, -U, -A, -imacros, and the first -include.  */
+/* Handle -D, -U, -A, -imacros, and the first -include.  
+   TIF is the input file to which we will return after processing all
+   the includes.  */
 static void
-finish_options (void)
+finish_options (const char *tif)
 {
   if (!cpp_opts->preprocessed)
     {
       size_t i;
 
-      cpp_change_file (parse_in, LC_RENAME, _("<built-in>"));
+      cpp_change_file (parse_in, LC_ENTER, _("<built-in>"));
       cpp_init_builtins (parse_in, flag_hosted);
       c_cpp_builtins (parse_in);
 
@@ -1414,6 +1440,8 @@ finish_options (void)
     }
 
   include_cursor = 0;
+  this_input_filename = tif;
+  cpp_find_main_file (parse_in, this_input_filename);
   push_command_line_include ();
 }
 
@@ -1421,24 +1449,24 @@ finish_options (void)
 static void
 push_command_line_include (void)
 {
-  if (cpp_opts->preprocessed)
-    return;
-
   while (include_cursor < deferred_count)
     {
       struct deferred_opt *opt = &deferred_opts[include_cursor++];
 
-      if (opt->code == OPT_include && cpp_push_include (parse_in, opt->arg))
+      if (! cpp_opts->preprocessed && opt->code == OPT_include
+         && cpp_push_include (parse_in, opt->arg))
        return;
     }
 
   if (include_cursor == deferred_count)
     {
+      include_cursor++;
       /* Restore the line map from <command line>.  */
-      cpp_change_file (parse_in, LC_RENAME, main_input_filename);
+      if (! cpp_opts->preprocessed)
+       cpp_change_file (parse_in, LC_LEAVE, NULL);
       /* -Wunused-macros should only warn about macros defined hereafter.  */
       cpp_opts->warn_unused_macros = warn_unused_macros;
-      include_cursor++;
+      cpp_push_main_file (parse_in);
     }
 }
 
@@ -1452,7 +1480,7 @@ cb_file_change (cpp_reader *pfile ATTRIBUTE_UNUSED,
   else
     fe_file_change (new_map);
 
-  if (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map))
+  if (new_map == 0 || (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map)))
     push_command_line_include ();
 }
 
@@ -1466,7 +1494,6 @@ set_std_c89 (int c94, int iso)
   flag_no_asm = iso;
   flag_no_gnu_keywords = iso;
   flag_no_nonansi_builtin = iso;
-  flag_noniso_default_format_attributes = !iso;
   flag_isoc94 = c94;
   flag_isoc99 = 0;
   flag_writable_strings = 0;
@@ -1479,7 +1506,6 @@ set_std_c99 (int iso)
   cpp_set_lang (parse_in, iso ? CLK_STDC99: CLK_GNUC99);
   flag_no_asm = iso;
   flag_no_nonansi_builtin = iso;
-  flag_noniso_default_format_attributes = !iso;
   flag_iso = iso;
   flag_isoc99 = 1;
   flag_isoc94 = 1;
@@ -1493,7 +1519,6 @@ set_std_cxx98 (int iso)
   cpp_set_lang (parse_in, iso ? CLK_CXX98: CLK_GNUCXX);
   flag_no_gnu_keywords = iso;
   flag_no_nonansi_builtin = iso;
-  flag_noniso_default_format_attributes = !iso;
   flag_iso = iso;
 }