cp-tree.def (TEMPLATE_PARM_INDEX): Calculate size using sizeof (struct tree_common).
authorJason Merrill <jason@yorick.cygnus.com>
Wed, 15 Dec 1999 09:18:21 +0000 (09:18 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 15 Dec 1999 09:18:21 +0000 (04:18 -0500)
* cp-tree.def (TEMPLATE_PARM_INDEX): Calculate size using
sizeof (struct tree_common).

From-SVN: r30949

gcc/cp/ChangeLog
gcc/cp/cp-tree.def

index 35a5690366819a60165b2cea34c7bee342272a4c..6bb2211b2d62d65213f6f2c849849f86180e3b6e 100644 (file)
@@ -1,3 +1,8 @@
+1999-12-15  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * cp-tree.def (TEMPLATE_PARM_INDEX): Calculate size using
+       sizeof (struct tree_common).
+
 1999-12-14  Jason Merrill  <jason@casey.cygnus.com>
 
        * optimize.c (expand_call_inline): Set BLOCK_ABSTRACT_ORIGIN on the
index 71c1d8d1ab5054781f8ca3ccec8b7254581fd1b2..70a41b5aafa4c8095fb6c53117a1f32f57725dc7 100644 (file)
@@ -1,7 +1,7 @@
 /* This file contains the definitions and documentation for the
    additional tree codes used in the GNU C++ compiler (see tree.def
    for the standard codes).
-   Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1987,88,90,93,97-8,1999 Free Software Foundation, Inc.
    Hacked by Michael Tiemann (tiemann@cygnus.com)
 
 This file is part of GNU CC.
@@ -125,12 +125,15 @@ DEFTREECODE (TEMPLATE_DECL, "template_decl", 'd', 0)
    the types of things; the ORIG_LEVEL is the level when we are
    worrying about instantiating things.  */
 DEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", 'x', 
-            /* The addition of (sizeof(char*) - 1) in the next
-               expression is to ensure against the case where
-               sizeof(char*) does not evenly divide
-               sizeof(HOST_WIDE_INT).  */
-            1 + ((3 * sizeof (HOST_WIDE_INT) + sizeof(char*) - 1)
-                 / sizeof (char*)))
+            /* The addition of (sizeof(tree) - 1) in the next expression
+               is to handle the case when padding pushes us past an even
+               multiple of sizeof(tree).  */
+            /* We used to try to calculate this using
+               1+3*sizeof(HOST_WIDE_INT), but that fails if alignment
+               makes it bigger.  */
+            ((sizeof (template_parm_index) - sizeof (struct tree_common))
+             + sizeof (tree) - 1)
+            / sizeof (tree))
 
 /* Index into a template parameter list.  This parameter must be a type.
    The TYPE_FIELDS value will be a TEMPLATE_PARM_INDEX.  */