diff options
author | Jason Merrill <jason@gcc.gnu.org> | 1999-10-07 20:10:09 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 1999-10-07 20:10:09 -0400 |
commit | 6fbfac9226aa91f37641f562f200cd6fa35b4611 (patch) | |
tree | b1c3c499a16276b254e73a32086cb072d17359cb | |
parent | 11028a5379153307e5eef4b71b836e41b11551c6 (diff) | |
download | gcc-6fbfac9226aa91f37641f562f200cd6fa35b4611.zip gcc-6fbfac9226aa91f37641f562f200cd6fa35b4611.tar.gz gcc-6fbfac9226aa91f37641f562f200cd6fa35b4611.tar.bz2 |
expr.c (expand_expr, [...]): Set TREE_USED sooner.
* expr.c (expand_expr, TARGET_EXPR): Set TREE_USED sooner.
* c-decl.c (finish_struct): Use simpler method of
removing elements of a singly-linked list.
From-SVN: r29860
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/c-decl.c | 20 | ||||
-rw-r--r-- | gcc/expr.c | 24 |
3 files changed, 27 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 29f7454..683e7e2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Thu Oct 7 17:02:34 1999 Jason Merrill <jason@yorick.cygnus.com> + + * expr.c (expand_expr, TARGET_EXPR): Set TREE_USED sooner. + +Thu Oct 7 17:01:58 1999 Greg McGary <gkm@gnu.org> + + * c-decl.c (finish_struct): Use simpler method of + removing elements of a singly-linked list. + Thu Oct 7 15:23:28 1999 Michael Meissner <meissner@cygnus.com> * alpha.md (peephole2's): Comment out peephole2's that generate diff --git a/gcc/c-decl.c b/gcc/c-decl.c index b6facc7..37915a4 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -5526,17 +5526,15 @@ finish_struct (t, fieldlist, attributes) layout_type (t); - /* Delete all zero-width bit-fields from the front of the fieldlist */ - while (fieldlist - && DECL_INITIAL (fieldlist)) - fieldlist = TREE_CHAIN (fieldlist); - /* Delete all such members from the rest of the fieldlist */ - for (x = fieldlist; x;) - { - if (TREE_CHAIN (x) && DECL_INITIAL (TREE_CHAIN (x))) - TREE_CHAIN (x) = TREE_CHAIN (TREE_CHAIN (x)); - else x = TREE_CHAIN (x); - } + /* Delete all zero-width bit-fields from the fieldlist */ + { + tree *fieldlistp = &fieldlist; + while (*fieldlistp && TREE_CODE (*fieldlistp) == FIELD_DECL) + if (DECL_INITIAL (*fieldlistp)) + *fieldlistp = TREE_CHAIN (*fieldlistp); + else + fieldlistp = &TREE_CHAIN (*fieldlistp); + } /* Now we have the truly final field list. Store it in this type and in the variants. */ @@ -7128,21 +7128,11 @@ expand_expr (exp, target, tmode, modifier) tree negated = fold (build1 (NEGATE_EXPR, type, TREE_OPERAND (exp, 1))); - /* Deal with the case where we can't negate the constant - in TYPE. */ if (TREE_UNSIGNED (type) || TREE_OVERFLOW (negated)) - { - tree newtype = signed_type (type); - tree newop0 = convert (newtype, TREE_OPERAND (exp, 0)); - tree newop1 = convert (newtype, TREE_OPERAND (exp, 1)); - tree newneg = fold (build1 (NEGATE_EXPR, newtype, newop1)); - - if (! TREE_OVERFLOW (newneg)) - return expand_expr (convert (type, - build (PLUS_EXPR, newtype, - newop0, newneg)), - target, tmode, ro_modifier); - } + /* If we can't negate the constant in TYPE, leave it alone and + expand_binop will negate it for us. We used to try to do it + here in the signed version of TYPE, but that doesn't work + on POINTER_TYPEs. */; else { exp = build (PLUS_EXPR, type, TREE_OPERAND (exp, 0), negated); @@ -7845,6 +7835,11 @@ expand_expr (exp, target, tmode, modifier) if (! ignore) target = original_target; + /* Set this here so that if we get a target that refers to a + register variable that's already been used, put_reg_into_stack + knows that it should fix up those uses. */ + TREE_USED (slot) = 1; + if (target == 0) { if (DECL_RTL (slot) != 0) @@ -7914,7 +7909,6 @@ expand_expr (exp, target, tmode, modifier) /* Mark it as expanded. */ TREE_OPERAND (exp, 1) = NULL_TREE; - TREE_USED (slot) = 1; store_expr (exp1, target, 0); expand_decl_cleanup (NULL_TREE, cleanups); |