cp-tree.h (min_tree_cons): Remove.
authorMark Mitchell <mark@codesourcery.com>
Wed, 1 Dec 1999 18:09:09 +0000 (18:09 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Wed, 1 Dec 1999 18:09:09 +0000 (18:09 +0000)
* cp-tree.h (min_tree_cons): Remove.
(scratch_ovl_cons): Likewise.
* decl.c (saveable_obstack): Don't declare.
(duplicate_decls): Tweak error-message.
(initialize_local_var): Explicitly mark the definition as static.
(finish_function): Call permanent_allocation, just so
that the middle-end sees the obstacks it expects.
(mark_cp_function_context): Likewise.
* init.c (build_new): Don't use min_tree_cons.
* lex.c (permanent_obstack): Don't declare.
(current_obstack, saveable_obstack): Likewise.
* spew.c (current_obstack, saveable_obstack): Likewise.
* tree.c (current_obstack, saveable_obstack): Likewise.
(scratch_ovl_cons): Remove.
(build_min_nt): Don't mess with obstacks.
(build_min): Likewise.
(min_tree_cons): Remove
* typeck.c (build_component_ref): Don't use scratch_ovl_cons.
(build_x_function_call): Likewise.
(build_c_cast): Don't use min_tree_cons.

From-SVN: r30743

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/init.c
gcc/cp/lex.c
gcc/cp/spew.c
gcc/cp/tree.c
gcc/cp/typeck.c
gcc/testsuite/g++.old-deja/g++.other/syshdr1.C [new file with mode: 0644]

index c78735e..db5dad4 100644 (file)
@@ -1,3 +1,26 @@
+1999-12-01  Mark Mitchell  <mark@codesourcery.com>
+
+       * cp-tree.h (min_tree_cons): Remove.
+       (scratch_ovl_cons): Likewise.
+       * decl.c (saveable_obstack): Don't declare.
+       (duplicate_decls): Tweak error-message.
+       (initialize_local_var): Explicitly mark the definition as static.
+       (finish_function): Call permanent_allocation, just so
+       that the middle-end sees the obstacks it expects.
+       (mark_cp_function_context): Likewise.
+       * init.c (build_new): Don't use min_tree_cons.
+       * lex.c (permanent_obstack): Don't declare.
+       (current_obstack, saveable_obstack): Likewise.
+       * spew.c (current_obstack, saveable_obstack): Likewise.
+       * tree.c (current_obstack, saveable_obstack): Likewise.
+       (scratch_ovl_cons): Remove.
+       (build_min_nt): Don't mess with obstacks.
+       (build_min): Likewise.
+       (min_tree_cons): Remove
+       * typeck.c (build_component_ref): Don't use scratch_ovl_cons.
+       (build_x_function_call): Likewise.
+       (build_c_cast): Don't use min_tree_cons.
+       
 1999-11-29  Mark Mitchell  <mark@codesourcery.com>
 
        * pt.c (tsubst_decl): Robustify.
index 3b1f402..f2dc09e 100644 (file)
@@ -3990,7 +3990,6 @@ extern int member_p                               PROTO((tree));
 extern cp_lvalue_kind real_lvalue_p            PROTO((tree));
 extern tree build_min                          PVPROTO((enum tree_code, tree, ...));
 extern tree build_min_nt                       PVPROTO((enum tree_code, ...));
-extern tree min_tree_cons                      PROTO((tree, tree, tree));
 extern int lvalue_p                            PROTO((tree));
 extern int lvalue_or_else                      PROTO((tree, const char *));
 extern tree build_cplus_new                    PROTO((tree, tree));
@@ -4014,7 +4013,6 @@ extern int is_overloaded_fn                       PROTO((tree));
 extern tree get_first_fn                       PROTO((tree));
 extern int bound_pmf_p                         PROTO((tree));
 extern tree ovl_cons                            PROTO((tree, tree));
-extern tree scratch_ovl_cons                    PROTO((tree, tree));
 extern int ovl_member                           PROTO((tree, tree));
 extern tree build_overload                      PROTO((tree, tree));
 extern tree fnaddr_from_vtable_entry           PROTO((tree));
index 0edcc25..b05775b 100644 (file)
@@ -49,7 +49,6 @@ Boston, MA 02111-1307, USA.  */
 #define obstack_chunk_free free
 
 extern struct obstack permanent_obstack;
-extern struct obstack* saveable_obstack;
 
 extern int current_class_depth;
 
@@ -3318,7 +3317,7 @@ duplicate_decls (newdecl, olddecl)
            {
              cp_error ("declaration of `%F' throws different exceptions",
                        newdecl);
-             cp_error_at ("to previous declaration `%F'", olddecl);
+             cp_error_at ("than previous declaration `%F'", olddecl);
            }
        }
       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
@@ -7488,7 +7487,7 @@ initialize_local_var (decl, init, flags)
 
 /* Generate code to destroy DECL (a local variable).  */
 
-void 
+static void 
 destroy_local_var (decl)
      tree decl;
 {
@@ -13792,6 +13791,9 @@ finish_function (lineno, flags)
          function.  For a nested function, this value is used in
          pop_cp_function_context and then reset via pop_function_context.  */
       current_function_decl = NULL_TREE;
+      /* We don't really care about obstacks, but the middle-end
+        sometimes cares on what obstck things are located.  */
+      permanent_allocation (1);
     }
 
   return fndecl;
@@ -14201,7 +14203,7 @@ mark_lang_function (p)
 
 /* Mark the language-specific data in F for GC.  */
 
-void
+static void
 mark_cp_function_context (f)
      struct function *f;
 {
index 1361b96..639087a 100644 (file)
@@ -1999,9 +1999,9 @@ build_new (placement, decl, init, use_global_new)
   if (processing_template_decl)
     {
       if (has_array)
-       t = min_tree_cons (min_tree_cons (NULL_TREE, type, NULL_TREE),
-                          build_min_nt (ARRAY_REF, NULL_TREE, nelts),
-                          NULL_TREE);
+       t = tree_cons (tree_cons (NULL_TREE, type, NULL_TREE),
+                      build_min_nt (ARRAY_REF, NULL_TREE, nelts),
+                      NULL_TREE);
       else
        t = type;
        
index ae2783f..30292a6 100644 (file)
@@ -51,9 +51,6 @@ Boston, MA 02111-1307, USA.  */
 #define DIR_SEPARATOR '/'
 #endif
 
-extern struct obstack permanent_obstack;
-extern struct obstack *current_obstack, *saveable_obstack;
-
 extern void yyprint PROTO((FILE *, int, YYSTYPE));
 
 static tree get_time_identifier PROTO((const char *));
index ee9b70f..76f2253 100644 (file)
@@ -205,7 +205,6 @@ extern int looking_for_typename;
 int looking_for_template;
 extern int do_snarf_defarg;
 
-extern struct obstack *current_obstack, *saveable_obstack;
 tree got_scope;
 tree got_object;
 
index 93893b3..9796c8f 100644 (file)
@@ -437,10 +437,7 @@ break_out_calls (exp)
 
 }
 \f
-extern struct obstack *current_obstack;
 extern struct obstack permanent_obstack;
-extern struct obstack *saveable_obstack;
-extern struct obstack *expression_obstack;
 
 /* Here is how primitive or already-canonicalized types' hash
    codes are made.  MUST BE CONSISTENT WITH tree.c !!! */
@@ -1406,21 +1403,6 @@ ovl_cons (decl, chain)
   return result;
 }
 
-/* Same as ovl_cons, but on the scratch_obstack. */
-
-tree
-scratch_ovl_cons (value, chain)
-     tree value, chain;
-{
-  register tree node;
-  register struct obstack *ambient_obstack = current_obstack;
-  extern struct obstack *expression_obstack;
-  current_obstack = expression_obstack;
-  node = ovl_cons (value, chain);
-  current_obstack = ambient_obstack;
-  return node;
-}
-
 /* Build a new overloaded function. If this is the first one,
    just return it; otherwise, ovl_cons the _DECLs */
 
@@ -2023,8 +2005,8 @@ break_out_target_exprs (t)
 /* Obstack used for allocating nodes in template function and variable
    definitions.  */
 
-/* Similar to `build_nt', except we build
-   on the permanent_obstack, regardless.  */
+/* Similar to `build_nt', except that we set TREE_COMPLEXITY to be the
+   current line number.  */
 
 tree
 build_min_nt VPROTO((enum tree_code code, ...))
@@ -2032,7 +2014,6 @@ build_min_nt VPROTO((enum tree_code code, ...))
 #ifndef ANSI_PROTOTYPES
   enum tree_code code;
 #endif
-  register struct obstack *ambient_obstack = expression_obstack;
   va_list p;
   register tree t;
   register int length;
@@ -2044,8 +2025,6 @@ build_min_nt VPROTO((enum tree_code code, ...))
   code = va_arg (p, enum tree_code);
 #endif
 
-  expression_obstack = &permanent_obstack;
-
   t = make_node (code);
   length = tree_code_length[(int) code];
   TREE_COMPLEXITY (t) = lineno;
@@ -2057,12 +2036,11 @@ build_min_nt VPROTO((enum tree_code code, ...))
     }
 
   va_end (p);
-  expression_obstack = ambient_obstack;
   return t;
 }
 
-/* Similar to `build', except we build
-   on the permanent_obstack, regardless.  */
+/* Similar to `build', except we set TREE_COMPLEXITY to the current
+   line-number.  */
 
 tree
 build_min VPROTO((enum tree_code code, tree tt, ...))
@@ -2071,7 +2049,6 @@ build_min VPROTO((enum tree_code code, tree tt, ...))
   enum tree_code code;
   tree tt;
 #endif
-  register struct obstack *ambient_obstack = expression_obstack;
   va_list p;
   register tree t;
   register int length;
@@ -2084,8 +2061,6 @@ build_min VPROTO((enum tree_code code, tree tt, ...))
   tt = va_arg (p, tree);
 #endif
 
-  expression_obstack = &permanent_obstack;
-
   t = make_node (code);
   length = tree_code_length[(int) code];
   TREE_TYPE (t) = tt;
@@ -2098,26 +2073,9 @@ build_min VPROTO((enum tree_code code, tree tt, ...))
     }
 
   va_end (p);
-  expression_obstack = ambient_obstack;
   return t;
 }
 
-/* Same as `tree_cons' but make a permanent object.  */
-
-tree
-min_tree_cons (purpose, value, chain)
-     tree purpose, value, chain;
-{
-  register tree node;
-  register struct obstack *ambient_obstack = current_obstack;
-  current_obstack = &permanent_obstack;
-
-  node = tree_cons (purpose, value, chain);
-
-  current_obstack = ambient_obstack;
-  return node;
-}
-
 tree
 get_type_decl (t)
      tree t;
index 0bfb99c..83f7698 100644 (file)
@@ -2159,7 +2159,7 @@ build_component_ref (datum, component, basetype_path, protect)
                         unknown_type_node to be really overloaded, so
                         let's oblige.  */
                      TREE_VALUE (fndecls)
-                       = scratch_ovl_cons (TREE_VALUE (fndecls), NULL_TREE);
+                       = ovl_cons (TREE_VALUE (fndecls), NULL_TREE);
                    }
                }
 
@@ -2600,7 +2600,7 @@ build_x_function_call (function, params, decl)
 
   /* A friend template.  Make it look like a toplevel declaration.  */
   if (! is_method && TREE_CODE (function) == TEMPLATE_DECL)
-    function = scratch_ovl_cons (function, NULL_TREE);
+    function = ovl_cons (function, NULL_TREE);
 
   /* Handle methods, friends, and overloaded functions, respectively.  */
   if (is_method)
@@ -5447,7 +5447,7 @@ build_c_cast (type, expr)
   if (processing_template_decl)
     {
       tree t = build_min (CAST_EXPR, type,
-                         min_tree_cons (NULL_TREE, value, NULL_TREE));
+                         tree_cons (NULL_TREE, value, NULL_TREE));
       return t;
     }
 
diff --git a/gcc/testsuite/g++.old-deja/g++.other/syshdr1.C b/gcc/testsuite/g++.old-deja/g++.other/syshdr1.C
new file mode 100644 (file)
index 0000000..b66f7c0
--- /dev/null
@@ -0,0 +1,9 @@
+// Build don't link:
+// Origin: Mark Mitchell <mark@codesourcery.com>
+// Special g++ Options:
+
+# 1 "foo" 1 3
+void f () {}
+extern "C" void foo(int);
+extern "C" void foo(int) throw();
+