tree-inline.c (find_builtin_longjmp_call): Save and restore lineno and input_filename.
authorJason Merrill <jason@redhat.com>
Mon, 3 Mar 2003 21:28:23 +0000 (16:28 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 3 Mar 2003 21:28:23 +0000 (16:28 -0500)
        * tree-inline.c (find_builtin_longjmp_call): Save and restore
        lineno and input_filename.
        (find_alloca_call): Likewise.
        (inlinable_function_p): Run the langhook earlier.

        * calls.c (compute_argument_addresses): Give the new MEMs a
        minimum alignment of PARM_BOUNDARY.
cp/
        * decl.c (start_function): Clear DECL_NUM_STMTS.

        * class.c (get_vtable_decl): Use vtbl_type_node.
        (build_primary_vtable): Check for it.

From-SVN: r63733

gcc/ChangeLog
gcc/calls.c
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/decl.c
gcc/tree-inline.c

index dcfe1f9c1e850f9eeed80d86039e4113b934bcbf..058e788068e2cc50b0ad0384183f8adfc5331f4c 100644 (file)
@@ -1,3 +1,13 @@
+2003-03-03  Jason Merrill  <jason@redhat.com>
+
+       * tree-inline.c (find_builtin_longjmp_call): Save and restore
+       lineno and input_filename.
+       (find_alloca_call): Likewise.
+       (inlinable_function_p): Run the langhook earlier.
+
+       * calls.c (compute_argument_addresses): Give the new MEMs a
+       minimum alignment of PARM_BOUNDARY.
+
 Mon Mar  3 20:45:25 2003  J"orn Rennecke <joern.rennecke@superh.com>
 
        * config/sh/sh.h (EXTRA_SPECS): Add subtarget_asm_relax_spec and
index 31550afc62c0fc53c1c27b5d5ebc02c116dba960..57470b2cebc043f2e010c62f105684bb70b484da 100644 (file)
@@ -1634,6 +1634,7 @@ compute_argument_addresses (args, argblock, num_actuals)
 
          addr = plus_constant (addr, arg_offset);
          args[i].stack = gen_rtx_MEM (args[i].mode, addr);
+         set_mem_align (args[i].stack, PARM_BOUNDARY);
          set_mem_attributes (args[i].stack,
                              TREE_TYPE (args[i].tree_value), 1);
 
@@ -1644,6 +1645,7 @@ compute_argument_addresses (args, argblock, num_actuals)
 
          addr = plus_constant (addr, arg_offset);
          args[i].stack_slot = gen_rtx_MEM (args[i].mode, addr);
+         set_mem_align (args[i].stack_slot, PARM_BOUNDARY);
          set_mem_attributes (args[i].stack_slot,
                              TREE_TYPE (args[i].tree_value), 1);
 
@@ -4578,7 +4580,6 @@ store_one_arg (arg, argblock, flags, variable_size, reg_parm_stack_space)
   return sibcall_failure;
 }
 
-
 /* Nonzero if we do not know how to pass TYPE solely in registers.
    We cannot do so in the following cases:
 
index f9fb1f50d02b9e91e45d53ff3cfde0063821c94b..fd21b5a7f2ecf5e8d730243e69a570fc563b8613 100644 (file)
@@ -1,3 +1,10 @@
+2003-03-03  Jason Merrill  <jason@redhat.com>
+
+       * decl.c (start_function): Clear DECL_NUM_STMTS.
+
+       * class.c (get_vtable_decl): Use vtbl_type_node.
+       (build_primary_vtable): Check for it.
+
 2003-03-02  Aldy Hernandez  <aldyh@redhat.com>
 
         * decl.c (check_initializer): Check for vector_opaque_p.
index 89c11e653a002af6e9078a56d056cb9b1de28951..f5d7ec52d69d58497be32b3669a0df1f8ee5907f 100644 (file)
@@ -533,7 +533,7 @@ get_vtable_decl (tree type, int complete)
   if (CLASSTYPE_VTABLES (type))
     return CLASSTYPE_VTABLES (type);
   
-  decl = build_vtable (type, get_vtable_name (type), void_type_node);
+  decl = build_vtable (type, get_vtable_name (type), vtbl_type_node);
   CLASSTYPE_VTABLES (type) = decl;
 
   /* At one time the vtable info was grabbed 2 words at a time.  This
@@ -594,8 +594,7 @@ build_primary_vtable (tree binfo, tree type)
     }
   else
     {
-      my_friendly_assert (TREE_CODE (TREE_TYPE (decl)) == VOID_TYPE,
-                          20000118);
+      my_friendly_assert (TREE_TYPE (decl) == vtbl_type_node, 20000118);
       virtuals = NULL_TREE;
     }
 
index 216d7fef36f64e58225d91615dea2561d4b73aab..832a2d5657ad2380421817fffb2ba6cf0631dc6a 100644 (file)
@@ -13554,6 +13554,9 @@ start_function (tree declspecs, tree declarator, tree attrs, int flags)
   /* Start the statement-tree, start the tree now.  */
   begin_stmt_tree (&DECL_SAVED_TREE (decl1));
 
+  /* Don't double-count statements in templates.  */
+  DECL_NUM_STMTS (decl1) = 0;
+
   /* Let the user know we're compiling this function.  */
   announce_function (decl1);
 
index 5b5e77502f254336c10800a654c502cabefb6301..77b7bafff6d23e2c88541a04b462fd3e2c4c4455 100644 (file)
@@ -895,7 +895,12 @@ static tree
 find_alloca_call (exp)
      tree exp;
 {
-  return walk_tree (&exp, find_alloca_call_1, NULL, NULL);
+  int line = lineno;
+  const char *file = input_filename;
+  tree ret = walk_tree (&exp, find_alloca_call_1, NULL, NULL);
+  lineno = line;
+  input_filename = file;
+  return ret;
 }
 
 static tree
@@ -921,7 +926,12 @@ static tree
 find_builtin_longjmp_call (exp)
      tree exp;
 {
-  return walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL);
+  int line = lineno;
+  const char *file = input_filename;
+  tree ret = walk_tree (&exp, find_builtin_longjmp_call_1, NULL, NULL);
+  lineno = line;
+  input_filename = file;
+  return ret;
 }
 
 /* Returns nonzero if FN is a function that can be inlined into the
@@ -942,6 +952,11 @@ inlinable_function_p (fn, id)
   if (DECL_UNINLINABLE (fn))
     return 0;
 
+  /* Check this now so that we instantiate C++ templates before reading
+     DECL_NUM_STMTS.  */
+  if ((*lang_hooks.tree_inlining.cannot_inline_tree_fn) (&fn))
+    return 0;
+
   /* Assume it is not inlinable.  */
   inlinable = 0;
        
@@ -1022,9 +1037,6 @@ inlinable_function_p (fn, id)
        }
     }
 
-  if (inlinable && (*lang_hooks.tree_inlining.cannot_inline_tree_fn) (&fn))
-    inlinable = 0;
-
   /* If we don't have the function body available, we can't inline
      it.  */
   if (! DECL_SAVED_TREE (fn))