From: Richard Kenner Date: Sun, 27 Dec 1992 03:18:12 +0000 (-0500) Subject: (make_node, case 'c'): For INTEGER_CST, use size of struct containing constant, just... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=66212c2f764860e8b40ec23c1a45b9bf754c5354;p=gcc.git (make_node, case 'c'): For INTEGER_CST, use size of struct containing constant, just like for reals. (make_node, case 'c'): For INTEGER_CST, use size of struct containing constant, just like for reals. Also, clean up code to avoid confusing fallthrough. From-SVN: r2919 --- diff --git a/gcc/tree.c b/gcc/tree.c index 98c06bdfab1..3ce46f6e3a4 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -844,13 +844,21 @@ make_node (code) kind = c_kind; #endif obstack = expression_obstack; - /* We can't use tree_code_length for this, since the number of words - is machine-dependent due to varying alignment of `double'. */ - if (code == REAL_CST) - { - length = sizeof (struct tree_real_cst); - break; - } + + /* We can't use tree_code_length for INTEGER_CST, since the number of + words is machine-dependent due to varying length of HOST_WIDE_INT, + which might be wider than a pointer (e.g., long long). Similarly + for REAL_CST, since the number of words is machine-dependent due + to varying size and alignment of `double'. */ + + if (code == INTEGER_CST) + length = sizeof (struct tree_int_cst); + else if (code == REAL_CST) + length = sizeof (struct tree_real_cst); + else + length = sizeof (struct tree_common) + + tree_code_length[(int) code] * sizeof (char *); + break; case 'x': /* something random, like an identifier. */ #ifdef GATHER_STATISTICS