OSDN Git Service

Correct test results for avoid-bool-define fix
[pf3gnuchains/gcc-fork.git] / gcc / c-lang.c
index 1c9fe38..cb60002 100644 (file)
@@ -1,6 +1,6 @@
 /* Language-specific hook definitions for C front end.
    Copyright (C) 1991, 1995, 1997, 1998,
-   1999, 2000 Free Software Foundation, Inc.
+   1999, 2000, 2001 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -34,59 +34,55 @@ Boston, MA 02111-1307, USA.  */
 #include "expr.h"
 #include "c-tree.h"
 #include "c-lex.h"
-
-static int c_tree_printer PARAMS ((output_buffer *));
-
-#if USE_CPPLIB
 #include "cpplib.h"
-extern cpp_reader  parse_in;
-#endif
 
-/* Each of the functions defined here
-   is an alternative to a function in objc-actions.c.  */
-   
-int
-lang_decode_option (argc, argv)
-     int argc;
-     char **argv;
+static int c_tree_printer PARAMS ((output_buffer *));
+static int c_missing_noreturn_ok_p PARAMS ((tree));
+static void c_init PARAMS ((void));
+static void c_init_options PARAMS ((void));
+static void c_post_options PARAMS ((void));
+
+/* Each front end provides its own.  */
+struct lang_hooks lang_hooks = {c_init,
+                               NULL, /* c_finish */
+                               c_init_options,
+                               c_decode_option,
+                               c_post_options};
+
+/* Post-switch processing.  */
+static void
+c_post_options ()
 {
-  return c_decode_option (argc, argv);
+  cpp_post_options (parse_in);
 }
 
-void
-lang_init_options ()
+static void
+c_init_options ()
 {
-#if USE_CPPLIB
-  cpp_init ();
-  cpp_reader_init (&parse_in, CLK_GNUC89);
-#endif
+  /* Make identifier nodes long enough for the language-specific slots.  */
+  set_identifier_size (sizeof (struct lang_identifier));
+
+  parse_in = cpp_create_reader (ident_hash, CLK_GNUC89);
+
   /* Mark as "unspecified".  */
   flag_bounds_check = -1;
 }
 
-void
-lang_init ()
+static void
+c_init ()
 {
-  /* If still "unspecified", make it match -fbounded-pointers.  */
-  if (flag_bounds_check < 0)
-    flag_bounds_check = flag_bounded_pointers;
+  c_common_lang_init ();
 
-  /* If still unspecified, make it match pedantic && -std=c99.  */
+  /* If still unspecified, make it match -std=c99
+     (allowing for -pedantic-errors).  */
   if (mesg_implicit_function_declaration < 0)
     {
-      if (pedantic && flag_isoc99)
+      if (flag_isoc99)
        mesg_implicit_function_declaration = flag_pedantic_errors ? 2 : 1;
       else
        mesg_implicit_function_declaration = 0;
     }
 
-  /* the beginning of the file is a new line; check for # */
-  /* With luck, we discover the real source file's name from that
-     and put it in input_filename.  */
-#if !USE_CPPLIB
-  ungetc (check_newline (), finput);
-#endif
-
   save_lang_status = &push_c_function_context;
   restore_lang_status = &pop_c_function_context;
   mark_lang_status = &mark_c_function_context;
@@ -94,15 +90,11 @@ lang_init ()
   lang_safe_from_p = &c_safe_from_p;
   lang_printer = &c_tree_printer;
   lang_expand_decl_stmt = &c_expand_decl_stmt;
+  lang_missing_noreturn_ok_p = &c_missing_noreturn_ok_p;
 
   c_parse_init ();
 }
 
-void
-lang_finish ()
-{
-}
-
 const char *
 lang_identify ()
 {
@@ -156,13 +148,6 @@ maybe_objc_comptypes (lhs, rhs, reflexive)
 }
 
 tree
-maybe_objc_method_name (decl)
-    tree decl ATTRIBUTE_UNUSED;
-{
-  return 0;
-}
-
-tree
 maybe_building_objc_message_expr ()
 {
   return 0;
@@ -199,10 +184,9 @@ start_cdtor (method_type)
   tree body;
 
   start_function (void_list_node_1,
-                 build_parse_node (CALL_EXPR, fnname, 
-                                   tree_cons (NULL_TREE, NULL_TREE, 
-                                              void_list_node_1),
-                                   NULL_TREE),
+                 build_nt (CALL_EXPR, fnname,
+                           tree_cons (NULL_TREE, NULL_TREE, void_list_node_1),
+                           NULL_TREE),
                  NULL_TREE, NULL_TREE);
   store_parm_decls ();
 
@@ -226,11 +210,11 @@ finish_cdtor (body)
   tree block;
 
   scope = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
-  block = poplevel (0, 0, 0); 
+  block = poplevel (0, 0, 0);
   SCOPE_STMT_BLOCK (TREE_PURPOSE (scope)) = block;
   SCOPE_STMT_BLOCK (TREE_VALUE (scope)) = block;
 
-  RECHAIN_STMTS (body, COMPOUND_BODY (body)); 
+  RECHAIN_STMTS (body, COMPOUND_BODY (body));
 
   finish_function (0);
 }
@@ -265,7 +249,7 @@ finish_file ()
       finish_cdtor (body);
     }
 #endif
-  
+
   if (back_end_hook)
     (*back_end_hook) (getdecls ());
 
@@ -307,3 +291,12 @@ c_tree_printer (buffer)
       return 0;
     }
 }
+
+static int
+c_missing_noreturn_ok_p (decl)
+     tree decl;
+{
+  /* A missing noreturn is not ok for freestanding implementations and
+     ok for the `main' function in hosted implementations.  */
+  return flag_hosted && MAIN_NAME_P (DECL_ASSEMBLER_NAME (decl));
+}